hive实现分组拼接功能:替代 MySQL 的 group_concat
在 MySQL 中,group_concat 用于将分组后的多行数据按指定分隔符拼接,而 Hive 中虽无此函数,但可通过 collect_set/collect_list + concat_ws 的组合实现相同功能。本文详细介绍这一替代方案的原理、用法及注意事项。
核心函数解析
实现分组拼接需用到两个核心函数,二者配合可完成 “分组聚合 → 拼接字符串” 的全流程:
collect_set(col) / collect_list(col)
功能:将分组内某列的所有值聚合为一个数组。
区别:
collect_set:去重,返回无重复元素的数组;collect_list:不去重,保留所有元素(包括重复值)。
示例:
若分组后某列值为[‘a’, ‘b’, ‘a’],则:
collect_set(col)返回['a', 'b'];collect_list(col)返回['a', 'b', 'a']。
concat_ws(separator, array)
- 功能:将数组中的元素按指定分隔符(
separator)拼接为字符串。 - 参数:
separator:分隔符(如','、'|');array:数组(通常为collect_set或collect_list的输出)。
- 示例:
concat_ws(',', ['a', 'b'])返回'a,b'。