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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:03