一、collect_set() /collect_list()介绍
collect_set()函数与collect_list()函数属于高级聚合函数(行转列),将分组中的某列转换成一个数组返回,常与concat_ws()函数连用实现字段拼接效果。
-
collect_list:收集并形成list集合,结果不去重
- collect_set:收集并形成set集合,结果去重
二、collect_set() /collect_list()有序性
0 问题描述
有一张用户关注表table20,需求:根据用户user_id分组,按照粉丝关注的时间升序排序,输出粉丝id数组和粉丝关注的时间数组,并保障两个数组的数据能一一对应。
1 数据准备
create table if not exists table20 (
user_id int comment '用户id',
follow_user_id int comment '粉丝id',
update_time string comment '粉丝关注的时间'
) comment '用户关注表';
insert overwrite table table20 values
(1, 101,'2021-09-30 10:12:00'),
(1, 103,'2021-10-01 11:00:00'),
(1, 104,'2021-11-02 10:00:00'),
(1, 103,'2021-11-28 10:22:00'),
(2, 104,'2021-11-02 10:11:00'),
(2, 100,'2021-11-03 10:21:00'),
(1, 99,'2021-11-23 12:28:00');
2 数据分析
方式一: row_number() over(partition by .. order by..) as rn 排序,然后再使用collect_list()/c

最低0.47元/天 解锁文章
1327






