维度建模的事实表设计

事实表基础

事实表特性

事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量。
事实表中一条记录所表达的业务细节程度被称为粒度
通常粒度可以通过两种方式来表述:一种是维度属性组合所表示的细节程度:一种是所表示的具体业务含义。

作为度量业务过程的事实(事实表属性),一般为整型或浮点型的十进制数值,有可加性、半可加性和不可加性三种类型。
可加性事实是指可以按照与事实表关联的任意维度进行汇总。
半可加性事实只能按照特定维度汇总,不能对所有维度汇总,比如库存可以按照地点和商品进行汇总,而按时第门章事实表设计丁一间维度把一年中每个月的库存累 加起来则毫无意义。
还有一种度量完全不具备可加性,比如比率型事实。对于不可加性事实可分解为可加的组件来实现聚集。
维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为“退化维度”。与其他存储在维表中的维度一样 ,退化维度也可以用来进行事实表的过滤查询、实现聚合操作等。
事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表。

事务事实表用来描述业务过程,眼踪空间或时间上某点的度量事件,保存的是最原子的数据,也称为“原子事实表。
周期快照事实表以具有规律性的、可预见的时间间隔记录事实 ,时间间隔如每天、每月、每年等。
累积快照事实表用来表述过程开始和结束之间的关键步骤事件 ,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点, 当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改。

事实表设计原则

原则 1 :尽可能包含所有与业务过程相关的事实;
原则 2 :只选择与业务过程相关的事实;
原则 3 : 分解不可加性事实为可加的组件;
原则 4:在选择维度和事实之前必须先声明粒度;
粒度的声明是事实表设计中不可忽视的重要一步,粒度用于确定事实表中一行所表示业务的细节层次,决定了维度模型的扩展性,在选择维度和事实之前必须先声明粒度,且每个维度和事实必须与所定义的粒度保持一致。
原则 5 : 在同一个事实表中不能有多种不同粒度的事实;
原则 6 :事实的单位要保持一致;
原则 7 : 对事实的 null 值要处理;
原则 8 :使用退化维度提高事实表的易用性。

事实表设计方法

Kimball的四步维度建模方法:选择业务过程、声明粒度、确定维度、确定事实。
改进方法:
第一步 : 选择业务过程及确定事实表类型。
在明确了业务需求以后,接下来需要进行详细的需求分析,对业务的整个生命周期进行分析,明确关键的业务步骤,从而选择与需求有关的业务过程。
业务过程通常使用行为动词表示业务执行的活动
第二步:声明粒度 。
粒度的声明是事实表建模非常重要的一步,意味着精确定义事实表的每一行所表示的业务含义,粒度传递的是与事实表度量有关的细节层次。明确的粒度能确保对事实表中行的意思的理解不会产生混淆,保证所有的事实按照同样的细节层次记录。
第三步 : 确定维度 。
完成粒度声明以后,也就意味着确定了主键,对应的维度组合以及相关的维度字段就可以确定了,应该选择能够描述清楚业务过程所处的环境的维度信息。
第四步 : 确定事实 。
事实可以通过回答“过程的度量是什么”来确定。
应该选择与业务过程有关的所有事实,且事实的粒度要与所声明的事实表的粒度一致。事实有可加性、半可加性、非可加性三种类型 , 需要将不可加性事实分解为可加的组件。
第五步 : 冗余维度 。
在大数据的事实表模型设计中,考虑更多的是提高下游用户的使用效率,降低数据获取的复杂性,
减少关联的表数量。所以通常事实表中会冗余方便下游用户使用的常用维度,以实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等操作。

事务事实表

设计过程

任何类型的事件都可以被理解为一种事务。比如交易过程中的创建订单、买家付款,物流过程中的揽货、发货、签收,退款中的申请退款、申请小二介入等,都可以被理解为一种事务。
事务事实表, 即针对这些过程构建的一类事实表,用以跟踪定义业务过程的个体行为,提供丰富
的分析能力,作为数据仓库原子的明细数据。
( I )选择业务过程
(2 )确定粒度
业务过程选定以后,就要针对每个业务过程确定一个粒度,即确定事务事实表每一行所表达的细节层次。
(3 )确定维度
(4 )确定事实
(5 )冗余维度
经过以上五个步骤,完成了淘宝交易事务事实表的设计。
经过以上五个步骤,完成了淘宝交易事务事实表的设计。
但在设计过程中遗留一个问题,即对于单一事实表 中是否包含多个业务过程,还没有给出定论。

