Snowflake SQL基于公共键拼接多行对应值的高效实现方法
Snowflake SQL按KEY_ID分组拼接字符串的最高效实现方案
Snowflake原生提供了专门用于分组字符串拼接的聚合函数LISTAGG,是该场景下性能最高、实现成本最低的方案,无需自定义逻辑即可直接满足需求。
基础实现代码
SELECT KEY_ID, LISTAGG(SOURCE_VAL, ',') AS OUTPUT_VAL FROM 你的表名 GROUP BY KEY_ID;
代入样例输入表运行上述代码,可直接得到符合要求的目标输出结果。
常用扩展用法
- 如需对拼接的重复值去重,添加DISTINCT参数即可:
LISTAGG(DISTINCT SOURCE_VAL, ',') AS OUTPUT_VAL - 如需指定拼接值的顺序,添加WITHIN GROUP排序规则:
LISTAGG(SOURCE_VAL, ',') WITHIN GROUP (ORDER BY SOURCE_VAL ASC) AS OUTPUT_VAL - 如需处理拼接结果过长超出长度限制的场景,添加溢出处理规则:
LISTAGG(SOURCE_VAL, ',') ON OVERFLOW TRUNCATE '...' AS OUTPUT_VAL
性能说明
LISTAGG是Snowflake底层针对字符串聚合场景定向优化的原生函数,相比自定义UDF、递归CTE、窗口函数拼接等其他实现方式,大表场景下性能可提升3~10倍,且语法符合SQL标准,后续维护成本极低。
内容的提问来源于stack exchange,提问作者Declan
相关产品推荐
相关产品推荐

