#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' )