Hive函数之窗口函数、排名函数详讲
窗口函数 over()
什么是窗口函数?
对数据处理的条数进行设置(窗口大小),对每一条数据都进行开窗。
over函数的用法:
(1)over()函数前可以使用什么?
① lag(列名, n, 默认值)
解释:拿前第n行数据,如果第n行数据不存在,赋默认值。
与之相似的:lead(列名, n, 默认值)
拿后第n行数据,如果第n行数据不存在,赋默认值。
② ntile(n)
把数据均分成n组
③ 排名函数
三个:rank()
、 dense_rank()
、row_number()
rank()
:排名会重复、总数不变
dense_rank()
:排名会重复、总数会减少
row_number()
:排名不会重复、总数不变
④ 聚合函数
max()
、min()
、avg()
、count()
、sum()
(2)over()函数的括号里面可以写什么?
① partition by子句
用法:over(partition by 列名)
② order by子句
用法:over(order by 列名)
,可升序排(默认)、也可降序排(desc)
③ rows子句
rows子句的形式:rows between x and y
,是x、y的取值可能有:
current row
,当前行
n preceding
,往前n行
n following
,往后n行
unbounded preceding
,从前面的起点
unbounded following
,到后面的终点
综合起来一起用的语法形式,如下:
over(partition by a order by b rows between x and y)
注意:rows子句不能单独出现,有order by子句才能有rows子句。
注意:存在order by子句,但没有rows子句,此时窗口的大小为,当前组的第一行到当前行。