1.维度建模技术背景
在基于Hadoop的数据仓库(如Hive),或基于传统MPP架构的数据仓库(如Teradata),抑或是基于传统关系型数据库的数据仓库,都会面临一系列问题:
-
如何设计数据仓库中的数据存放?
-
如何设计才能使得数据的使用最为简便?
-
如何设计才能使数据仓库有良好的可扩展性和可维护性?
在数据仓库建模里面中,有两大派:
-
Bill Inmon范式: 数据仓库是一个整体的商业智能系统的一部分。 一家企业只有一个数据仓库,数据集市的信息来源出自数据仓库。在数据仓库中,信息存储 符合第三范式 。
-
Ralph Kimball范式:数据仓库是企业内所有数据集市的集合,信息总是被存储 在多维模型当中。
很明显,
Bill Inmon范式更规范化,使用起来更简便,但是忽略了数据仓库的可扩展性和可维护性。而Ralph Kimball范式站在大数据角度,考虑未来数据仓库的发展战略。因此,维度建模技术将以Ralph Kimball范式展开。
2.维度建模核心概念
(1)度量和环境
①
度量:对业务过程进行度量,如公司当月销售额如何,官网访问情况如何?
②
环境:直接度量业务过程数值很难理解其中的意义,如公司销售额是上月多还是当月多,官网访问量为多少才算好。因此环境可以理解为上下文的意思。
(2)事实和维度
在kimball范式中,度量称为事实,上下文和环境称为维度。一般,事实以数值表现,而且被大量文本形式的上下文包围。这些文本上下文描述了事实的"5个W"
维度信息(When、Where、What、Who、Why)。
例如需求为:"按照一级类目,统计本店上月的销售额情况"。这里"一级类目"为一个维度,"上月"为另一个维度,而销售是
事实。
(3)事实表
它包含了最底层、最原子性的细节,提高了灵活性。
简单理解,就是超市结账时的小票,上面详细记录了所有交易记录、商品信息等。
事实表根据XX粒度可划分为:事实事实表、周期快照表和累积快照事务表。
-
事务事实表:用于承载事务数据,通常粒度比较低(细节很多),例如产品交易事务事实、ATM交易事务事实。
-
周期快照事实表:记录有规律、固定时间间隔的业务累积数据,粒度比较大,例如账户月平均余额事实表。
-
累积快照事实表:记录具有时间跨度的业务处理过程信息,例如产品从上线到淘汰事务事实。
(4)维度表
维度可以理解为属性,通常一张表可能有数十或上百列属性。属性时查询约束条件(where)、分组(group)等基本元素。而属性尽可能体现出文字意义,而不是一些简单地符号编码。
有时设计数据库时,不能从字段(如数字型)中分析是事实还是维度。通常,如果字段有许多取值并参与运算的度量值则看出事实、如果字段变换不多并作为离散取值描述则看成维度属性。
(5)星型架构和雪花架构
维度建模存在两种组合事实表和维度表的基本架构:
星型和雪花。
-
星型架构: 所有维度表直接连接到事实表。非规范化结构,存储有冗余,例如在商品的维度表中,其品牌信息每一行都存在,包括品牌ID,名称、拥有者。但很多商品品牌一样,导致重复存储了很多次存在冗余。
-
雪花架构: 不是 所有维度表直接都连接到事实表,而是通过其他维度表连接到事实表中。例如存储商品表中,每一行仅存储品牌ID,而品牌的所有其他信息(包括品牌名称、拥有者、注册地等)都存储在单独的品牌维度表中。通过品牌ID外键,商品表可以间接获取到所有品牌详细信息。 这样虽然可以节省存储空间,但下游用户分析品牌销售额时,必须先用订单表关联商品表,然后用商品表再关联品牌表。
因此,星型架构类似于所有信息放在表一行中,无需额外关联表。
这会造成空间浪费,但效率高和查询方便。雪花结构相反,因为表连接操作通常需要进行大量优化操作才能提高查询效率。所以,
数据仓库一般采用星型架构,关系型数据库采用雪花架构。
3.维度建模常见过程
一般采用4步进行设计,即业务过程、定义粒度、确定维度和确定事实。
(1)选取业务过程
这个就是产品经理的活了,就不多说了...
(2)定义粒度
即事实表事实细节所达到的程度。本质就是如何描述事实表的单行信息。常见例如:
-
收费小票上的每一个子项
-
银行账户的每一次存款记录
(3)确定维度
确定了粒度之后,那么我们可以继续从维度角度出发。例如订单表中,常见维度包括商品、日期、卖家、买家、门店等。每一个维度可以包含大量描述性信息,如商品维度表会包含商品名称、标签价、商品品牌、商品类目、商品上线时间。
(4)确定事实
现在需要确定事实和度量,比如超时的订单活动,相关的度量为销售数量和销售金额。