Hive中提供了越来越多的分析函数,用于完成负责的统计分析。我们先在一一列举,希望能够加深印象,希望大家积极讨论,如有不足,请大家多多指教。。。。

1.Row_Number,Rank,Dense_Rank这三个窗口函数的使用场景非常多 

 row_number():从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列;通常用于获取分组内排序第一的记录;获取一个session中的第一条refer等。

rank():生成数据项在分组中的排名,排名相等会在名次中留下空位。

dense_rank():生成数据项在分组中的排名,排名相等会在名次中不会留下空位。

示例:数据准备

select * from dcx1234;

hive 计算top hive percent_rank_默认值

hive 计算top hive percent_rank_内排序_02

hive 计算top hive percent_rank_默认值_03

2.SUM、AVG、MIN、MAX

首先理解下什么是WINDOW子句

PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点

hive 计算top hive percent_rank_分析函数_04

hive 计算top hive percent_rank_hive 计算top_05

3.NTILE

NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。NTILE不支持ROWS BETWEEN

hive 计算top hive percent_rank_hive 计算top_06

hive 计算top hive percent_rank_默认值_07

使用场景:

1.如一年中,统计出工资前1/5之的人员的名单,使用NTILE分析函数,把所有工资分为5份,为1的哪一份就是我们想要的结果.

2.sale前20%或者50%的用户ID

4.LEAD,LAG,FIRST_VALUE,LAST_VALUE

lag与lead函数可以返回上下行的数据

LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

hive 计算top hive percent_rank_分析函数_08

hive 计算top hive percent_rank_默认值_09

使用场景:通常用于统计某用户在某个网页上的停留时间

LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

hive 计算top hive percent_rank_hive 计算top_10

hive 计算top hive percent_rank_分析函数_11

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

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

hive 计算top hive percent_rank_分析函数_12

hive 计算top hive percent_rank_分析函数_13

如果不指定ORDER BY,则默认按照记录在文件中的偏移量进行排序,会出现错误的结果

hive 计算top hive percent_rank_内排序_14

hive 计算top hive percent_rank_默认值_15

如果想要取分组内排序后最后一个值,则需要变通一下:

hive 计算top hive percent_rank_分析函数_16

hive 计算top hive percent_rank_分析函数_17

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

5.CUME_DIST,PERCENT_RANK

这两个序列分析函数不是很常用,这里也介绍下,他不支持window子句

–CUME_DIST 小于等于当前值的行数/分组内总行数
–比如,统计小于等于当前薪水的人数,所占总人数的比例

hive 计算top hive percent_rank_内排序_18

hive 计算top hive percent_rank_hive 计算top_19

PERCENT_RANK 分组内当前行的RANK值-1/分组内总行数-1

hive 计算top hive percent_rank_默认值_20

hive 计算top hive percent_rank_默认值_21