带你学习Hive的多维立方体
多维立方体
概述:
实际生产中,各种指标的报表统计,往往都会设计到多维分析,比如: 统计日活数量,日会话数量,日会话次数,日回头访问数,日新增,日用户平均访问时长,访问深度等,都可以从以下纬度来分析:
- 时间段
- 省市区等地域纬度
- 设备类型
- 操作系统
App
版本App
下载安装渠道
而数据分析师,可能会提出各种各样的"纬度组合"下的指标统计需求
- 省: 日活总数
- 省、市:日活总数
- 手机型号,日活总数
- 省,手机型号,日活总数
如果上述纬度分析需求,都逐个开发计算sql
(逐个去group by 聚合) 工作繁琐!
那么,如何解决这个问题呢
关键要点:
- 创建一个统一目标维度分析的聚合结果集,这个表应该包含所有的纬度字段
- 利用hive高阶聚合函数,在一个
sql
中,即可计算出所有可能的纬度组合
多维立方体样例
省 | 市 | 区 | 手机型号 | 操作系统 | App版本 | 下载渠道 | 小时段 | 日活总数 |
---|---|---|---|---|---|---|---|---|
江西 | \n | \n | \n | \n | \n | \n | \n | 1000 |
江苏 | \n | \n | \n | \n | \n | \n | \n | 1500 |
河南 | \n | \n | \n | \n | \n | \n | \n | 1800 |
…… | ||||||||
江西 | 九江 | \n | \n | \n | \n | \n | \n | 800 |
江西 | 赣州 | \n | \n | \n | \n | \n | \n | 600 |
江西 | 南昌 | \n | \n | \n | \n | \n | \n | 450 |
江西 | …… | \n | \n | \n | \n | \n | \n | 550 |
操作样例
假如我要从获取各个省份日活数
selectprovince,dau_cnt
from cube
-- coalesce 只要有一个不为 null 就不会返回null
where privince is not null and coalesce(city,district,devicetype,osname,...) is not null
纬度基数:
假设上述表中函数很大
假设按(省,市,区,手机型号,app
版本,下载渠道,小时段) 维度组合计算日活数,结果行数有:
省维度基数 * 市维度基数 * 区维度技术 * …
基数: 某个维度字段的去重值个数 select count(distinct 字段) from table group 字段
方法一
基础写法:
Insert into table cube
SELECT province,city,district,null as device_type,null as os_name,null as app_versioncount(distinct guid) as dau_cnt
from t src
group by province,city,districe;
这种写法,要完成上面的数据立方体的完整计算,需要2
的6
次方个sql
方法二
with cube函数
Insert into table cube
select province,city,district,device_type,os_name,app_version,release_channel,hour_segement,count(distinct guid) as dau_cnt
from t src
group by province,city,district,device_type,os_name,app_version,release_channel,hour_segement
WITH CUBE;
加上了最后一行的with dube
函数sql
量一条解决,做到"别人加班我下班", 功能参考上个任务
方法三
grouping set函数
由用户自己决定需要哪些维度组合
INSERT INTO TABLE cube
SELECTprovince,city,district,device_type,os_name,app_version,release_channel,hour_segement,count(distinct guid) as dau_cnt
FROM t_src
GROUP BY province,city,district,device_type,os_name,app_version,release_channel,house_segment
GROUPING SETS((),(province),(province,city),(province,city,district),(device_type));
带你学习Hive的多维立方体相关推荐
- linux学习项目,[ Linux运维学习 ] 路径及实战项目合集
我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. ...
- 一文带你了解Hive【详细介绍】Hive与传统数据库有什么区别?
大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 前期回顾 ...
- [答学员问】对于低学历的我,想找一个培训机构学习Linux网络运维,哪个培训机构教学稍微好一点呢?
对于低学历的我,想找一个培训机构学习Linux网络运维,哪个培训机构教学稍微好一点呢? 本文首发于知乎,稍作修改! 虽然我也做培训,但是我不宣传任何机构. [1] 首先第一个问题: 低学历低到什么程度 ...
- 51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)
51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下 127.0.0.1 hostname,因为 ...
- 如何用excle制作黑人拉馆_家居DIY带你学习如何用塑料勺制作壁挂!
「家居DIY」带你学习如何用塑料勺制作壁挂! DIY生活馆图片展示内容介绍 传承手工艺术,放飞指尖梦想,每一节教学我们都会认真对待!只为传递手工技艺,动手实践能够让生活更美好,它让这一平淡的生活眼前一 ...
- Emgu-WPF学习使用-识别二维码的位置
原文:Emgu-WPF学习使用-识别二维码的位置 参考链接:http://blog.csdn.net/gaobobo138968/article/details/47663607 我完全参照该链接实现 ...
- 一脸懵逼学习Hive的元数据库Mysql方式安装配置
1:要想学习Hive必须将Hadoop启动起来,因为Hive本身没有自己的数据管理功能,全是依赖外部系统,包括分析也是依赖MapReduce: 2:七个节点跑HA集群模式的: 第一步:必须先将Zook ...
- gateway 内存溢出问题_带你学习jvm java虚拟机 arthas/性能调优/故障排除/gc回收/内存溢出等...
学完本课程,您将掌握: 内存溢出问题实战 CPU飙升问题实战 阿里巴巴Arthas在线诊断 Class字节详细拆解 手写类加载器.四种类加载器.双亲委托模型 对象创建.存储.访问.加载解析 性能调优. ...
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
最新文章
- C语言编程题显示日历,C语言日历问题
- java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...
- 父类、派生类、方法重写、实例化后的执行顺序
- 机器人编程软件semia_机器人10大流行编程语言对比 你掌握了哪种?
- 接口测试基础知识学习
- mysql linux 手动安装mysql服务_Linux手动安装Mysql
- 安装 LaserJet 1020 时这个设备的驱动程序丢失了一个必需的项,这可能是由于 inf 是为 Windows 95 或更新版本而写的。联系您的硬件供应商。
- Intel CPU发展史
- 数字战疫|央视聚焦闵行,有信云助力上海数千家企业复工复产
- 2021年3月最新-李沐-动手学深度学习第二版-中、英文版
- 同行评审就是个笑话!Nature爆料:计算机生成的垃圾文章竟还能被接受,64%来自中国...
- 相机标定中的相机焦距
- 大星星学物联网概览篇-硬件
- 怎样的年轻化法则,让这个品牌四年净利润复合增速达30%
- 309 Best Time to Buy and Sell Stock with Cooldown
- MySQL 事务隔离级别,读现象,MVCC
- Vue使用Echarts实现数据可视化
- 关于微信公众号二次开发(文本消息回复功能)
- 超前进位加法器(Verilog数字IC)
- 1号店电商峰值与流式计算
热门文章
- 如何为公司创造价值?
- Python实现绘制函数图像——以Sigmoid函数为例
- Android 使用ADB命令向上滑动解锁
- 阿里云服务器建站、心选建站、定制建站有什么区别,如何选择
- “融晶保肾调代谢”公益健康大讲堂(第二期)在贵阳强直医院开展
- python win32com Dispatch, DispatchEx 无法打开(启动)excel pywintypes.com_error: (-2146959355, ‘服务器运行失败‘
- Blender(二)bpy模块
- Windos系统使用webdav协议将阿里云盘挂载在本地,并实现Notability等支持webdav协议软件的自动备份
- 决策中心:构建企业长期战略竞争力
- 统计信号处理基础 习题解答5-8