数据蒋堂 | 多维分析预汇总的功能盲区

2019 年 3 月 24 日 数据派THU

作者:蒋步星

来源:数据蒋堂

本文共1900字,建议阅读9分钟
本文归纳了预汇总方案的功能不足。



在进一步讨论如何在有限空间内实现多维分析的预汇总之前,我们有必要再了解一下预汇总方案还有什么功能上的不足,也就是要搞清还有什么查询需求很可能无法通过预汇总数据获取。


一、非常规聚合


预汇总方案是将测度聚合值先计算好并存储起来,那么,显然,在预汇总阶段没有想到的测度聚合值就无法直接从预总汇的数据中查询出来了。比如,如果我们只存储了销售额的合计值,而没有存储最大值,那就无法直接查询出来了。


SQL提供了五个最常见的聚合运算:计数、合计、平均、最大、最小。这几种聚合值一般都会在预汇总阶段被考虑到。但是,还有些太常规的聚合值,比如唯一计数(count distinct)、中位数、方差等,这些聚合值当然都有业务意义,也很可能被查询到,但却很容易被遗漏。这些聚合值也无法从其它聚合值简单计算出来,未被预存储时就只能临时遍历计算了。


理论上有无数中聚合运算,不可能都被想到。而聚合运算种类涉及得太多,又会使我们上次所说的容量问题变得更恶劣。


二、组合聚合


聚合运算还可能组合。比如,原始CUBE的数据粒度是按天存储的(即每天有一条记录),而我们可能关心月平均销售额,这个值的意思是将每天的销售额按月合计后再求平均。它并不是单纯的合计和平均,而是两种聚合运算在不同维度层次上的组合。类似这种运算还有很多,比如月最大销售额、地区人员收入中位数的均值、...。甚至有可能出现涉及三个或更多聚合运算组合的情况。


显然,这些组合的聚合值是有业务意义的,但是常规的预汇总方案只会针对单一的聚合运算,一般不会考虑这种组合情况,也就不会事先预汇总了。即使在预汇总阶段刻意考虑了组合情况,也还会发生容量过大的问题。一个有30个维度的CUBE,按五种基本聚合运算来组合,只考虑两组合的情况,理论上也会有C(30,2)*5*4=8700种情况,如果把这些值都预存储起来,存储空间就会再多几个数量级。


三、条件测度


测度在统计时还可能带有条件。比如,我们想了解一下交易金额大于100元以上的订单销售额合计。


这个信息一般也无法在预汇总阶段处理。我们只能预汇总销售额,不能预汇总100元以上的销售额,除非事先想到了这种可能的查询,把大于100的销售额先统计出来。这相当于新造了一个衍生测度:if(销售额>100,销售额,0)。但是,这里的100经常是个参数,在交互查询阶段才临时输入进来,这就不可能事先预汇总了。


条件维度还可能出现多个关联的情况,比如统计销售量超过10件的那些订单的销售额。不过导致的问题和处理方案也都是一样的。


类似地,还可能有由测度临时产生的维度。比如按年龄段统计平均收入,而年龄段的划分规则是由参数传递进来的(如果是事先确定的分段规则,是真地可以先定义出一个维度出来)。


我们要再说“显然”:这种条件测度(或临时维度)的查询是有业务意义的,甚至可以说是非常常见的,而预汇总方案对此却无能为力。


条件测度还可能和组合聚合值混合出现,读者可以自行脑补一些有业务意义的例子。


四、时间段统计


时间是多维分析中特别重要的一种维度。一般的维度只能以枚举(统计时针对某些特定的维度值)方式切片,而且时间维度却很特殊,它即可以枚举、也可以采用连续区间的方式来做切片。


我们可能关心两个起止日期之间的统计值,比如5月8日到6月12日之间的销售额合计,这个起止时间点也是查询时作为参数传递进来的,具有很强的随意性。


要再一次说“显然”了:这种统计有很强很强的业务意义;而且,也再一次说,预汇总方案对此无能为力。


按维度的预汇总,要么针对每天,要么针对每个月,都是确定的维度(或其层次),而5月8日到6月12日这种区间则不是任何维度和层次能描述的。


仔细思考一下会发现,时间段统计也可以理解成是一种条件测度,但因为它太常见、而且工程上的实现方案(以后再讲)也和条件测度不一样,所以被我们单列出来了。


时间段统计还可能有多个组合关联的情况,比如看看5月8日到6月12日间销出的、生产日期在1月9日到2月17日之间的货品总额。只考虑一个时间维度的区间,还可以一定程度地利用预汇总数据,基于中间CUBE去遍历聚合。但如果涉及多个时间维区间组合查询时,这个问题也会变得非常繁琐,即使有预汇总数据也还会面临多维度切片的问题,想要快速响应,不仅要冗余存储按维度预汇总的数据,还可能需要有冗余多种排序方案。这些处理方法我们在后续再仔细研究。


尾语


