一、函数特点
- 分组聚合:需配合
GROUP BY使用,将每个分组内的col值收集为数组。 - 保留重复值:与
collect_set(col)不同,collect_list不会去重,保留所有原始值(包括重复值)。 - 顺序不确定:默认不保证数组内元素的顺序(除非配合窗口函数
ORDER BY)。
二、典型应用场景
- 用户行为序列分析:将用户的多次操作按时间串联为行为路径。
- 数据结构转换:将行式存储的数据转为列式(如将多行商品标签转为单个商品的标签数组)。
- 复杂统计:计算每个分组内的所有值的列表(如收集每个班级的所有学生成绩)。
三、示例演示
场景 1:用户订单列表收集
需求:收集每个用户的所有订单 ID,生成 用户 ID → [订单 ID 列表] 的映射。
数据:
text
user_id | order_id
------------------
1 | 1001
1 | 1002
2 | 1003
2 | 1003 -- 重复订单
3 | 1004
HQL:
SELECT user_id, collect_list(order_id) AS order_list -- 收集订单 ID 到数组
FROM orders
GROUP BY user_id;
结果:
text
user_id
[, ]
[, ]
[]


