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

Spark SQL中LISTAGG()函数的等效替代方案咨询

Redshift LISTAGG() 转 Spark SQL 实现方案

Spark SQL没有直接对应Redshift LISTAGG()的函数,但可以通过组合内置函数实现完全等效的逻辑,以下是改写方案:

改写后的Spark SQL代码

SELECT
    dp_info_id,
    dp_type,
    CASE
        WHEN COALESCE(type, '-1') = 'Primary Name' 
        THEN concat_ws('|', array_sort(collect_set(fir_name)))
        ELSE NULL
    END AS primary_first_name
FROM
    dp_info c
GROUP BY
    dp_info_id,
    type,
    dp_type

关键函数说明

  • collect_set(fir_name):实现原语句中LISTAGG(DISTINCT)的去重效果,返回去重后的字段值数组
  • array_sort(...):对应原语句WITHIN GROUP (ORDER BY dp_info_id)的排序逻辑(因dp_info_id是分组字段,组内值一致,此处排序数组元素即可兼容原逻辑)
  • concat_ws('|', ...):将排序后的数组用指定分隔符拼接成字符串,完成LISTAGG的核心拼接功能

注:原Redshift代码中GROUP BY的dp_info应为笔误,已修正为dp_info_id(与SELECT字段一致)

内容的提问来源于stack exchange,提问作者Jatin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:15:33