hive窗口函数

rank()、dense_rank():
rank() over(partition by col0 order by col1)

dense_rank() over(partition by col0 order by col1)

根据col0分组,col1正序排序
例子:假设排序后的值为1,3,3,8,10
      rank返回的值为1,2,2,4,5
      dense_rank返回的值为1,2,2,3,4

lag(),lead():
   
lag(col1,2) over(partition by col0 order by col1) 分组排序后向上两行col1的值

lead(col1,1) over(partition by col0 order by col1)分组排序后向下两行col1的值


ntile(num)
我的理解是它会把分组后的数据每组都分成num份,然后给每份数据赋予1到num之间的数值(不知是否正确)
比如partition by col0后某组数据有20个,如果是ntile(5),那么第1到第4条数据值是1,5-8条数据值是2,依次类推



聚合函数配合rows between [from] preceding and [to] following (如:sum)
select col0,col1,sum(col2) over(partition by col0 order by col1 rows between 1 preceding and 1 following) total from table 此例中total值是根据col0分组对col1排序后上一行到下一行总共3行col2列值得总和

比如有如下table
col0   col1  col2
1      1     1
1      2     1
1      3     2
2      1     2
2      2     3
则结果为:
col0   col1   total
1      1      2
1      2      4
1      3      3
2      1      5
2      2      5

猜你喜欢

转载自zzaccount.iteye.com/blog/2212964