SQL进阶技巧:如何保证collect_list()函数有序性?【有序数据合并问题】

目录

0  引言

1 数据准备

2 问题分析

方法一:使用collect_list()函数,生成顺序序列rn,在分组中让rn参与分组及排序,形成局部排序效果。

方法2:采用collect_list() over(partition by xxx order by xxx)  指定排序顺序

3 面试真题【美团骑手配送订单送达时间客户列表问题】

3.1 需求描述

3.2数据准备

3.3 数据分析 

方法1:分组排序

方法2:collect_list() over()分析函数

4 小结


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值