如何在Athena中将同一ID的多行值合并为逗号分隔的单行
在Athena中合并同一ID的多行值为逗号分隔字符串
Athena基于Presto引擎,直接用聚合函数+数组拼接就能实现需求,核心是两个函数的组合:
collect_list(column):把同一分组下的列值收集成数组(保留重复值,顺序和原始数据一致)collect_set(column):和collect_list类似,但会自动去重array_join(array, separator):把数组元素用指定分隔符拼接成字符串
基础示例(保留重复值)
假设你的表名为target_table,包含id和target_column两列,执行以下SQL:
SELECT id, array_join(collect_list(target_column), ', ') AS combined_values FROM target_table GROUP BY id
去重版本
如果需要合并时自动去掉重复的取值,把collect_list换成collect_set即可:
SELECT id, array_join(collect_set(target_column), ', ') AS combined_values FROM target_table GROUP BY id
额外优化:指定排序
如果希望合并后的字符串按特定顺序排列,可以在collect_list里加排序规则:
SELECT id, array_join(collect_list(target_column ORDER BY target_column ASC), ', ') AS combined_values FROM target_table GROUP BY id
注意事项
- 如果原始列存在
NULL值,collect_list会将其纳入数组,array_join会把NULL转为空字符串;如果要过滤NULL,可以先加WHERE target_column IS NOT NULL - 数组拼接后的字符串长度受Athena的字符串长度限制,极端大量数据场景需要注意
内容的提问来源于stack exchange,提问作者Gracia M
相关产品推荐
相关产品推荐

