多维数据模型
Kimball 维度建模
维度建模就是时刻考虑如何能够提供简单性,以业务为驱动,以用户理解性和查询性能为目标
维度建模分为两种表:事实表和维度表
- 事实表:必然存在的一些数据,像采集的日志文件,订单表,都可以作为事实表
特征:是一堆主键的集合,每个主键对应维度表中的一条记录,客观存在的,根据主题确定出需要使用的数据
- 维度表:维度就是所分析的数据的一个量,维度表就是以合适的角度来创建的表,分析问题的一个角度:时间、地域、终端、用户等角度
多维数据模型的定义和作用
多维数据模型是为了满足用户从多角度多层次进行数据查询和分析的需要而建立起来的基于事实和维的数据库模型,其基本的应用是为了实现OLAP(Online Analytical Processing)。
当然,通过多维数据模型的数据展示、查询和获取就是其作用的展现,但其真的作用的实现在于,通过数据仓库可以根据不同的数据需求建立起各类多维模型,并组成数据集市开放给不同的用户群体使用,也就是根据需求定制的各类数据商品摆放在数据集市中供不同的数据消费者进行采购。
多维数据模型最大的优点就是其基于分析优化的数据组织和存储模式。
主题建模
构成
主题建模是对原始数据、原始业务理解的基础上,将数据归类为多个主题(e.g. 销量主题、维修订单主题、线索转化主题…)。
一般,一个主题就是由一张事实表、多张维表、以及结果聚合表所组成。
- 基于多维数据模型构建底层:事实表+维表
- 基于上述模型,聚合结果,生成聚合数据。
事实表要尽可能宽,尽可能容纳此主题下所有指标,如果有新指标需求,则动态添加指标。但是事实表太宽可能导致后续计算资源不足,如果需要拆分事实,拆分事实表的过程即拆分子主题。对事实表的拆分不明确,即主题不明确,会导致后续资源的浪费或者维护成本的提高。因为后续可能出现衍生指标需要两个主题出的情况,那么需要再新出一个综合主题。
优势
主题建模是对数据的分类,这需要对领域或企业内数据特征有深刻理解。清晰的主题规划往往是数仓设计成败的关键。
与主题建模相对的,是按需输出数据,按照产品的需求出对应指标。
按需出指标,不必等待多维分析数仓建立完成即可开始,前期开发周期短。
主题建模是提前将维度和指标的全集定义好,聚合尽可能多的维度属性和指标的组合,与产品需求解耦,不会随产品需求增加而将数仓变得臃肿,可维护性好,长远来看性能上也更好。
扩展
原子指标、衍生指标的增长:需要增加结果表的schema,所有数据库是兼容的,产生结果表的SQL修改其中读取事实表的查询,可以向后兼容
维度属性的增长:在维度表中增加具体的维度属性即可,不需要其他修改。
维度的增长:产生结果表的SQL增加新的维度表,结果表的schema也进行相应修改。
概念
在看实例前,这里需要先了解两个概念:事实表和维表。事实表是用来记录具体事件的,包含了每个事件的具体要素,以及具体发生的事情;维表则是对事实表中事件的要素的描述信息。比如一个事件会包含时间、地点、人物、事件,事实表记录了整个事件的信息,但对时间、地点和人物等要素只记录了一些关键标记,比如事件的主角叫“Michael”,那么Michael到底“长什么样”,就需要到相应的维表里面去查询“Michael”的具体描述信息了。基于事实表和维表就可以构建出多种多维模型,包括星形模型、雪花模型和星座模型。这里不再展开了,解释概念真的很麻烦,而且基于我的理解的描述不一定所有人都能明白,还是直接上实例吧:
事实表里面主要包含两方面的信息:维和度量,维的具体描述信息记录在维表,事实表中的维属性只是一个关联到维表的键,并不记录具体信息;度量一般都会记录事件的相应数值,比如这里的产品的销售数量、销售额等。维表中的信息一般是可以分层的,比如时间维的年月日、地域维的省市县等,这类分层的信息就是为了满足事实表中的度量可以在不同的粒度上完成聚合,比如2010年商品的销售额,来自上海市的销售额等。
事实表
事实表是用来记录具体事件的,包含了每个事件的具体要素,以及具体发生的事情;如系统的日志、销售记录、用户访问日志等信息,事实表的记录是动态的增长的,所以体积是大于维度表。即:用户关心的业务数据,如销售数量,库存数量,销售金额
维表
维表则是对事实表中事件的要素的描述信息。比如一个事件会包含时间、地点、人物、事件,事实表记录了整个事件的信息,但对时间、地点和人物等要素只记录了一些关键标记,比如事件的主角叫“Michael”,那么Michael到底“长什么样”,就需要到相应的维表里面去查询“Michael”的具体描述信息了。
维度表(Dimension Table)也称为查找表(Lookup Table)是与事实表相对应的表,这个表保存了维度的属性值,可以跟事实表做关联,相当于是将事实表中经常重复的数据抽取、规范出来用一张表管理,常见的有日期(日、周、月、季度等属性)、地区表等,所以维度表的变化通常不会太大。即:用来描述业务数据的数据,如日期、产品数据、地区、渠道
基于事实表和维表就可以构建出多种多维模型,包括星形模型、雪花模型和星座模型。
星型模型
当所有维表都直接连接到“事实表”上时,整个图解就像星星一样,故将该模型称为星型模型。数据有一定的冗余
雪花模型
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 “层次 “ 区域,这些被分解的表都连接到主维度表而不是事实表。如图 2,将地域维表又分解为国家,省份,城市等维表。它的优点是:通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。
****