目录

  • 一、GROUPING SETS
    • 1、概述
    • 2、实战
  • 二、Cube
    • 1、概述
    • 2、实战
  • 三、Rollup
    • 1、概述
    • 2、实战
  • 四、Grouping_ID函数

一、GROUPING SETS

1、概述

GROUPING SETS作为GROUP BY的子句,可以简单理解为多条group by语句通过union all把查询结果聚合起来;

2、实战

查看表test_03字段

hive (default)> desc test_03;
OK
col_name    data_type   comment
user_id                 bigint
device_id               int
os_id                   int
app_id                  int
--sql1
select device_id,os_id,app_id,count(user_id) from  test_03 group by device_id,os_id,app_id grouping sets((device_id))
--等价于sql1
SELECT device_id,null,null,count(user_id) FROM test_03 group by device_id--sql2
select device_id,os_id,app_id,count(user_id) from  test_03 group by device_id,os_id,app_id grouping sets((device_id,os_id))
--等价于sql2
SELECT device_id,os_id,null,count(user_id) FROM test_03 group by device_id,os_id
--sql3
select device_id,os_id,app_id,count(user_id) from  test_03 group by device_id,os_id,app_id grouping sets((device_id,os_id),(device_id))
--等价于sql3
SELECT device_id,os_id,null,count(user_id) FROM test_03 group by device_id,os_id
UNION ALL
SELECT device_id,null,null,count(user_id) FROM test_03 group by device_id
--sql4
select device_id,os_id,app_id,count(user_id) from  test_03 group by device_id,os_id,app_id grouping sets((device_id),(os_id),(device_id,os_id),())
--等价于sql4
SELECT device_id,null,null,count(user_id) FROM test_03 group by device_id
UNION ALL
SELECT null,os_id,null,count(user_id) FROM test_03 group by os_id
UNION ALL
SELECT device_id,os_id,null,count(user_id) FROM test_03 group by device_id,os_id
UNION ALL
SELECT null,null,null,count(user_id) FROM test_03

二、Cube

1、概述

cube简称数据魔方,可以实现hive多个任意维度的查询,cube(a,b,c)则首先会对(a,b,c)进行group by,然后依次是(a,b),(a,c),(a),(b,c),(b),©,最后在对全表进行group by,它会统计所选列中值的所有组合的聚合;

2、实战

select device_id,os_id,app_id count(user_id)
from test_xinyan_reg
group by device_id,os_id,app_id with cube;
--共有3^0+3^1+3^2+3^3=8种可能,如果维度增大,代码量显著增加
SELECT device_id,null,null ,count(user_id) FROM test_03 group by device_id
UNION ALL
SELECT null,os_id,null,count(user_id) FROM test_xinyan_reg group by os_id
UNION ALL
SELECT device_id,os_id,null,count(user_id) FROM test_xinyan_reg group by device_id,os_id
UNION ALL
SELECT null,app_id,null,count(user_id) FROM test_xinyan_reg group by app_id
UNION ALL
SELECT device_id,null,app_id ,count(user_id) FROM test_xinyan_reg group by device_id,app_id
UNION ALL
SELECT null,os_id,app_id,count(user_id) FROM test_xinyan_reg group by os_id,app_id
UNION ALL
SELECT device_id,os_id,app_id,count(user_id) FROM test_xinyan_reg group by device_id,os_id,app_id
UNION ALL
SELECT null,null,null count(user_id) FROM test_xinyan_reg group by client_version

三、Rollup

1、概述

rollup可以实现从右到做递减多级的统计,显示统计某一层次结构的聚合。

2、实战

--sql1select device_id,os_id,app_id,count(user_id)
from test_xinyan_reg
group by device_id,os_id,app_id with rollup;
--等价于sql1
select device_id,os_id,app_id,count(user_id)
from test_xinyan_reg
group by device_id,os_id,app_id,client_version,from_id
grouping sets ((device_id,os_id,app_id),(device_id,os_id),(device_id),());

四、Grouping_ID函数

当我们没有统计某一列时,它的值显示为null,这可能与列本身就有null值冲突,这就需要一种方法区分是没有统计还是值本来就是null,grouping_id其实就是所统计各列二进制和;
比如表test_04有两个字段id,type;

id type
1 1
1 null
2 1
3 2
3 null
SELECT id, type, GROUPING__ID, count(*) from test_04 GROUP BY id, type  grouping sets((id, type),(id)) order by GROUPING__ID;
--结果如下
id  type    grouping__id    _c3
3   2   0   1
2   1   0   1
1   NULL    0   1
1   1   0   1
3   NULL    0   1
3   NULL    1   2
1   NULL    1   2
2   NULL    1   1

