数仓概念
- 业务过程:可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。
1-数仓建模方法论
ER模型
- 实体关系模型
- 数据库规范化(三范式):减少数据冗余,增强数据的一致性
这种建模方法的出发点是整合数据,其目的是将整个企业的数据进行组合和合并。并进行规范处理,减少数据冗余性,保证数据的一致性。这种模型并不适合直接用于分析统计。
维度模型
维度模型将复杂的业务通过事实和维度两个概念进行呈现
事实通常对应的是业务过程,而维度通常对应的是业务过程发生时所处的环境
注:业务过程可以概括为一个个不可拆分的行为事件,比如说电商交易钟的下单,取消订单,付款,退单等等,这些都是一个行为事件,都是业务过程
例: 下图为一个典型的维度模型,其中位于中心的SalesOrder为事实表,其中保存的是下单这个业务过程的所有记录。位于周围每张表都是维度表,包括Date(日期),Customer(顾客),Product(产品),Location(地区)等,这些维度表就组成了每个订单发生时所处的环境,即何人、何时、在何地下单了何种产品。从图中可以看出,模型相对清晰、简洁。
维度建模理论
1-事实表
事实表作为数仓维度建模的核心,紧紧围绕着业务过程来设计。其中包含与该业务过程有关的维度引用(维度表外键)以及该业务过程的度量(通常是可累加的数字类型字段)。
特点:通常比较细长,即列比较少,但行比较多,且行的增速很快
分类:
- 事务事实表
- 周期快照事实表
- 累积快照事实表
事务事实表
事务性事实表是用来记录各雨雾过程的,它保存的是各业务过程的原子操作事件。即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。
1 - 设计流程
设计事务性事实表一般可遵循以下四个步骤:
选择业务过程 -> 声明粒度 -> 确认维度 -> 确认事实
-
选择业务过程:在业务系统中,挑选我们感兴趣的业务过程,业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等都是业务过程。通常情况下,一个业务过程对应一张事务型事实表
-
声明粒度:精确定义每张事务型事实表的每行数据表示什么,应该尽可能的选择最细粒度,以此来应对各种细节程度的需求
举例:典型的粒度声明如下:订单事实表中一行数据表示的是一个订单中的一个商品项。
- 确认维度:确定维度时应尽量多的选择与业务过程相关的环境信息。因为维度的丰富程度就决定了维度模型能够支持的指标丰富程度。
-
确认事实:此处的“事实”一词,指的是每个业务过程的度量值(通常是可累加的数字类型的值,例如:次数、个数、件数、金额等)
周期型快照事实表
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。
1-设计流程:
确认粒度-> 确认事实
-
确认粒度:周期型快照事实表的粒度可由采样周期和维度描述,故确定采样周期和维度后即可确定粒度。
采样周期通常选择每日。
维度可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则可确定维度为仓库和商品。
确定完采样周期和维度后,即可确定该表粒度为每日-仓库-商品。
-
确认事实:事实也可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则事实为商品库存。
累积型快照事实表
累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。
累积型快照事实表通常具有多个日期字段,每个日期对应业务流程中的一个关键业务过程(里程碑)。
1-设计流程
累积型快照事实表的设计流程同事务型事实表类似,也可采用以下四个步骤,下面重点描述与事务型事实表的不同之处。
选择业务过程 -> 声明粒度 -> 确认维度 -> 确认事实
-
选择业务过程
选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表
-
声明粒度
精确定义每行数据表示的是什么,尽量选择最小的粒度
-
确认维度:选择与各业务过程相关的维度,需要注意的是, 每个业务过程均需要一个日期维度
-
确认事实:选择各业务过程的度量值
2-维度表
前面提到事实表紧紧围绕业务过程进设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。
1) 确认维度(表)
在设计事实表时,已经确定了与每个事实表相关的维度,理论上每个相关维度均需对应一张维度表。需要注意到,可能存在多个事实表与同一个维度都相关的情况,这种情况需保证维度的唯一性,即只创建一张维度表。另外,如果某些维度表的维度属性很少,例如只有一个名称,则可不创建该维度表,而把该表的维度属性直接增加到与之相关的事实表中,这个操作称为维度退化。
2)确定主维表和相关维表
此处的主维表和相关维表均指业务系统中与某维度相关的表。例如业务系统中与商品相关的表有sku_info,spu_info,base_trademark,base_category3,base_category2,base_category1等,其中sku_info就称为商品维度的主维表,其余表称为商品维度的相关维表。维度表的粒度通常与主维表相同。
3)确定维度属性
确定维度属性即确定维度表字段。维度属性主要来自于业务系统中与该维度对应的主维表和相关维表。维度属性可直接从主维表或相关维表中选择,也可通过进一步加工得到。
确定维度属性时,需要遵循以下要求:
(1)尽可能生成丰富的维度属性
(2)尽量不使用编码,而使用明确的文字说明,一般可以编码和文字共存。
(3)尽量沉淀出通用的维度属性