hive 窗口和分析函数功能

背景: 使用hive-sql到一定的层次之后,对于这些函数需要透彻的理解,尤其是它适合的使场景。

1. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics   hive关于窗口函数和分析函数的官方文档。

  备注:https://www.jianshu.com/p/acc8b158daef 比较靠谱的中文版本

2. 内容:

  a. 窗口函数:

    1. lead/lag/first_value/last_value

    2. lead: lead(col,n,default)统计分组内往下第n行的值

    3.lag:lag(col,n,default)统计分组内往上第n行值

    4.first_value:分组排序后的,截止到当前行的第一个值

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

  b. over语句:

    1. 跟在count/sum/min/max/avg 聚合后面

    2. 窗口规范:TBD

    3. 当order by 后缺少窗口从句条件时,默认窗口规范:range between unbounded preceding and current row

    4. 当order by和窗口从句都缺失时,默认窗口规范:row between unbounded preceding and unbounded following

  c. 分析函数:rank/row_number/dense_rank/cume_dist/percent_rank/ntile

    1. row_number():分组内排序,1234567

    2. rank():在分组内排序,排名相等会在名次中留下空位

    3. dense_rank():在分组内排序,排名相等的不会留下空位,但是名次相同

    4.CUME_DIST():小于等于当前值的行数除以分组内的总行数。比如,统计小于等于当前薪水的人数占总人数的比例。

    5.PERCENT_RANK():分组内当前行的RANK值-1/分组内 总行数-1

    6. ntile:用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。NTILE不支持ROWS BETWEEN,比如NTILE(2) OVER(PARTITION BY cookieid         ORDER BY createtime ROWS BETWEEN 3 PERCEDING AND CURRENT ROW)

3.细节内容:

  a. PRECEDING:往前

  b. FOLLOWING:往后

  c. CURRENT ROW:当前行

  d. UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING:表示到后面的终点

  以下内容参考:https://www.cnblogs.com/swg1124/p/7089683.html

  e.grouping sets: 在一个group by语句里面,根据不同的维度组合进行聚合,等价于group by 的结果进行uniinall

  f.grouping__id:表示结果属于哪一个分组集合.

  g. cube:根据group by的维度的所有组合进行聚合: with cube

  h.rollup:是cube的子集,以最左侧的维度为主,从该维度进行层级聚合

原文地址:https://www.cnblogs.com/chengdu-jackwu/p/10167572.html