zoukankan      html  css  js  c++  java
  • 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的子集,以最左侧的维度为主,从该维度进行层级聚合

  • 相关阅读:
    用Shell判断字符串包含关系
    shell命令调用http接口(curl方式)
    shell脚本实现发送信息到钉钉
    功能测试特殊字符处理总结
    Java_Swing实现小球沿正弦曲线运动的代码
    Python迁移MySQL数据到MongoDB脚本
    1. WP8.1学习笔记
    0. WP8.1学习笔记
    小练习--低仿系统计算器
    C#字符串题目
  • 原文地址:https://www.cnblogs.com/chengdu-jackwu/p/10167572.html
Copyright © 2011-2022 走看看