一、事实表又可分成以下三种:
事务事实表:保存各业务过程的原子操作事件,即最细粒度的操作事件
周期快照事实表:以具有规律性的,可预见的事件间隔来记录事实,主要用来记录一些存量型(库存数量,账户余额),或者状态型(温度,行驶速度)等指标
累积快照事实表:是一个业务流程中多个关键业务过程联合处理而构建的事实表,主要用于分析业务过程(里程碑)中之间的时间间隔,典型示例如下
订单id | 用户id | 下单日期 | 支付日期 | 发货日期 | 确认收货日期 | 订单金额 | 支付金额 |
1001 | 1234 | 2020-06-14 | 2020-06-15 | 2020-06-16 | 2020-06-17 | 1000 | 1000 |
事实表度量值可分为以下三种:
1)可加事实:可以按照与事实表相关的所有维度进行累加
2)半可加事实:只能按照事实表一部分维度相加,例如周期性快照事实表,库存和商品维度是可以累加的,但是周期维度(时间)是不能相加的,因为没有任何意义
3)不可加事实:不可加事实是指完全不具备可加性,例如比率型事实。不可加事实通常需要转换成可加事实,例如比率转换成分子和分母的累加。
事实表设计流程:1)选择业务 2)声明粒度 3)确定维度 4)确定事实
二、维度表:事实表围绕业务过程设计,而维度表围绕业务过程所处的环境设计,维度表的字段称之为维度属性
设计步骤:
1)确定维度。梳理业务,确定业务过程发生的环境,如果维度属性很少,可以考虑把维度属性加到事实表中,即维度退化
2)确定主维表和相关维表。维表也可以说是实体对象,主维表即主表,相关维表即主表对应的子表、孙表
3)确定维度属性。1.尽量生成丰富的维度属性(业务梳理要细化) 2.维度属性值应该用文字说明,或者编码+文字,而不仅仅保存编码值,因为可以避免最终输出结果的时候还需要再去关联字典表,影响效率 3.尽量沉淀通用维度属性。例如在相亲业务中,财富、外貌、身高维度属性可以沉淀成是否高富帅维度属性,即用一个维度字段表示多个维度字段的含义。
维度数据的历史状态如何保存:
1)全量快照表
2)拉链表
多值维度:事实表中一条记录在某个维度表中有多条记录与之对应
多值属性:维表中的某个属性同时有多个值,称之为“多值属性”,例如商品维度的平台属性和销售属性,每个商品均有多个属性值。此场景可用hive复杂数据类型(map...),或者将多值属性放在多个字段,但只适用于属性值个数固定的情况。