【问题标题】:Presto unnest json mapPresto unnest json映射
【发布时间】:2021-07-10 21:41:55
【问题描述】:

关注这些帖子:How to cross join unnest a JSON array in PrestoPresto unnest json 我无法将我的 JSON 映射到所需的表中。

当我运行这个 presto 时:

SELECT
    *
FROM UNNEST(
        CAST(
            JSON_EXTRACT('{"1":{"a":10,"b":11},"2":{"a":20,"b":21}}', '$.1') AS ARRAY(
                VARCHAR
                -- ROW(VARCHAR, BIGINT)
                -- MAP(VARCHAR, MAP(VARCHAR, BIGINT))
            )
        )
    ) AS x(n)

我明白了:

(INVALID_CAST_ARGUMENT) Cannot cast to array(varchar). Expected a json array, but got {
{"a":10,"b":11} ... 

但我理想的预期答案是:

  a | b
 ---+---
 10 | 11
 20 | 21

我如何UNNEST Map 而不是数组?

【问题讨论】:

    标签: json hadoop presto


    【解决方案1】:

    您目标的正确 json 路径是 $.*,但通配符 are not supported by presto,因此您可以将 json 转换为地图并使用它:

    SELECT maps['a'] a, maps['b'] b
    FROM (UNNEST(map_values(
            CAST(JSON '{"1":{"a":10,"b":11},"2":{"a":20,"b":21}}' AS MAP(VARCHAR , MAP(VARCHAR, INTEGER)))))) as tmp(maps);
    

    【讨论】:

    • 非常感谢。我不知道MAP_VALUES 关键字。
    • @vishwarajanand 很乐意提供帮助!有很多好用的功能,查看docs
    猜你喜欢
    • 2016-04-02
    • 2020-11-02
    • 1970-01-01
    • 2020-06-29
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多