单事务事实表

单事务事实表,顾名思义,即针对每个业务过程设计一个事实表。
这样设计的优点不言而喻,可以方便地对每个业务过程进行独立的分析研究。

多事务事实表

多事务事实表 , 将不同的事实放到同一个事实表中,即同一个事实表包含不 同的业务过程。多事务事实表在设计时有两种方法进行事实的处理 : ①不同业务过程的事实使用不同的事实字段进行存放:①不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签。

多事务事实表的选择
实际应用中需要根据业务过程进行选择:
当不同业务过程的度量比较相似、差异不大时,可以采用第 二种多事务事实表的设计方式,使用同一个字段来表示度量数据 。但这种方式存在一个问题一一-在同一个周期内会存在多条记录。
当不同业务过程的度量差异较大时,可以选择第一种 多 事务事实表的设计方式,将不同业务过程的度量使用不同 字段冗余到表中,非当前业务过程则置零表示。这种方式所存在的问题是度量字段零值较多。

两种事实表对比

在这里插入图片描述

父子事实的处理方式

通过分摊父订单的金额将所有业务过程的度量全部带进淘宝交易事务事实表中 ,包括下单数量、商品价格、子订单折扣、下单分摊比例、父订单支付金额、父订单支付邮费、父订单折扣、子订单下单金额、子订单下单有效金额、支付分摊比例、子订单支付金额等,将父子事实同时冗余到事务表中。

事实的设计准则

1 . 事实完整性
事实表包含与其描述的过程有关的所有事实,即尽可能多地获取所有的度量。
2. 事实一致性
在确定事务事实表的事实时,明确存储每一个事实以确保度量 的一致性。
3 . 事实可加性
事实表确定事实时,往往会遇到非可加性度量 ,比如分摊 比例、 利润率等,虽然它们也是下游分析的关键点,但往往在事务事实表中 关注更多的是可加性事实,下游用户在聚合统计时更加方便。

周期快照事实表、

事务事实表可以很好地跟踪一个事件,并对其进行度量,以提供丰富的分析能力。然而,当需要一些状态度量时,比如账户余额、买卖家星级 、 商品库存、卖家累积交易额等,则需要聚集与之相关的事务才能进行识别计算 ;或者聚集事务无法识别 ,比如 温度等。对于这些状态度量,事务事实表是无效率的,而这些度量也和度量事务本身一样是有用的 ,因此, 维度建模理论给出了第二种常见的事实表一一周期快照事实表,简称“快照事实表”。快照事实表在确定的问隔内对实体的度量进行抽样,这样可以很容易地研究实体的度量值,而不需要聚集长期 的事务历史。

特性

1.用快照采样状态
快照事实表以预定的间隔采样状态度量。这种间隔联合一个或多个维度,将被用来定义快照事实表的粒度,每行都将包含记录所涉及状态的事实。
2. 快照粒度
事务事实表的粒度可以通过业务过程中所涉及的细节程度来描述,但快照事实表的粒度通常总是被多维声明,可以简单地理解为快照需要采样的周期以及什么将被采样。
3. 密度与稀疏性
快照事实表和事务事实表的一个关键区别在密度上。事务事实表是稀疏的,只有当天发生的业务过程,事实表才会记录该业务过程的事实,如下单、支付等;而快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行,比如针对卖家的历史至今的下单和支付金额,无论当天卖家是否有下单支付事实,都会给该卖家记录一行。
4 . 半可加性
在快照事实表中收集到的状态度量都是半可加的。与事务事实表的可加性事实不同,半可加性事实不能根据时间维度获得有意义的汇总结果。

实例

快照事实表的设计步骤可 以归纳为:
1· 确定快照事实表的快照粒度。
2· 确定快照事实表采样的状态度量。

注意事项

1.事务与快照成对设计
2. 附加事实
快照事实表在确定状态度量时, 一般都是保存采样周期结束时的状态度量。
3. 周期到日期度量

累积快照事实表

对于类似于研究事件之间时间间隔的需求,采用累积快照事实表可以很好地解决。

设计过程

第一步 : 选择业务过程。
第二步:确定粒度。
第三步:确定维度。
第四步:确定事实。
第五步:退化维度。
在大数据的事实表模型设计中,更多的是考虑提高下游用户的使用效率,降低数据获取的复杂性,减少关联的表数量。一方面,存储成本降低了,而相比之下 CPU 成本仍然较高;另一方面,在大数据时代,很多维表比事实表还大,如淘宝几十亿的商品、几亿的买家等,在分布式数据仓库系统中,事实表和维表关联的戚本很高。

