Hive窗口函数03-CUME_DIST、PERCENT_RANK

Hive窗口函数CUME_DIST、PERCENT_RANK入门

1. 数据说明

现有 hive 表 cookie3, 内容如下:

hive> select * from cookie3;

d1  user1   1000
d1  user2   2000
d1  user3   3000
d2  user4   4000
d2  user5   5000
  • 其中字段意义:
    dept(string), userid(string), sal(int)
  • 分别代表:
    部门名称, 员工ID, 薪水

2. cume_dist()操作

cume_dist:求小于(或大于)等于当前值的行数/分组内总行数

(1) 统计小于等于当前薪水的人数的比例

select dept, userid, sal,
cume_dist() over(order by sal) as cume1
from cookie3;

结果:
d1  user1   1000    0.2
d1  user2   2000    0.4
d1  user3   3000    0.6
d2  user4   4000    0.8
d2  user5   5000    1.0

(2) 按部门分组统计小于等于当前薪水的人数的比例

select dept, userid, sal,
cume_dist() over(partition by dept order by sal) as cume2
from cookie3;

结果:
d1  user1   1000    0.3333333333333333
d1  user2   2000    0.6666666666666666
d1  user3   3000    1.0
d2  user4   4000    0.5
d2  user5   5000    1.0

(3) 按照sal降序排序后,结果就是统计大于等于当前薪水的人数的比例

select  dept, userid, sal,
cume_dist() over(order by sal desc) as cume3
from cookie3;

结果:
d2  user5   5000    0.2
d2  user4   4000    0.4
d1  user3   3000    0.6
d1  user2   2000    0.8
d1  user1   1000    1.0

select dept, userid, sal,
cume_dist() over(partition by dept order by sal desc)  as cume4
from cookie3;

结果:
d1  user3   3000    0.3333333333333333
d1  user2   2000    0.6666666666666666
d1  user1   1000    1.0
d2  user5   5000    0.5
d2  user4   4000    1.0

3. percent_rank操作

percent_rank:(分组内当前行的rank值-1)/(分组内总行数-1)

select  dept, userid, sal,
percent_rank() over(order by sal) as pr1
from cookie3;

结果分析:
d1  user1   1000    0.0     (1-1)/(5-1)=0.0
d1  user2   2000    0.25    (2-1)/(5-1)=0.25
d1  user3   3000    0.5     (3-1)/(5-1)=0.5
d2  user4   4000    0.75    (4-1)/(5-1)=0.75
d2  user5   5000    1.0     (5-1)/(5-1)=1.0

select  dept, userid, sal,
percent_rank() over(partition by dept order by sal) as pr2
from cookie3;

结果分析:
d1  user1   1000    0.0     (1-1)/(3-1)=0.0
d1  user2   2000    0.5     (2-1)/(3-1)=0.5
d1  user3   3000    1.0     (3-1)/(3-1)=1.0
d2  user4   4000    0.0     (1-1)/(2-1)=0.0
d2  user5   5000    1.0     (2-1)/(2-1)=1.0

注意:CUME_DIST、PERCENT_RANK均不支持WINDOW子句(between…and…)

参考文章:Hive分析窗口函数(三) CUME_DIST,PERCENT_RANK

    原文作者:CoderJed
    原文地址: https://www.jianshu.com/p/a836016219c4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