hive窗口函数

Hive窗口函数可以计算一定范围内、一定值域内、或者一段时间内的累积和以及移动平均值等;可以结合聚集函数SUM() 、AVG()等使用;可以结合FIRST_VALUE() 和LAST_VALUE(),返回窗口的第一个和最后一个值。

  • 如果只使用partition by子句,未指定order by的话,我们的聚合是分组内的聚合.
  • 使用了order by子句,未使用window子句的情况下,默认从起点到当前行.
    window子句:
  • PRECEDING:往前
  • FOLLOWING:往后
  • CURRENT ROW:当前行
  • UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点

Ntile

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

语法

ntile (num)  over ([partition_clause]  order_by_clause)  as your_bucket_num

可以根据桶号,选取前或后 n分之几的数据。

Rank,Dense_Rank, Row_Number

SQL很熟悉的3个组内排序函数

三者语法相同:

R() over (partion by col1… order by col2… desc/asc)

rank 会对相同数值,输出相同的序号,而且下一个序号不间断;

dense_rank 会对相同数值,输出相同的序号,但下一个序号,间断

row_number 会对所有数值输出不同的序号,序号唯一连续;

Lag, Lead, First_value,Last_value

Lag, Lead
LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值

LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值, 与LAG相反

FIRST_VALUE, LAST_VALUE
first_value: 取分组内排序后,截止到当前行,第一个值

last_value: 取分组内排序后,截止到当前行,最后一个值

参考:

http://www.cnblogs.com/skyEva/p/5730531.html