Presto unnest json映射
Posted
技术标签:
【中文标题】Presto unnest json映射【英文标题】:Presto unnest json map 【发布时间】:2021-07-10 21:41:55 【问题描述】:关注这些帖子:How to cross join unnest a JSON array in Presto 和 Presto 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
而不是数组?
【问题讨论】:
【参考方案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。以上是关于Presto unnest json映射的主要内容,如果未能解决你的问题,请参考以下文章