cube

hive中也有cube函数,可以实现多个任意维度的查询
cube(a,b,c)则首先会对(a,b,c)进行group by,
然后依次是(a,b),(a,c),(a),(b,c),(b),(c),最后在对全表进行group by,他会统计所选列中值的所有组合的聚合
用cube函数就可以完成所有维度的聚合工作.
select os,          --维度1manufacturer,--维度2carrier,     --维度3network_type,--维度4area_code,   --维度5count(user_id) user_count,sum(launch_count)       launch_count
from dws.launch
where bdp_day = '20201223'
group by os, manufacturer, carrier, network_type, area_code
with cube --使用cube函数
limit 20;

结果预览

+----+------------+-------+------------+---------+----------+------------+
|os  |manufacturer|carrier|network_type|area_code|user_count|launch_count|
+----+------------+-------+------------+---------+----------+------------+
|NULL|NULL        |NULL   |NULL        |NULL     |170426    |724588      |
|NULL|NULL        |NULL   |NULL        |03060    |44        |184         |
|NULL|NULL        |NULL   |NULL        |10002    |560       |2132        |
|NULL|NULL        |NULL   |NULL        |10003    |672       |2752        |
|NULL|NULL        |NULL   |NULL        |10004    |634       |2744        |
|NULL|NULL        |NULL   |NULL        |10005    |906       |3756        |
|NULL|NULL        |NULL   |NULL        |10007    |1272      |5116        |
|NULL|NULL        |NULL   |NULL        |10008    |722       |3248        |
|NULL|NULL        |NULL   |NULL        |10009    |1086      |4744        |
|NULL|NULL        |NULL   |NULL        |10010    |714       |2888        |
|NULL|NULL        |NULL   |NULL        |10013    |1524      |6536        |
|NULL|NULL        |NULL   |NULL        |10014    |744       |3024        |
|NULL|NULL        |NULL   |NULL        |10015    |684       |3108        |
|NULL|NULL        |NULL   |NULL        |10016    |318       |1472        |
|NULL|NULL        |NULL   |NULL        |10017    |406       |1776        |
|NULL|NULL        |NULL   |NULL        |10018    |204       |828         |
|NULL|NULL        |NULL   |NULL        |10019    |410       |1684        |
|NULL|NULL        |NULL   |NULL        |10020    |224       |1108        |
|NULL|NULL        |NULL   |NULL        |10021    |360       |1576        |
|NULL|NULL        |NULL   |NULL        |11010    |312       |1268        |
+----+------------+-------+------------+---------+----------+------------+

grouping sets

当不需要cube将所有维度都列出来的时候,当只需要部分维度的时候
可以使用grouping sets来进行决定聚合那些维度
当使用grouping sets()进行指定维度聚合的时候,仅仅聚合你给出的维度组合,并不会自动帮你组合维度.
例如 grouping sets(col1,(col2,col3)) 只聚合col1维度,(col2,col3)维度.
并不会自动聚合(col1,col2,col3)维度
select os,          --维度1manufacturer,--维度2carrier,     --维度3network_type,--维度4area_code,   --维度5count(user_id) user_count,sum(launch_count)       launch_count
from dws.launch
where bdp_day = '20201223'
group by os, manufacturer, carrier, network_type, area_code
grouping sets ((manufacturer,carrier))

运行结果

+----+------------+-------+------------+---------+----------+------------+
|os  |manufacturer|carrier|network_type|area_code|user_count|launch_count|
+----+------------+-------+------------+---------+----------+------------+
|NULL|02          |2      |NULL        |NULL     |9408      |39888       |
|NULL|02          |3      |NULL        |NULL     |9482      |40440       |
|NULL|03          |2      |NULL        |NULL     |9632      |40996       |
|NULL|03          |3      |NULL        |NULL     |9392      |40376       |
|NULL|04          |2      |NULL        |NULL     |8906      |37312       |
|NULL|04          |3      |NULL        |NULL     |9794      |41896       |
|NULL|05          |2      |NULL        |NULL     |9552      |40504       |
|NULL|05          |3      |NULL        |NULL     |9690      |41960       |
|NULL|06          |2      |NULL        |NULL     |9556      |40352       |
|NULL|06          |3      |NULL        |NULL     |9378      |40200       |
+----+------------+-------+------------+---------+----------+------------+

roll up

rollup函数cube的子集,以最左侧维度为主,按照顺序依次进行聚合.
例如聚合的维度为 col1,col2,col3 使用rollup聚合的字段分别为 col1,(col1,col2),(col1,col3),(col1,col2,col3)
举个例子

select os,          --维度1manufacturer,--维度2carrier,     --维度3network_type,--维度4area_code,   --维度5count(distinct user_id) user_count,sum(launch_count)       launch_count
from dws.launch ---用户启动表
where bdp_day = '20201223'
group by os, manufacturer, carrier, network_type, area_code
with rollup  --使用roll up函数
limit 10;

结果如下
就是说等价于统计出来了以下结果

