Создать таблицу Athena из вложенного источника json

Как мне создать таблицу Athena из вложенного файла json? Это мой образец json-файла. Мне нужны только выбранные пары ключ-значение, такие как состояние крыши и гаражные стены.

{   "reportId":"7bc7fa76-bf53-4c21-85d6-118f6a8f4244",
"reportOrderedTS":"1529996028730",
"createdTS":"1530304910154",
"report":"{'summaryElements': [{'value': 'GOOD', 'key': 'roofCondition'}, 
{'value': '98', 'key': 'storiesConfidence'}{'value': '0', 'key': 
'garageStalls'}], 'elements': [{'source': 'xyz', 'imageId': '0xxx_png', 
'modelVersion': '1.21.0', 'key': 'pool'},  {'source': 'xyz', 'imageId': '0111_png', 'value': 'GOOD', 'modelVersion': '1.36.0', 'key': 'roofCondition','confidence': '49'}],    }", "status":"Success", "reportReceivedTS":"1529996033830" }

person Saurav Das    schedule 27.08.2018    source источник


Ответы (2)


Прежде всего, вы отправили неправильную версию документа JSON, правильная версия должна выглядеть так:

{"reportId":"7bc7fa76-bf53-4c21-85d6-118f6a8f4244", "reportOrderedTS":"1529996028730", "createdTS":"1530304910154", "report":{"summaryElements": [{"value": "GOOD", "key": "roofCondition"},{"value": "98", "key": "storiesConfidence"},{"value": "0", "key": "garageStalls"}], "elements": [{"source": "xyz", "imageId": "0xxx_png", "modelVersion": "1.21.0", "key": "pool"},{"source": "xyz", "imageId": "0111_png", "value": "GOOD", "modelVersion": "1.36.0", "key": "roofCondition", "confidence": "49"}] }, "status":"Success", "reportReceivedTS":"1529996033830" }

Да, вы можете запросить таблицу на Афине с помощью вложенного json. Вы можете добиться этого, например, создав следующую таблицу:

CREATE EXTERNAL TABLE example(
`reportId` string,
`reportOrderedTS` bigint,
`createdTS` bigint,
`report` struct<
`summaryElements`: array<struct<`value`:string, `key`: string>>,
`elements`: array<struct<`source`: string, `imageId`:string, `modelVersion`:string, `key`:string, `value`:string,  `confidence`:int>>>, 
`status` string, 
`reportReceivedTS` bigint
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://example'  

Это пример запроса:

select reportid,reportorderedts,createdts,
summaryelements.value, summaryelements.key, elements.source, elements.key
from example, UNNEST(report.summaryelements) t(summaryelements), UNNEST(report.elements) t(elements)

Полезные ссылки:

https://docs.aws.amazon.com/athena/latest/ug/flattening-arrays.html

https://docs.aws.amazon.com/athena/latest/ug/rows-and-structs.html

person j.b.gorski    schedule 29.08.2018

Кажется, это тоже работает (недействительный json)!

Каждая строка таблицы - это одна строка в файле json.

Без пробелов без запятой в конце строки (просто новая строка между строками таблицы).

 {"is_active":"True","title":"mr","first_name":"admindoc","last_name":"admindoc","birthdate":"2003-09-01","home_phone":"+654654","mobile_phone":"+654654","gender":"m","language":"fr","email":"[email protected]"}
 {"is_active":"True","title":"mr","first_name":"dok","last_name":"dok","birthdate":"1998-02-03","home_phone":"None","mobile_phone":"+654654","gender":"m","language":"fr","email":"[email protected]"}
person Ohad the Lad    schedule 17.11.2019