![](https://i-blog.csdnimg.cn/blog_migrate/975295bebef733efbb9016787b3f4bd2.webp?x-image-process=image/format,png)
一、基本概念
1、基本概念
维度建模是由 Ralph Kimball 提出,他提出将数据仓库中的表划分为事实表和维度表两种类型,专门用于分析型数据库、数据仓库、数据集市建模的方法,数据集市可以理解为是一种"小型数据仓库”。
2、事实表
2.1 事实表概述
事实表存储了从业务活动或事件提炼出来的性能度量,它主要包含维度表的外键和连续变化的可加性数值、半可加事实和不可加事实。事实表产生于业务过程中而不是业务过程的描述性信息。它一般是行多列少,占了数据仓库的90%的空间。在维度模型中也有表示多对多关系的事实,其他都是维度表。
2.2 事实表粒度
在事实表的设计时,一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。
2.3 事实表设计原则
-
尽可能包含所有业务与业务过程相关的事实
-
只选择与业务过程相关的事实
-
分解不可加性事实为可加的组件
-
在选择维度和事实之前必须声明粒度
-
在同一个事实表中不能有多种不同粒度的事实
-
事实的单位要保持一致
-
对事实的null值要处理
-
使用退化维度提高事实表的易用性
2.4 事实表的分类
-
维度建模数仓领域中的事实表分以下三种:事务事实表,周期快照事实表,累计事实表。
-
事务事实表:它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表。
-
周期快照事实表:它是按照良好的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充,而非替代品。
-
累积快照事实表:它用于描述业务过程中某个不确定时间跨度里的活动,它随着业务活动的发生会不断的更新。
2.4.1 事务事实表
事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务记录一条记录。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。由于事实表具有稀疏性质 ,因此只有当天数据才会进入 当天的事实表中,相当于每个分区里面都是每天的数据,不包含之前的数据。
说明1: 什么是稀疏表,什么是稠密表?
稀疏表:当天只有发生了操作才会有记录
稠密表:当天没有操作也会有记录,便于下游使用
说明2:为什么事务事实表具有稀疏性质?
事实表一般围绕着度量来建立,当度量产生的时候,事实记录就生成了。度量可以是销售数量、交易流水值、月末节余等数值。如果同时生成多个度量值的话,我们可以在一个事实表中建立多个事实。当我们的事实表中的事实比较多时,有可能多个事实不同时发生,如果同时生成的几率很小,我们称之为稀疏事实表(Sparse Facts)。
2.4.2 周期快照事实表
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。典型的例子如销售日快照表、库存日快照表等。它统计的是间隔周期内的度量统计,如历史至今、自然年至今、季度至今等等。
周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表,比如说时间周期是1周,那么这个周期快照事实表的一条记录就是这一周的对于某个度量的统计值。
周期快照事实表的维度个数比事务事实表要少,但是记录的事实要比事务事实表多(为什么记录的事会比事务事实表表多呢:事务事实表是稀疏表,周期快照表是稠密表)
2.4.3 累计快照事实表
累积快照事实表和周期快照事实表有些相似之处,它们存储的都是事务数据的快照信息。但是它们之间也有着很大的不同,周期快照事实表记录确定的周期数据,而累积快照事实表记录的不确定的周期的数据。
周期快照事实表记录的是重复的可预测到的时间间隔的事实,例如帐户月结余事实表,用来记录每个月末的帐户结余信息。一般周期快照的数据会按报表需要的周期进行记录,比较适合周期长一些的情况。
而累计快照适用于较短周期,有着明确的开始和结束状态的过程,如一个订单执行的过程,并记录过程中每个步骤的执行时间,使分析人员对执行的过程有整体的把握。周期快照事实表记录上每个步骤的执行时间是逐步建立的,随着执行的过程逐步更新的事实表中。
2