2021年大数据Hive(七):Hive的开窗函数

全网最详细的Hive文章系列,强烈建议收藏加关注!

后面更新文章都会列出历史文章目录,帮助大家回顾知识重点。

目录

系列历史文章

前言

Hive的开窗函数

一、窗口函数 ROW_NUMBER,RANK,DENSE_RANK

1、数据准备

2、ROW_NUMBER

3、RANK 和 DENSE_RANK

二、Hive分析窗口函数 SUM,AVG,MIN,MAX

1、数据准备

2、SUM(结果和ORDER BY相关,默认为升序)

3、AVG,MIN,MAX


系列历史文章

2021年大数据Hive(十二):Hive综合案例!!!

2021年大数据Hive(十一):Hive调优

2021年大数据Hive(十):Hive的数据存储格式

2021年大数据Hive(九):Hive的数据压缩

2021年大数据Hive(八):Hive自定义函数

2021年大数据Hive(七):Hive的开窗函数

2021年大数据Hive(六):Hive的表生成函数

2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)

2021年大数据Hive(四):Hive查询语法

2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

2021年大数据Hive(二):Hive的三种安装模式和MySQL搭配使用

2021年大数据Hive(一):Hive基本概念

前言

 2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习。

有对大数据感兴趣的可以关注微信公众号:三帮大数据

Hive的开窗函数

一、窗口函数 ROW_NUMBER,RANK,DENSE_RANK

​​​​​​​1、数据准备


   
   
  1. cookie1,2021-06-10,1
  2. cookie1,2021-06-11,5
  3. cookie1,2021-06-12,7
  4. cookie1,2021-06-13,3
  5. cookie1,2021-06-14,2
  6. cookie1,2021-06-15,4
  7. cookie1,2021-06-16,4
  8. cookie2,2021-06-10,2
  9. cookie2,2021-06-11,3
  10. cookie2,2021-06-12,5
  11. cookie2,2021-06-13,6
  12. cookie2,2021-06-14,3
  13. cookie2,2021-06-15,9
  14. cookie2,2021-06-16,7
  15. CREATE  TABLE it_t1 (
  16. cookieid string,
  17. createtime string,    --day
  18. pv INT
  19. ROW  FORMAT  DELIMITED FIELDS TERMINATED BY  ',';
  20.   
  21. -- 加载数据:
  22. load data  local inpath '/export/data/hivedatas/it_t2.txt'  into  table it_t1;

​​​​​​​2、ROW_NUMBER

ROW_NUMBER()  从1开始,按照顺序,生成分组内记录的序列


   
   
  1. SELECT 
  2.   cookieid,
  3.   createtime,
  4.   pv,
  5.   ROW_NUMBER()  OVER( PARTITION  BY cookieid ORDER  BY pv descAS rn
  6.    FROM it_t1;

​​​​​​​3、RANK 和 DENSE_RANK

RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位

DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位


   
   
  1. SELECT 
  2. cookieid,
  3. createtime,
  4. pv,
  5. RANK()  OVER( PARTITION  BY cookieid ORDER  BY pv descAS rn1,
  6. DENSE_RANK()  OVER( PARTITION  BY cookieid ORDER  BY pv descAS rn2,
  7. ROW_NUMBER()  OVER( PARTITION  BY cookieid ORDER  BY pv DESCAS rn3
  8. FROM it_t1
  9. WHERE cookieid =  'cookie1';

​​​​​​​二、Hive分析窗口函数 SUM,AVG,MIN,MAX

​​​​​​​1、数据准备


   
   
  1. --建表语句:
  2. create  table it_t2(
  3. cookieid string,
  4. createtime string,    --day
  5. pv int
  6. row  format  delimited
  7. fields terminated by  ',';
  8. --加载数据:
  9. load data  local inpath '/root/hivedata/ it_t2.txt'  into  table it_t2;
  10. --开启智能本地模式
  11. SET hive.exec.mode.local.auto= true;

​​​​​​​2、SUM(结果和ORDER BY相关,默认为升序)


   
   
  1. select cookieid,createtime,pv,
  2. sum(pv)  over( partition  by cookieid order  by createtime)  as pv1
  3. from it_t2;
  4. select cookieid,createtime,pv,
  5. sum(pv)  over( partition  by cookieid order  by createtime rows  between  unbounded preceding and  current  rowas pv2
  6. from it_t2;
  7. select cookieid,createtime,pv,
  8. sum(pv)  over( partition  by cookieid)  as pv3
  9. from it_t2;   --如果没有order  by排序语句  默认把分组内的所有数据进行sum操作
  10. select cookieid,createtime,pv,
  11. sum(pv)  over( partition  by cookieid order  by createtime rows  between  3  preceding and  current  rowas pv4
  12. from it_t2;
  13. select cookieid,createtime,pv,
  14. sum(pv)  over( partition  by cookieid order  by createtime rows  between  3  preceding and  1  followingas pv5
  15. from it_t2;
  16. select cookieid,createtime,pv,
  17. sum(pv)  over( partition  by cookieid order  by createtime rows  between  current  row  and  unbounded followingas pv6
  18. from it_t2;
  19. --pv1: 分组内从起点到当前行的pv累积,如,11号的pv1=10号的pv+11号的pv, 12号=10号+11号+12号
  20. --pv2: 同pv1
  21. --pv3: 分组内(cookie1)所有的pv累加
  22. --pv4: 分组内当前行+往前3行,如,11号=10号+11号, 12号=10号+11号+12号,
  23.                        13号=10号+11号+12号+13号, 14号=11号+12号+13号+14号
  24. --pv5: 分组内当前行+往前3行+往后1行,如,14号=11号+12号+13号+14号+15号=5+7+3+2+4=21
  25. --pv6: 分组内当前行+往后所有行,如,13号=13号+14号+15号+16号=3+2+4+4=13,
  26.  14号=14号+15号+16号=2+4+4=10
  27. /*
  28. - 如果不指定rows between,默认为从起点到当前行;
  29. - 如果不指定order by,则将分组内所有值累加;
  30. - 关键是理解rows between含义,也叫做window子句:
  31.   - preceding:往前
  32.   - following:往后
  33.   - current row:当前行
  34.   - unbounded:起点
  35.   - unbounded preceding 表示从前面的起点
  36.   - unbounded following:表示到后面的终点
  37.  */ 

​​​​​​​3、AVG,MIN,MAX

AVG,MIN,MAX和SUM用法一样


   
   
  1. select cookieid,createtime,pv,
  2. avg(pv)  over( partition  by cookieid order  by createtime rows  between  unbounded preceding and  current  rowas pv2
  3. from it_t2;
  4. select cookieid,createtime,pv,
  5. max(pv)  over( partition  by cookieid order  by createtime rows  between  unbounded preceding and  current  rowas pv2
  6. from it_t2;
  7. select cookieid,createtime,pv,
  8. min(pv)  over( partition  by cookieid order  by createtime rows  between  unbounded preceding and  current  rowas pv2
  9. from it_t2;

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值