Presto -使用数组的每个索引将2个数组转换为单独的映射实体



我无论如何也想不出如何在短时间内做到这一点。查询后,我有两个聚合数组a和b。我想弄清楚如何将数组的每个索引转换为一个映射,为a和b中的每个值提供静态标签。

参见下面的示例。我在Presto文档中尝试了所有不同的数组映射函数,但似乎无法弄清楚。任何想法吗?

注意:a和b的长度总是相同的,但可以在1到10的长度之间变化

输入

select
array_agg('a','b','c') as a,
array_agg(1,2,3) as b
from etc...

变成

<表类>btbody><<tr>[' a ', ' b ', ' c '](1、2、3)

不确定是否可以创建包含不同类型作为值的映射,但是可以压缩数组并将结果转换为带有命名字段的行:

SELECT transform(
zip(a, b),
r -> cast(r AS ROW(static_label_char CHAR, static_label_num SMALLINT)))
FROM 
(SELECT ARRAY['a','b','c'] AS a, ARRAY[1,2,3] AS b)

输出:

<表类>_col0[{static_label_char=a, static_label_num=1}, {static_label_char=b, static_label_num=2}, {static_label_char=c, static_label_num=3}]

最新更新