grouping_id计算方法
grouping sets 中的每一种粒度,都对应唯一的 grouping__id 值,其计算公式与 group by 的顺序、当前粒度的字段有关。
序号 grouping set 给倒序排列的字段(sex class)赋值 对应的十进制(grouping__id 的值)

1 id 01 1
2 id,type 00 0
这就是上面 grouping sets 的结果中 grouping__id 值的由来。

大数据之hive:hive新功能之GROUPING SETS,Cube, Rollup相关推荐

  1. postgresql 集合类型_PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP)

    PostgreSQL 分组集合新功能(GROUPING SETS,CUBE,ROLLUP) 实验环境 操作系统:windows 10 家庭中文版 数据库系统: PostgreSQL 9.6.2 说明 ...

  2. 大数据面试之hive重点(二)

    大数据面试之hive重点(二) Hive SQL转化为MR的过程? 可回答:1)Hive SQL的解析过程:2)Hive SQL的底层实现 问过的一些公司:阿里,头条,小米,滴滴,美团x2,网易,快手 ...

  3. 大数据基础之Hive(四)—— 常用函数和压缩存储

    作者:duktig 博客:https://duktig.cn (文章首发) 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 更多文章参看github知识库:https://github.com/dukt ...

  4. Ubuntu 配置大数据平台hadoop hive数据仓库之完整踩坑

    导读:作为大数据界的萌新,这篇文章的写作过程,经历了各种阻挠,也踩了无数坑,俗话说面向CSDN.度娘编程,然后多看官方文档,在遇到各种神奇的坑的时候,搜着搜着就到了国外,刹那间一大堆英文向你飞来,就知 ...

  5. B06 - 999、大数据组件学习③ - Hive

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  B99.要学就学大数据 - B系列总纲   ...

  6. hive使用适用场景_大数据入门:Hive应用场景

    在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理.今天我们的大数据入门分 ...

  7. 大数据面试之Hive常见题目

    大数据面试之Hive常见题目 1. Hive的架构 1.重点四个器:解释器(SQL Parser).Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor) ...

  8. Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频

    Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cris 文章目录 Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cr ...

  9. 大数据知识面试题-Hive (2022版)

    序列号 内容 链接 1 大数据知识面试题-通用(2022版) https://blog.csdn.net/qq_43061290/article/details/124819089 2 大数据知识面试 ...

最新文章

  1. R语言ggplot2可视化:ggplot2可视化散点图并使用geom_mark_ellipse函数在数据簇或数据分组的数据点周围添加椭圆(ellipse)进行注释(对椭圆包围的区域进行着色为阴影区域)
  2. Oracle imp导入数据
  3. linux c execve, execlp, execvp, execle 执行文件 执行二进制 介绍
  4. centos下排查vsftpd出现put零字节问题的记录
  5. Tcp_wrapper
  6. Linux下java/bin目录下的命令集合
  7. pythonweb自动化测试实例_[转载]python webdriver自动化测试实例
  8. java 开发书籍 目录_《零基础 Java 开发 》全书目录
  9. Python06 向前Euler法、向后Euler法、梯形方法、改进的Euler方法以及四阶Runge_Kutta方法(附代码)
  10. Dual-polarity supply provides ±12V from one IC
  11. 1.零基础Java基础教程9天入门
  12. GitLab版本管理(转)
  13. 音频放大电路设计与制作
  14. 驰骋计算产业数十年的Wintel联盟开始分崩离析
  15. sqlite内存模式
  16. uniapp 电商小程序 订单30分钟倒计时
  17. 深信服三面/hr面 总结
  18. Acquisition-CreateAcqFifo
  19. OSError: [WinError 145] 目录不是空的。
  20. 互联网金融和信贷风控的概述

热门文章

  1. ESP32开发:从入门到精通的全面指南
  2. Android 话筒、听筒、扬声器
  3. html--京东秒杀模块图的静态模块的制作
  4. MIT 6.828 (三) Lab 3: User Environments
  5. 死神来了 | 高铁出轨:“德国的泰坦尼克号事件”
  6. CRM客户管理系统又翻天了
  7. 特斯拉供应链全景图详细分析!
  8. 怎么设置超链接网址css,css应该怎么设置超链接样式
  9. 基于python的网上书店系统_python实现基于CGI的Web应用
  10. linux3.x 驱动程序,Arm Linux3.x的设备树 - 龙芯开源社区