HIVE(2) 之 常用函数

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

第一个参数为列名,
第二个参数为往上第n行(可选,默认为1),
第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

与LAG相反

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

第一个参数为列名,
第二个参数为往下第n行(可选,默认为1),
第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

select 
  cookieid, 
  createtime, 
  url, 
  row_number() over (partition by cookieid order by createtime) as rn, 
  LEAD(createtime,1,'1970-01-01 00:00:00') over (partition by cookieid order by createtime) as next_1_time, 
  LEAD(createtime,2) over (partition by cookieid order by createtime) as next_2_time 
from cookie.cookie4;

FIRST_VALUE

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

LAST_VALUE

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

select 
  cookieid, 
  createtime, 
  url, 
  row_number() over (partition by cookieid order by createtime) as rn, 
  first_value(url) over (partition by cookieid order by createtime) as first1 
from cookie.cookie4;

提示:在使用分析函数的过程中,要特别注意ORDER BY子句,用的不恰当,统计出的结果就不是你所期望的。

HIVE 中对  group by 字段的增强

GROUPING SETS,  相当于多个group by分组统计后再union的逻辑

GROUPING__ID, 

CUBE,ROLLUP

这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时、天、月的UV数

select

shengfen,

dishi,

sum(xinzeng) as sum_xinzeng

from xinzeng_tb

group by shengfen, dishi

grouping sets (shengfen, (shengfen, dishi))

-- cluster by sum_xinzeng 

distribute by sum_xinzeng sort by sum_xinzeng desc;

CUBE/ROLLUP必须与GROUP BY一起使用。

cube可以得到group by这些维度上所有可能的聚合问题的答案。

例如:

GROUP BY a, b, c WITH CUBE 等价于

GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (b, c), (a, c), (a), (b), ©, ( )).

rollups

ROLLUP子句用于与GROUP BY一起计算维度层次结构级别上的聚合。

使用ROLLUP将a、b、c分组,假设层次结构是“a”向下钻取到“b”,钻取到“c”。

GROUP BY a, b, c, WITH ROLLUP 等价于 GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (a), ( )).

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

第一个参数为列名,
第二个参数为往上第n行(可选,默认为1),
第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

原文地址:https://www.cnblogs.com/dll102/p/12097759.html