多维立方体

概述:

​ 实际生产中,各种指标的报表统计,往往都会设计到多维分析,比如: 统计日活数量,日会话数量,日会话次数,日回头访问数,日新增,日用户平均访问时长,访问深度等,都可以从以下纬度来分析:

  • 时间段
  • 省市区等地域纬度
  • 设备类型
  • 操作系统
  • App版本
  • App下载安装渠道

而数据分析师,可能会提出各种各样的"纬度组合"下的指标统计需求

  • 省: 日活总数
  • 省、市:日活总数
  • 手机型号,日活总数
  • 省,手机型号,日活总数

如果上述纬度分析需求,都逐个开发计算sql(逐个去group by 聚合) 工作繁琐!

那么,如何解决这个问题呢

关键要点:

  1. 创建一个统一目标维度分析的聚合结果集,这个表应该包含所有的纬度字段
  2. 利用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;

这种写法,要完成上面的数据立方体的完整计算,需要26次方个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的多维立方体相关推荐

  1. linux学习项目,[ Linux运维学习 ] 路径及实战项目合集

    我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. ...

  2. 一文带你了解Hive【详细介绍】Hive与传统数据库有什么区别?

    大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 前期回顾 ...

  3. [答学员问】对于低学历的我,想找一个培训机构学习Linux网络运维,哪个培训机构教学稍微好一点呢?

    对于低学历的我,想找一个培训机构学习Linux网络运维,哪个培训机构教学稍微好一点呢? 本文首发于知乎,稍作修改! 虽然我也做培训,但是我不宣传任何机构. [1] 首先第一个问题: 低学历低到什么程度 ...

  4. 51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

    51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为 ...

  5. 如何用excle制作黑人拉馆_家居DIY带你学习如何用塑料勺制作壁挂!

    「家居DIY」带你学习如何用塑料勺制作壁挂! DIY生活馆图片展示内容介绍 传承手工艺术,放飞指尖梦想,每一节教学我们都会认真对待!只为传递手工技艺,动手实践能够让生活更美好,它让这一平淡的生活眼前一 ...

  6. Emgu-WPF学习使用-识别二维码的位置

    原文:Emgu-WPF学习使用-识别二维码的位置 参考链接:http://blog.csdn.net/gaobobo138968/article/details/47663607 我完全参照该链接实现 ...

  7. 一脸懵逼学习Hive的元数据库Mysql方式安装配置

    1:要想学习Hive必须将Hadoop启动起来,因为Hive本身没有自己的数据管理功能,全是依赖外部系统,包括分析也是依赖MapReduce: 2:七个节点跑HA集群模式的: 第一步:必须先将Zook ...

  8. gateway 内存溢出问题_带你学习jvm java虚拟机 arthas/性能调优/故障排除/gc回收/内存溢出等...

    学完本课程,您将掌握: 内存溢出问题实战 CPU飙升问题实战 阿里巴巴Arthas在线诊断 Class字节详细拆解 手写类加载器.四种类加载器.双亲委托模型 对象创建.存储.访问.加载解析 性能调优. ...

  9. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

最新文章

  1. C语言编程题显示日历,C语言日历问题
  2. java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...
  3. 父类、派生类、方法重写、实例化后的执行顺序
  4. 机器人编程软件semia_机器人10大流行编程语言对比 你掌握了哪种?
  5. 接口测试基础知识学习
  6. mysql linux 手动安装mysql服务_Linux手动安装Mysql
  7. 安装 LaserJet 1020 时这个设备的驱动程序丢失了一个必需的项,这可能是由于 inf 是为 Windows 95 或更新版本而写的。联系您的硬件供应商。
  8. Intel CPU发展史
  9. 数字战疫|央视聚焦闵行,有信云助力上海数千家企业复工复产
  10. 2021年3月最新-李沐-动手学深度学习第二版-中、英文版
  11. 同行评审就是个笑话!Nature爆料:计算机生成的垃圾文章竟还能被接受,64%来自中国...
  12. 相机标定中的相机焦距
  13. 大星星学物联网概览篇-硬件
  14. 怎样的年轻化法则,让这个品牌四年净利润复合增速达30%
  15. 309 Best Time to Buy and Sell Stock with Cooldown
  16. MySQL 事务隔离级别,读现象,MVCC
  17. Vue使用Echarts实现数据可视化
  18. 关于微信公众号二次开发(文本消息回复功能)
  19. 超前进位加法器(Verilog数字IC)
  20. 1号店电商峰值与流式计算

热门文章

  1. 如何为公司创造价值?
  2. Python实现绘制函数图像——以Sigmoid函数为例
  3. Android 使用ADB命令向上滑动解锁
  4. 阿里云服务器建站、心选建站、定制建站有什么区别,如何选择
  5. “融晶保肾调代谢”公益健康大讲堂(第二期)在贵阳强直医院开展
  6. python win32com Dispatch, DispatchEx 无法打开(启动)excel pywintypes.com_error: (-2146959355, ‘服务器运行失败‘
  7. Blender(二)bpy模块
  8. Windos系统使用webdav协议将阿里云盘挂载在本地,并实现Notability等支持webdav协议软件的自动备份
  9. 决策中心:构建企业长期战略竞争力
  10. 统计信号处理基础 习题解答5-8