如何在Presto查询中从Map类型列提取有序值列表?
高效提取Presto中Map值为有序数组的方法
你的场景是从包含ID和Vals(键为0-99的map<bigint, float>)的表中,按ID提取对应Map的float值并组成有序数组。直接逐个键取值的方式确实会因为多次Map访问导致效率低下,推荐使用以下更高效的实现:
SELECT ID, array_transform( array_sort(map_entries(Vals), (a, b) -> a.key - b.key), entry -> entry.value ) AS sorted_vals_array FROM your_table;
方法说明:
map_entries(Vals):将Map类型的Vals转换为键值对数组,每个元素是包含key和value的行结构,例如[{"key":0,"value":0.234}, {"key":1,"value":-431.4358}, ...]array_sort(..., (a, b) -> a.key - b.key):对键值对数组按key进行升序排序,确保结果按0到99的顺序排列array_transform(..., entry -> entry.value):从排序后的键值对数组中提取所有value字段,最终得到目标float数组
这种方式只需要对Map进行一次解析操作,避免了原方法中100次独立的键查找,在数据量较大时能显著提升查询效率。
内容的提问来源于stack exchange,提问作者user98235
相关产品推荐
相关产品推荐