多维分析预汇总方案的功能盲区,不仅仅在于我们常说的明细数据,而还有很多汇总信息也无法解决。采用预汇总用空间换时间,确实能一定程度地提高性能,但只能解决一小部分最简单的需求,而且还面临存储量巨大的问题。把多维分析的效果寄希望于预汇总方案是很不靠谱的。要做好多维分析,硬遍历的功夫是基本的,即使有了预汇总数据,也要在优秀的硬遍历能力辅助下才能发挥更大的作用。


专栏作者简介

润乾软件创始人、首席科学家


清华大学计算机硕士,中国大数据产业生态联盟专家委员,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016、2017年,荣获中国电子信息产业发展研究院评选的“中国软件和信息服务业十大领军人物”;2017年度中国数据大工匠、数据领域专业技术讲堂《数据蒋堂》创办者。


数据蒋堂

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。


往期回顾:


数据蒋堂 | JOIN延伸 - 维度概念

数据蒋堂 | JOIN提速 - 有序归并

数据蒋堂 | JOIN提速 - 外键指针的衍生

数据蒋堂 | JOIN提速 - 外键指针化

数据蒋堂 | JOIN简化 - 意义总结

数据蒋堂 | JOIN简化-消除关联

数据蒋堂 | JOIN简化 - 维度对齐

数据蒋堂 | JOIN运算剖析

数据蒋堂 | 迭代聚合语法

数据蒋堂 | 非常规聚合

数据蒋堂 | 再谈有序分组

数据蒋堂 | 有序分组

数据蒋堂 | 非等值分组

数据蒋堂 | 还原分组运算的本意

数据蒋堂 | 有序遍历语法

数据蒋堂 | 常规遍历语法

数据蒋堂 | 从SQL语法看离散性

数据蒋堂 | 从SQL语法看集合化

数据蒋堂 | SQL用作大数据计算语法好吗?

数据蒋堂 | SQL的困难源于关系代数

数据蒋堂 | SQL像英语是个善意的错误

数据蒋堂 | 开放的计算能力为数据库瘦身

数据蒋堂 | 计算封闭性导致臃肿的数据库

数据蒋堂 | 怎样看待存储过程的移植困难

数据蒋堂 | 存储过程的利之弊

数据蒋堂 | 不要对自助BI期望过高

数据蒋堂 | 报表的数据计算层

数据蒋堂 | 报表应用的三层结构

数据蒋堂 | 列式存储的另一面

数据蒋堂 | 硬盘的性能特征

数据蒋堂 | 我们需要怎样的OLAP?

数据蒋堂 | 1T数据到底有多大?

数据蒋堂 | 索引的本质是排序

数据蒋堂 | 功夫都在报表外--漫谈报表性能优化

数据蒋堂 | 非结构化数据分析是忽悠?

数据蒋堂 | 多维分析的后台性能优化手段

数据蒋堂 | JOIN延伸 - 维度查询语法

数据蒋堂 | 文件的性能分析

数据蒋堂 | RDB与NoSQL的访问性能

数据蒋堂 | 报表开发的现状

数据蒋堂 | Hadoop - 一把杀鸡用的牛刀

数据蒋堂 | Hadoop中理论与工程的错位

数据蒋堂 | 存储和计算技术的选择

数据蒋堂 | 人工智能中的“人工”

数据蒋堂 | 中国报表漫谈

数据蒋堂 | 内存数据集产生的隐性成本

登录查看更多
0

相关内容

数据粒度,在AI中多指数据的详细程度,数据的粒度越小,数据的信息越具体,越容易在机器学习中把握数据的规律与本质,所以在机器学习中,我们一般追求数据的细粒度化,多层次化,恰当高效的表示,但是细粒度数据是难以获取的,并且往往难以训练和学习,需要特殊的方法。
专知会员服务
114+阅读 · 2020年6月12日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
2020年中国《知识图谱》行业研究报告,45页ppt
专知会员服务
239+阅读 · 2020年4月18日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
用户研究:如何做用户画像分析
产品100干货速递
44+阅读 · 2019年5月9日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
推荐系统
炼数成金订阅号
28+阅读 · 2019年1月17日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
五步帮你实现用户画像的数据加工
云栖社区
6+阅读 · 2018年2月4日
可视化多维数据的艺术
论智
10+阅读 · 2018年1月23日
Arxiv
5+阅读 · 2018年1月23日
Arxiv
5+阅读 · 2017年11月13日
VIP会员
相关VIP内容
专知会员服务
114+阅读 · 2020年6月12日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
2020年中国《知识图谱》行业研究报告,45页ppt
专知会员服务
239+阅读 · 2020年4月18日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
相关资讯
用户研究:如何做用户画像分析
产品100干货速递
44+阅读 · 2019年5月9日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
推荐系统
炼数成金订阅号
28+阅读 · 2019年1月17日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
五步帮你实现用户画像的数据加工
云栖社区
6+阅读 · 2018年2月4日
可视化多维数据的艺术
论智
10+阅读 · 2018年1月23日
Top
微信扫码咨询专知VIP会员