Presto如何将两个等长array按对应索引生成带静态标签的map实体
Presto 双等长array转指定标签map序列实现方案
直接使用以下SQL即可完成需求:
SELECT transform( zip(a, b), pair -> map( 'static_label_char', pair[1], 'static_label_num', pair[2] ) ) AS target_result FROM ( -- 此处替换为你原本生成a、b数组的查询逻辑 SELECT array_agg('a','b','c') AS a, array_agg(1,2,3) AS b FROM your_source_table ) t
如果需要把最终的map数组拆分为独立的多行map,可在外层套UNNEST函数:
SELECT single_map FROM ( SELECT transform( zip(a, b), pair -> map( 'static_label_char', pair[1], 'static_label_num', pair[2] ) ) AS map_array FROM ( SELECT array_agg('a','b','c') AS a, array_agg(1,2,3) AS b FROM your_source_table ) t ) t, UNNEST(map_array) AS t(single_map)
用到的核心函数说明
zip(array1, array2):接收多个等长数组作为入参,返回元素为ROW类型的数组,每个ROW对应原数组同索引位置的元素组合transform(array, processing_function):遍历数组的每个元素,传入自定义逻辑处理后返回新数组map(key1, value1, key2, value2...):按传入的键值对顺序生成map结构
如果你使用的是较低版本不支持zip函数,可使用兼容性更强的UNNEST写法:
SELECT array_agg( map( 'static_label_char', a_item, 'static_label_num', b_item ) ) AS target_result FROM ( SELECT a_item, b_item FROM ( SELECT array_agg('a','b','c') AS a, array_agg(1,2,3) AS b FROM your_source_table ) t CROSS JOIN UNNEST(a, b) AS t(a_item, b_item) ) t GROUP BY a, b
内容的提问来源于stack exchange,提问作者Python Learner
相关产品推荐
相关产品推荐