group by 1 2 3 4 5
group by 2 3 4 5
group by 3 4 5
group by 4 5
group by 5
+----+------------+-------+------------+---------+----------+------------+
|os  |manufacturer|carrier|network_type|area_code|user_count|launch_count|
+----+------------+-------+------------+---------+----------+------------+
|NULL|NULL        |NULL   |NULL        |NULL     |56885     |724588      |
|2   |NULL        |NULL   |NULL        |NULL     |56885     |724588      |
|2   |02          |NULL   |NULL        |NULL     |6307      |80328       |
|2   |02          |2      |NULL        |NULL     |3126      |39888       |
|2   |02          |2      |0           |NULL     |1042      |13412       |
|2   |02          |2      |0           |10002    |5         |48          |
|2   |02          |2      |0           |10003    |6         |84          |
|2   |02          |2      |0           |10004    |5         |44          |
|2   |02          |2      |0           |10005    |6         |80          |
|2   |02          |2      |0           |10007    |13        |180         |
+----+------------+-------+------------+---------+----------+------------+

总结

  • 所有组合维度的聚合可以用cube
  • 指定维度的聚合用grouping sets

Hive cube,roll up入门案例相关推荐

  1. Kyin学习笔记(一)-----Kylin安装、入门案例和原理介绍

    目录 一.Kylin简介 1.Kylin的诞生背景 2.Kylin的应用场景 3.为什么要使用Kylin 4.Kylin的总体架构 二.Kylin安装 1.依赖环境 2.集群规划 3.安装kylin- ...

  2. 2021年大数据Flink(八):Flink入门案例

    目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...

  3. 【Spark分布式内存计算框架——Structured Streaming】3. Structured Streaming —— 入门案例:WordCount

    1.3 入门案例:WordCount 入门案例与SparkStreaming的入门案例基本一致:实时从TCP Socket读取数据(采用nc)实时进行词频统计WordCount,并将结果输出到控制台C ...

  4. Unity3D官方推荐教程roll a bal案例

    Unity3D官方推荐教程roll a bal案例 首先声明本人菜鸟一枚,此博客只是记录一下学习过程,虽说是跟着教程一步一步做的,但是在做的过程当中也遇到了很多问题(菜是原罪),这些问题精良写在了文中 ...

  5. Flink教程(04)- Flink入门案例

    文章目录 01 引言 02 开发前准备 2.1 API 2.2 编程模型 03 入门案例 3.1 项目搭建 3.2 代码实现 3.2.1 基于DataSet 3.2.2 基于DataStream 3. ...

  6. 数据立方体-Hive Cube

    目录 1. 数据立方体 2. OLAP的基本操作 3. Hive Cube 3.1 with cube 3.2 with rollup 3.3 Grouping sets 3.4 grouping_i ...

  7. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  8. Vue安装配置以及入门案例

    Vue Vue简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不 ...

  9. AOP配置开发入门案例

    该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...

最新文章

  1. Java | Python 流程控制对比
  2. input标签的值只能两位小数_解决input只能输入金额类型的方案(金额输入框只能输入2位小数)...
  3. 导入表格只有一行 帆软_万万没想到!把x个表格合合合合成一份,10分钟就搞定...
  4. 【python笔记】 for循环和while循环,break和continue语句
  5. django mysql返回json_Django 1.8.11 查询数据库返回JSON格式数据
  6. 2022超级好看动态视频官网HTML源码
  7. 4. AWS DynamoDB实战之Secondary Indexes
  8. 1000句最常用英语口语
  9. 如何运用MATLAB实现K-MEANS聚类分析
  10. Centos7.6上安装水族馆遇到报错BEGIN failed--compilation aborted at /usr/local/bin/asciiquarium line 42.
  11. esb接口测试_ESB产品架构之愚见
  12. jsonviewer
  13. 操作系统、计算机网络、数据库系统概论等相关面试问题
  14. php卡死代码,服务器被php进程卡死问题排查-php5.2的curl-bug
  15. 自然语言分词词性标注指代
  16. VMware虚拟机超简单的联网方法
  17. Koomail VS. Foxmail
  18. 梦想帝王多开辅助?梦想帝王脚本兵种详解
  19. 考研复试英语自我介绍模版
  20. 等差数列java_java简单的编程(等差数列)

热门文章

  1. 监控的1080P、3MP和5MP是什么意思?区别是什么?
  2. 无广告输入法_完胜搜狗的输入法来了!智能无广告,不用下载就可以使用!
  3. 计算机 术语库 excel,Trados直接用Excel做术语库
  4. python修改json文件_python修改json文件的value实例方法
  5. 阿里云申请免费ssl证书并配置nginx
  6. centos8 yum安装mysql8 流程配置
  7. ubuntu18.04彻底卸载mysql5.7,图文详解
  8. php安装包进行安装吗,php的一键安装包有哪些php环境搭建
  9. java代码post接口请求 用 hutool工具类
  10. 微服务把多个模块服务 聚合成一个服务