首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hive窗口函数03-CUME_DIST、PERCENT_RANK

Hive窗口函数03-CUME_DIST、PERCENT_RANK

作者头像
CoderJed
发布2018-09-13 10:58:17
发布2018-09-13 10:58:17
1.9K0
举报
文章被收录于专栏:Jed的技术阶梯Jed的技术阶梯

Hive窗口函数CUME_DIST、PERCENT_RANK入门

1. 数据说明

现有 hive 表 cookie3, 内容如下:

代码语言:javascript
复制
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) 统计小于等于当前薪水的人数的比例

代码语言:javascript
复制
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) 按部门分组统计小于等于当前薪水的人数的比例

代码语言:javascript
复制
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降序排序后,结果就是统计大于等于当前薪水的人数的比例

代码语言:javascript
复制
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)

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数据说明
  • 2. cume_dist()操作
    • (1) 统计小于等于当前薪水的人数的比例
    • (2) 按部门分组统计小于等于当前薪水的人数的比例
    • (3) 按照sal降序排序后,结果就是统计大于等于当前薪水的人数的比例
  • 3. percent_rank操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档