常见的GROUP BY 和 DISTRIBUTE BY 等语句并不能支持诸如分组排名、滑动平均值等计算,原因是 GROUP BY 语句只能为每个分组的数据返回一条记录,而非每条数据一行。但是,Hive 0.11之后引入了窗口查询功能,使用 WINDOW 语句我们可以基于分区和窗口,在实现分组分析的目的的同时,为每条数据都生成一行结果记录。
语法形式如下:
Function(arg1,....argn) OVER([PARTITION BY<...>] [ORDER BY<...>] [window_clause])
- 窗口函数Windowing functions
Windowing functions | 介绍 |
---|---|
LEAD(col,n,DEFAULT) | 用于统计窗口内往下第n行的值。参数涵义:参数col为列名,第二个参数n为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) |
LAG(col,n,DEFAULT) | 用于统计窗口内往上第n行值。参数意义:参数col为列名,第二个参数n为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL) |
FIRST_VALUE(col,false) | 取分组内排序后,截止到当前行,第一个值。参数:第一个参数col代表分析列,第二个参数是boolean类型,表示是否跳过NULL值(默认false) |
LAST_VALUE(col,false) | 取分组内排序后,截止到当前行,最后一个值。参数涵义与FIRST_VALUE一致 |