特点

1 . 数据不断更新
2. 多业务过程日期
累积快照事实表适用于具有较明确起止时间的短生命周期的实体,比如交易订单、物流订单等,对于实体的每一个实例,都会经历从诞生到消亡等一系列步骤。对于商品、 用户等具有长生命周期的实体, 一般采用周期快照事实表更合适。累积快照事实表的典型特征是多业务过程日期,用于计算业务过程之间的时间间隔 。但结合阿里 巴巴数据仓库模型建设的经验,对于累积快照事实表,还有一个重要作用是保存全量数据。
3.特殊处理
1 非线性过程
针对非线性过程,处理情况主要有以下几种 。
( 1)业务过程的统一
(2 )针对业务关键里程碑构建全面的流程
(3 )循环流程的处理
2. 多源过程
针对多源业务建模,主要考虑事实表的粒度问题。
3 . 业务过程取舍
当拥有大量的业务过程时,模型的实现复杂度会增加,特别是对于多源业务过程,模型的精合度过高,此时需要根据商业用户需求,选取关键的里程碑。

4.物理实现
逻辑模型和物理模型密不可分,针对累积快照事实表模型设计,其有不同的实现方式。
第一种方式是全量表的形式。 此全量表一般为日期分区表 ,每天的分区存储昨天的全量数据和当天的增量数据合并的结果,保证每条记录的状态最新。 此种方式适用于全量数据较少 的情况。
第二种方式是全量表的变化形式。此种方式主要针对事实表数据量很大的情况。较短生命周期的业务实体一般从产生到消亡都有一定的时间间隔,可以测算此时间间隔,或者根据商业用户的需求确定一个相对较大的时间间隔。
第三种方式是以业务实体的结束时间分区。

三种事实表的比较

在这里插入图片描述

无事实的事实表

在维度模型中,事实表用事实来度量业务过程,不包含事实或度量的事实表称为“无事实的事实表。虽然没有明确的事实,但可以用来支持业务过程的度量。
常见的无事实的事实表主要有如下两种:
第一种是事件类的,记录事件的发生。在阿里巴巴数据仓库中,最常见的是日志类事实表。
第二种是条件、范围或资格类的,记录维度与维度多对多之 间的关系。比如客户和销售人员的分配情况、产品的促销范围 等。

聚集型事实表

数据仓库的性能是数据仓库建设是否成功的重要标准之一。聚集主要是通过汇总明细粒度数据来获得改进查询性能的效果。通过访问聚集数据,可以减少数据库在响应查询时必须执行的工作量,能够快速响应用户的查询,同时有利于减少不同用户访问明细数据带来的结果不一致问题。
阿里巴巴将使用频繁的公用数据,通过聚集进行沉淀,比如卖家最近 l 天的交易汇总表、卖家最近 N 天的交易汇总表、卖家自然年交易汇总表等。这类聚集汇总数据,被叫作“公共汇总层”。

聚集的基本原则

一致性。聚集表必须提供与查询明细粒度数据一致的查询结果。
避免单一表设计。不要在同 一个表中存储不同层次的聚集数据 ;否则将会导致双重计算或出现更糟糕的事情。
聚集粒度可不同。聚集并不需要保持与原始明细粒度数据一样的粒度,聚集只关心所需要查询的维度。

聚集的基本步骤

第一步:确定聚集维度。
第二步:确定一致性上钻
第三步:确定聚集事实。

阿里公共汇总层

1 .基本原则
除了聚集的基本原则外,阿里巴巴建设公共汇总层还必须遵循以下‘原则。
1)数据公用性。
2)不跨数据域。
3)区分统计周期。

2.交易汇总表设计
聚集是指针对原始明细粒度的数据进行汇总。

聚集补充说明

1 .聚集是不跨越事实的
聚集是针对原始星形模型进行的汇总,为了获取和查询与原始模型一致的结果,聚集的维度和度量必须与原始模型保持一致,因 此聚集是不跨越事实的。
2 . 聚集带来的问题
聚集会带来查询性能的提升,但聚集也会增加 ETL 维护的难度。
当子类目对应的一级类目发生变更时,先前存在的、已经被汇总到聚集表中的数据需要被重新调整。这一额外工作随着业务复杂性的增加,会导致多数 ETL 人员选择简单强力的方法,删除并重新聚集数据。

猜你喜欢

转载自blog.csdn.net/xiaoxie920226/article/details/88812786