Hive 中的window函数

1. 概念

        hive中的窗口函数和sql中的窗口函数相类似,一般用于OLAP分析(在线分析处理)。有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这便要用到窗口函数了。注意:

在SQL处理中,窗口函数(over 关键字) 都是最后一步执行,且仅位于Order by字句之前

应用场景:

1. 用于分区排序;

2. 动态Group By;

3. Top N;

4. 累计计算;

5. 层次查询。

实验数据

uid,dt,pv

A,2018-04-10,1
A,2018-04-11,5
A,2018-04-12,7

A,2018-04-13,3

A,2018-04-14,2

A,2018-04-15,4

A,2018-04-16,4
B,2018-04-11,3
B,2018-04-12,5

2. 窗口函数 part1

2.1 ROW_NUMBER()

        常用于分组内topN 场景,从1开始按照顺序,生成分组内记录的序列。

2.2 RANK & DENSE_RANK

        rank() 生成数据项在分组中的排名,排名相等会在名次中留下空位;而dense_rank() 在排名相等时则不会在名次中留下空位。

select uid,dt,pv,
rank() over(partition by uid order by pv desc) as rn1,
dense_rank() over(partition by uid order by pv desc) as rn2,
row_number() over(partition by uid order by pv desc) as rn3 
from XX;

2.3 NTILE

        ntile 把有序的数据集合平均分配到指定的num个桶中,将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值