【问题标题】:AWS athena deep scan for JSON DataAWS athena 深度扫描 JSON 数据
【发布时间】:2021-12-23 18:52:19
【问题描述】:

我无法使用 Athena 中的 JSONPath 支持的 .. 运算符查询嵌套键。

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 中的嵌套字段?

【问题讨论】:

  • 很高兴你有一个完整的重现,但仍然“这不起作用”对于那些试图帮助你解决问题的人来说通常不是那么有用,所以下次请尝试分享确切的错误详细信息.

标签: amazon-web-services amazon-athena jsonpath


【解决方案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->try(json_extract_scalar(j, '$.val'))
        ),
        '1000'
    )

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 2021-11-26
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2018-06-23
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多