Hive分析窗口函数(三) CUME_DIST,PERCENT_RANK

这两个序列分析函数不是很常用,这里也介绍一下。

注意: 序列函数不支持WINDOW子句。(什么是WINDOW子句,点此查看前面的文章 )

Hive版本为 apache-hive-0.13.1

数据准备:

 
  
  1. d1,user1,1000
  2. d1,user2,2000
  3. d1,user3,3000
  4. d2,user4,4000
  5. d2,user5,5000
  6.  
  7. CREATE EXTERNAL TABLE lxw1234 (
  8. dept STRING,
  9. userid string,
  10. sal INT
  11. ) ROW FORMAT DELIMITED
  12. FIELDS TERMINATED BY ','
  13. stored as textfile location '/tmp/lxw11/';
  14.  
  15.  
  16. hive> select * from lxw1234;
  17. OK
  18. d1 user1 1000
  19. d1 user2 2000
  20. d1 user3 3000
  21. d2 user4 4000
  22. d2 user5 5000

CUME_DIST

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

 
  
  1. SELECT
  2. dept,
  3. userid,
  4. sal,
  5. CUME_DIST() OVER(ORDER BY sal) AS rn1,
  6. CUME_DIST() OVER(PARTITION BY dept ORDER BY sal) AS rn2
  7. FROM lxw1234;
  8.  
  9. dept userid sal rn1 rn2
  10. -------------------------------------------
  11. d1 user1 1000 0.2 0.3333333333333333
  12. d1 user2 2000 0.4 0.6666666666666666
  13. d1 user3 3000 0.6 1.0
  14. d2 user4 4000 0.8 0.5
  15. d2 user5 5000 1.0 1.0
  16.  
  17. rn1: 没有partition,所有数据均为1组,总行数为5
  18. 第一行:小于等于1000的行数为1,因此,1/5=0.2
  19. 第三行:小于等于3000的行数为3,因此,3/5=0.6
  20. rn2: 按照部门分组,dpet=d1的行数为3,
  21. 第二行:小于等于2000的行数为2,因此,2/3=0.6666666666666666

PERCENT_RANK

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

 
  
  1. SELECT
  2. dept,
  3. userid,
  4. sal,
  5. PERCENT_RANK() OVER(ORDER BY sal) AS rn1, --分组内
  6. RANK() OVER(ORDER BY sal) AS rn11, --分组内RANK
  7. SUM(1) OVER(PARTITION BY NULL) AS rn12, --分组内总行数
  8. PERCENT_RANK() OVER(PARTITION BY dept ORDER BY sal) AS rn2
  9. FROM lxw1234;
  10.  
  11. dept userid sal rn1 rn11 rn12 rn2
  12. ---------------------------------------------------
  13. d1 user1 1000 0.0 1 5 0.0
  14. d1 user2 2000 0.25 2 5 0.5
  15. d1 user3 3000 0.5 3 5 1.0
  16. d2 user4 4000 0.75 4 5 0.0
  17. d2 user5 5000 1.0 5 5 1.0
  18.  
  19. rn1: rn1 = (rn11-1) / (rn12-1)
  20. 第一行,(1-1)/(5-1)=0/4=0
  21. 第二行,(2-1)/(5-1)=1/4=0.25
  22. 第四行,(4-1)/(5-1)=3/4=0.75
  23. rn2: 按照dept分组,
  24. dept=d1的总行数为3
  25. 第一行,(1-1)/(3-1)=0
  26. 第三行,(3-1)/(3-1)=1

点此查看所有Hive窗口分析函数的文章

转载请注明:lxw的大数据田地 » Hive分析窗口函数(三) CUME_DIST,PERCENT_RANK

你可能感兴趣的:(hive)