Hive的开窗函数小结以及利用排名函数查询topN例子

本文深入解析开窗函数的使用,对比groupby功能,详细介绍ntile、LAG、LEAD等窗口函数,以及row_number、rank、dense_rank排名函数的应用场景。通过实例演示如何利用开窗函数查询数据排名,实现按比例查询及获取topN效果。

开窗函数的关键字是 over,一般用在聚合函数的后面

开窗函数与group by 的比较

开窗函数用于计算基于组的某种聚合值,并且对每个组返回多行,但是group by 一个组只返回一行

over() 不加参数,窗口大小为所有行
over(partition by 字段) 窗口大小为所在分区的大小
over(partition by 字段 order by 字段 [asc/desc]) 窗口大小为分区内的第一行一直到当前行
over(distribute by 字段 sort by 字段 [asc/desc]) 待思考

相应的窗口函数(需配合 over() 使用):

ntile(数值) over(…)
对窗口所在行按顺序进行切片,并返回切片值(第几片),可以用于按比例查询数据,需要将切片的结果作为子表实现按比例查询

LAG(字段,数值n,默认值) over(…)
返回当前窗口数据行前面的第n行,选择的默认值为当不存在当前数据行前面的第n行时,返回的值

LEAD(字段,数值n,默认值) over(…)
返回当前窗口数据行后面的第n行,选择的默认值为当不存在当前数据行后面的第n行时,返回的值

first_value(字段) over(…)
返回当前窗口的第一行的值

last_value(字段) over(…)
返回当前窗口第一行到当前行的记录中最后一行的值

排名函数:对窗口内的行按顺序显示排名,具体排名时选择哪个,还是看需求
row_number() over(partition by 字段 order by 字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值