目录
方法一:使用collect_list()函数,生成顺序序列rn,在分组中让rn参与分组及排序,形成局部排序效果。
方法2:采用collect_list() over(partition by xxx order by xxx) 指定排序顺序
0 引言
collect_list()函数是hive中非常重要的函数,他是一种聚合函数,他可以将多行数据合并成一行数据,可以将某列的值聚合成一个list,我们通常说的数据合并就是利用该函数实现的。但是该函数在使用时候不能保证合并的顺序性,包括在hive官网中也给出了说法,由于shuffe的影响并不能保证结果的顺序性,在日常的实践中我们往往需要的输出结果是要有序的,那么如何利用该函数保证输出结果的有序性呢?本文针对这一问题进行探究,并给出了完整的解决方案。
1 数据准备
有如下数据:
其中uid为用户,seq为路径顺序,trace为实际路径,需要将路径按照用户实际顺序进行合并。
with data as(
select 1 uid, 5 seq , 'e' trace union all
select 1 uid, 3 seq , 'c' trace union all
select 1 uid, 1 seq , 'a' trace unio