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);
关注这些帖子: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);