AWS athena глубокое сканирование данных JSON

#amazon-web-services #amazon-athena #jsonpath

Вопрос:

Я не могу запросить вложенные ключи с .. помощью оператора, который поддерживается JSONPath в Athena.

 WITH dataset AS (  SELECT '{"name": "aa",  "id":-100,  "org": "engineering",  "key":{"val":1000},  "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}'  AS blob1 ) -- This is not working SELECT * FROM dataset where json_extract_scalar(blob1, '$..val') = '1000';  -- Working SELECT * FROM dataset where json_extract_scalar(blob1, '$.key.val') = '1000';  

Есть ли какой-либо альтернативный способ, с помощью которого я могу запрашивать вложенные поля в Athena?

Комментарии:

1. Здорово, что у вас есть полное повторение, но все равно «Это не работает», как правило, не очень полезно для тех, кто пытается помочь вам с вашей проблемой, поэтому, пожалуйста, попробуйте поделиться также точными сведениями об ошибке в следующий раз.

Ответ №1:

Поддержка пути Athena/Presto json не очень велика. Вы можете обойти это, но это довольно грязно, включая приведение вашего json к MAP(VARCHAR, JSON) полученным значениям, а затем работу с ними:

 WITH dataset AS (  SELECT '{"name": "aa",  "id":-100,  "org": "engineering",  "key":{"val":1000},  "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS blob1 )  SELECT * FROM dataset WHERE contains(  transform(  map_values(cast(json_parse(blob1) as MAP(VARCHAR, JSON))),  j-gt;try(json_extract_scalar(j, '$.val'))  ),  '1000'  )