Hive常用统计函数

hive统计函数

第一组:SUM、AVG、MIN、MAX

sum: sum(score) over (partition by a order by b)
当over()语句置空时,窗口默认返回所有行

第二组:NTILE、ROW_NUMBER、RANK、DENSE_RANK、CUME_DIST、PERCENT_RANK

NTILE(N):分组数据按照order by子句顺序切分成N片,返回当前行切片值,如果切片不均匀,默认增加第一个切片的分布。
ROW_NUMBER():分组数据按照order by子句顺序,生成分组内记录的序列。
RANK():分组数据按照order by子句顺序,生成数据项在分组中的排名,排名相等会在名次中留下空位。
DENSE_RANK():分组数据按照order by子句顺序,生成数据项在分组中的排名,排名相等不会在名次中留下空位。
CUME_DIST():分组数据按照order by子句顺序,生成(分组内小于等于当前值的行数) / (分组内总行数)的值。

PERCENT_RANK():分组数据按照order by子句顺序,生成(分组内当前行的RANK值-1) / (分组内总行数-1)。

第三组:LAG、LEAD、FIRST_VALUE、LAST_VALUE

本组函数不支持Window子句。

LAG(col,n,DEFAULT)*:分组数据按照order by子句顺序,用于统计窗口内向上数第n行的col列值, DEFAULT为默认值(当向上数第n行为NULL时,取默认值,如不指定,则为NULL),行数值以ROW_NUMBER()为标准。

LEAD(col,n,DEFAULT):与LAG相反,LEAD用于统计窗口内向下数第n行的col列值,DEFAULT为默认值(当向下数第n行为NULL时,取默认值,如不指定,则为NULL),行数值以ROW_NUMBER()为标准。

FIRST_VALUE(col):返回分组内部截止到当前行的第一个值。

LAST_VALUE(col):返回分组内部截止到当前行的最后一个值。

需要注意的是,FIRST_VALUE()和LAST_VALUE()在使用时,若不指定排序方式,则按照文件中的偏移量进行排序,会出现错误的结果。应用时需要注意的是,因FIRST_VALUE()和LAST_VALUE()都是取截止到当前行的极值,所以若要取分组内的第一个值,可以使用FIRST _VALUE() OVER(PARTITION BY column1 ORDER BY column2),如果要取分组内的最后一个值,不能使用LAST _VALUE() OVER(PARTITION BY column1 ORDER BY column2),该方法返回的是当前行的值,应该使用FIRST _VALUE() OVER(PARTITION BY column1 ORDER BY column2 DESC)。

第四组:GROUPING SETS、GROUPING_ID、CUBE、ROLLUP

在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL,如果需要多种维度的聚合,单纯使用GROUP BY的形式会大大增加代码量,此时我们可以根据应用场景的不同选择本组内的窗口函数进行分组聚合。

GROUPING__ID:用于标示结果属于哪一个分组,分组序号遵从CUBE中的分组序号,注意这里’_’是两个。

CUBE:与GROUPING SETS只对集合中的维度进行分组不同,CUBE是对GROUP BY维度的所有组合进行聚合。
ROLLUP:ROLLUP的结果集是CUBE的子集,以最左侧的维度为主,从该维度进行层级聚合,包括全维度。

你可能感兴趣的:(Hive常用统计函数)