zoukankan      html  css  js  c++  java
  • hive的窗口函数cume_dist、fercent_rank

    一、cume_dist

    这两个序列分析函数不是很常用,这里也介绍一下。
    注意: 序列函数不支持WINDOW子句。

    数据准备:

    d1,user1,1000
    d1,user2,2000
    d1,user3,3000
    d2,user4,4000
    d2,user5,5000

    创建表并加载数据

    create external table user(
    dept string,
    userid string,
    sal int
    )
    row format delimited 
    fields terminated by ','
    stored as textfile 
    location '/testuser';

    验证数据:

    hive (default)> select * from user;
    OK
    user.dept    user.userid    user.sal
    d1    user1    1000
    d1    user2    2000
    d1    user3    3000
    d2    user4    4000
    d2    user5    5000
    Time taken: 0.341 seconds, Fetched: 5 row(s)

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

    select dept,userid,sal,
    cume_dist() over(order by sal) as rn1,
    cume_dist() over(partition by dept order by sal) as rn2
    from user;
    
    OK
    dept    userid    sal    rn1    rn2
    d1    user1    1000    0.2    0.3333333333333333
    d1    user2    2000    0.4    0.6666666666666666
    d1    user3    3000    0.6    1.0
    d2    user4    4000    0.8    0.5
    d2    user5    5000    1.0    1.0
    Time taken: 3.931 seconds, Fetched: 5 row(s)

    rn1: 没有partition,所有数据均为1组,总行数为5,
    第一行:小于等于1000的行数为1,因此,1/5=0.2
    第三行:小于等于3000的行数为3,因此,3/5=0.6
    rn2: 按照部门分组,dpet=d1的行数为3,
    第二行:小于等于2000的行数为2,因此,2/3=0.6666666666666666

    二、percent_rank

    –PERCENT_RANK 分组内当前行的RANK值-1/分组内总行数-1
    应用场景不了解,可能在一些特殊算法的实现中可以用到吧。–PERCENT_RANK 分组内当前行的RANK值-1/分组内总行数-1
    应用场景不了解,可能在一些特殊算法的实现中可以用到吧。

    SELECT 
    dept,
    userid,
    sal,
    PERCENT_RANK() OVER(ORDER BY sal) AS rn1,   --分组内
    RANK() OVER(ORDER BY sal) AS rn11,          --分组内RANK值
    SUM(1) OVER(PARTITION BY NULL) AS rn12,     --分组内总行数
    PERCENT_RANK() OVER(PARTITION BY dept ORDER BY sal) AS rn2 
    FROM user;
     
    dept    userid   sal    rn1    rn11     rn12    rn2
    d1      user1   1000    0.0     1       5       0.0
    d1      user2   2000    0.25    2       5       0.5
    d1      user3   3000    0.5     3       5       1.0
    d2      user4   4000    0.75    4       5       0.0
    d2      user5   5000    1.0     5       5       1.0
     

    rn1: rn1 = (rn11-1) / (rn12-1)
    第一行,(1-1)/(5-1)=0/4=0
    第二行,(2-1)/(5-1)=1/4=0.25
    第四行,(4-1)/(5-1)=3/4=0.75
    rn2: 按照dept分组,
    dept=d1的总行数为3
    第一行,(1-1)/(3-1)=0
    第三行,(3-1)/(3-1)=1

  • 相关阅读:
    [.NET]如何擷取部分網頁內容轉成圖片
    一些很有用的JS特效
    Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
    .NET获取客户端信息
    WAYOS 破解版三天重启最新解决办法,免重启程序
    MySQL 随机生成各种类型的随机函数
    Active Form显示标题栏及页面跳转
    wayos计费系统easyradius使用小记
    ROS中的智能QOS实现,效果应该是会比WAYOS好,而且更灵活
    以太网中的ARP和PPPOE
  • 原文地址:https://www.cnblogs.com/dongdone/p/5737760.html
Copyright © 2011-2022 走看看