窗口函数
窗口函数OVER()
用于定义一个窗口,该窗口指定了函数应用的数据范围
对窗口数据进行分区
partition by 必须和over () 一起使用, distribute by经常和sort by 一起使用,可以不和over() 一起使用.DISTRIBUTE BY
决定了数据如何分布到不同的Reducer上,而SORT BY
决定了每个Reducer内部数据的排序方式。
示例
对数据进行排序
sort by
子句会让输入的数据强制排序 (强调:当使用排序时,窗口会在组内逐行变大)
示例
补充
示例
Windows子句
rows 和 range都是用来定义窗口框架, 不同的是rows基于行号, 而 RANGE
子句通常用于基于值的范围来定义窗口
聚合函数开窗时order by 是表示累加,默认从起点行到当前行的累加;所以,示例1和示例2的结果是一样的
在没有order by的聚合函数sum()开窗的结果是起点到终点的累加值(示例3)
示例1
示例2
示例3
示例4
前一行到当前行的加和(S列的值是SAL列的前一行的值加当前行的值)
示例5
前一行到后一行的范围