You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:45:51