zoukankan      html  css  js  c++  java
  • Hive 窗口分析函数

    1.窗口函数

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

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

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

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

    3.FIRST_VALUE(col,false) 用于统计窗口内截止到当前行,第一个出现的值

    第一个参数为列名,第二个参数是否跳过null值(可选,默认为false)

    4.LAST_VALUE(col,false用于统计窗口内截止到当前行,最后一个出现的值

    第一个参数为列名,第二个参数是否跳过null值(可选,默认为false)

    注:实践中多个字段最终取值可以应用到LAST_VALUE,例如

    SELECT vid
    ,LAST_VALUE(a,true) OVER(partition by vid order by `time` ) a
    ,LAST_VALUE(b,true) OVER(partition by vid order by `time` ) b
    ,LAST_VALUE(c,true) OVER(partition by vid order by `time` ) c
    ,LAST_VALUE(d,true) OVER(partition by vid order by `time` ) d

    ...

    5.over子句中的partition by和order by

    over(partition by col1[,col2...] )

    over(order by by col1[,col2...] )

    over(partition by col1[,col2...]  order by by col1[,col2...] )

    6.over子句中的window子句(clause)

    OVER with a window specification. Windows can be defined separately in a WINDOW clause. Window specifications support the following formats:

    (ROWS | RANGE) BETWEEN ... PRECEDING AND ... FOLLOWING
    (ROWS | RANGE) BETWEEN ... PRECEDING AND ... PRECEDING
    (ROWS | RANGE) BETWEEN ... FOLLOWING AND ... FOLLOWING

    When ORDER BY is specified with missing WINDOW clause, the WINDOW specification defaults to RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

    When both ORDER BY and WINDOW clauses are missing, the WINDOW specification defaults to ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

    range是逻辑窗口,是指定当前行对应值的范围取值

    rows是物理窗口,即根据order by 子句排序后,取的前N行及后N行的数据计算(与当前行的值无关,只与排序后的行号相关)

    (UNBOUNDED | [num]) PRECEDING:从分区第一行头开始,则为 unbounded。 N为:相对当前行向前的偏移量
    (UNBOUNDED | [num]) FOLLOWING:到该分区结束,则为 unbounded。N为:相对当前行向后的偏移量
    CURRENT ROW:当前行,偏移量为0

    2.分析函数

    1.标准聚合函数

    • COUNT
    • SUM
    • MIN
    • MAX
    • AVG

    2.RANK 

    排名不连续

    3.DENSE_RANK

    排名连续,但是有重复,保证同一个值对应同一个排名。

    4.ROW_NUMBER

    排名连续,无重复,不保证同一个值对应同一个排名。

    5.CUME_DIST(累积分布)

     小于等于当前值的行数 与 分组内总行数的占比

    6.PERCENT_RANK

    排名百分比,RANK-1/总行数-1

    7.NTILE

    离散化分区

    函数特点数据结果(升序,桶数=2)

    RANK

    排名不连续 2,2,5 1,1,3

    DENSE_RANK

    排名连续,但是有重复 2,2,5 1,1,2
    ROW_NUMBER

    排名连续,无重复

    2,2,5 1,2,3

    CUME_DIST

    占比连续,无重复;小于等于当前值的行数 与 分组内总行数的占比 2,2,5 0.33,0.66,1.0

    PERCENT_RANK

    百分比有重复,RANK-1/总行数-1 2,2,5 .0,.0,1.0

    NTILE(n)

    等量(频)离散化,n是分桶数 2,2,2,3 1,1,2,2

    3.应用场景

    累积,均值(归一化),分组取topk,累和占比,离散化

    4.附录

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

  • 相关阅读:
    利用CSS3中的clac()实现按照屏幕分辨率自适应宽度
    没有被广泛采用的box-sizing属性
    HTML5学习笔记(四):关于表格
    HTML5学习笔记(三):标识文本的语义元素
    浏览器内核及相关
    oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。
    存一个工作中常用的类
    将字符串序列化Object格式
    让你的博客不再单调 --博客园设置随机背景图片教程
    新的模板新的开始
  • 原文地址:https://www.cnblogs.com/arachis/p/Hive_Window_Analysis.html
Copyright © 2011-2022 走看看