Presto unnest json 地图

Presto unnest json map

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

当我 运行 这个转瞬即逝的时候:

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 路径是 $.* 但通配符 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);