本文介绍了如何在 Presto 中交叉连接取消嵌套 JSON 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给定一个包含一列 JSON 的表,如下所示:
{"payload":[{"type":"b","value":"9"}, {"type":"a","value":"8"}]}{"payload":[{"type":"c","value":"7"}, {"type":"b","value":"3"}]}
如何编写 Presto 查询以提供所有条目的平均 b
值?
到目前为止,我认为我需要使用类似 Hive 的 lateral查看explode,其等效项是交叉联接 unnest 在 Presto 中.
但是我被困在如何为 cross join unnest
编写 Presto 查询.
如何使用cross join unnest
展开所有数组元素并选中它们?
解决方案
这是一个例子
with example(message) as (价值观(json '{"payload":[{"type":"b","value":"9"},{"type":"a","value":"8"}]}'),(json '{"payload":[{"type":"c","value":"7"}, {"type":"b","value":"3"}]}'))选择n.类型,平均(n.值)发件人示例交叉连接不嵌套(投掷(JSON_EXTRACT(消息,'$.payload')作为 ARRAY(ROW(类型 VARCHAR,值 INTEGER)))) 作为 x(n)WHERE n.type = 'b'GROUP BY n.type
with
定义了一个名为 example
的公用表表达式 (CTE),其列别名为 message
VALUES
返回逐字表行集
UNNEST
在单行的一列中获取一个数组,并将该数组的元素作为多行返回.
CAST
正在将 JSON
类型更改为 UNNEST
所需的 ARRAY
类型.它可能很容易成为 ARRAY