文章目录
- 一、数仓建模
- 1、数仓建模的意义
- 2、数仓建模方法论
- 1)ER模型:
- 2)六范式:
- 3、维度模型
- 二、维度建模理论之事实表
- 1、事务型事实表
- 2、周期型快照事实表
- 3、累计型快照事实表
- 三、维度建模理论之维度表
- 1、设计步骤
- 2、设计要点
- 3、维度变化
- 4、多值维度和多值属性
- 四、数仓设计
- 1、数仓分层规划
- 2、数仓构建流程
一、数仓建模
1、数仓建模的意义
数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据,以便数据能够高性能、低成本、高效率、高质量的使用
2、数仓建模方法论
1)ER模型:
实体关系模型:
实体关系模型将复杂的数据抽象为两个概念——实体和关系。实体表示一个对象,关系是指两个实体之间的关系。
数据库规范化:
数据库规范化是使用一系列范式设计数据库(通常是关系型数据库)的过程,其目的是
减少数据冗余,增强数据的一致性
。
2)六范式:
1、第一范式(1NF):字段必须是原子的,不能拆分的,比如5台电脑
2、第二范式(2NF):不能存在部分函数依赖,比如学生所在的系跟分数没关系,系单独摘出去
3、第三范式(3NF):不能出现传递依赖,比如学号–> 系名 --> 系主任
4、巴斯-科德范式(BCNF)
5、第四范式(4NF)
6、第五范式(5NF)
3、维度模型
维度模型将复杂的业务通过事实和维度两个概念进行呈现。事实通常对应业务过程,而维度通常对应业务过程发生时所处的环境
事实表
: 描述操作的,一般都是动词表,比如订单表 谁在什么时候购买了什么商品。
维度表
: 就是名词表 ,比如 用户表 国家表 商品分类
二、维度建模理论之事实表
1、事务型事实表
事务事实表用来记录各
业务过程
,它保存的是各业务过程的原子操作事件,即最细粒度
的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。
事务型事实表可用于分析与各业务过程相关的各项统计指标,由于其保存了最细粒度的记录,可以提供最大限度的灵活性,可以支持无法预期的各种细节层次的统计需求
设计流程:
选择业务过程→声明粒度→确认维度→确认事实
不足:
存量型指标
,例如商品库存,账户余额等,需要对两张事务型事实表进行聚合,且需要区分两者对余额或库存的影响(加或减),需要对两张表的全表数据聚合才能得到统计结果,不论是从逻辑上还是效率上考虑,事务型事实表都不是一个好的方案
– 解决方案:可以使用周期快照事实表
解决
多事务关联统计(大表join大表
)-- 解决方案:累计型快照事实表
2、周期型快照事实表
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标
3、累计型快照事实表
累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,主要用于分析业务过程(里程碑)之间的时间间隔等需求。例如用户下单到支付的平均时间间隔,使用累积型快照事实表进行统计,就能避免两个事务事实表的关联操作,从而变得十分简单高效
三、维度建模理论之维度表
1、设计步骤
确定维度表 --> 确定主维表和相关维表 --> 确定维度属性(字段)
2、设计要点
规范化
是指使用一系列范式设计数据库的过程,其目的是减少数据冗余,增强数据的一致性。
反规范化
是指将多张表的数据冗余到一张表,其目的是减少join操作,提高查询性能
在设计维度表时,如果对其进行规范化,得到的维度模型称为
雪花模型
如果对其进行反规范化,得到的模型称为星型模型
。
数据仓库系统的主要目的是用于数据分析和统计,所以是否方便用户进行统计分析决定了模型的优劣。采用雪花模型,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差,而采用星型模型,则方便、易用且性能好
。所以出于易用性和性能的考虑,维度表一般是很不规范化的
3、维度变化
维度属性通常不是静态的
,而是会随时间变化的,数据仓库的一个重要特点就是反映历史的变化,所以如何保存维度的历史状态是维度设计的重要工作之一
。保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表和拉链表。
全量快照表:
离线数据仓库的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据。这种方式的优点和缺点都很明显。
优点是简单而有效,开发和维护成本低,且方便理解和使用。 缺点是浪费存储空间,尤其是当数据的变化比例比较低时。
拉链表:
记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。
拉链表适用于数据发生变化频率不高的维度,能够更加高效的保存维度信息的历史状态。
4、多值维度和多值属性
如果事实表中一条记录在某个维度表中有多条记录与之对应,称为
多值维度
。例如,下单事实表中的一条记录为一个订单,一个订单可能包含多个商品,所以商品维度表中就可能有多条数据与之对应
维表中的某个属性同时有多个值,称之为多值属性
,例如商品维度的平台属性和销售属性,每个商品均有多个属性值
四、数仓设计
1、数仓分层规划
2、数仓构建流程
原子指标:
原子指标基于某一业务过程的度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了定义。我们可以得出结论,原子指标包含三要素,分别是业务过程、度量值和聚合逻辑,例如订单总额就是一个典型的原子指标
派生指标:
派生指标基于原子指标,其与原子指标的关系如下图所示:
衍生指标:
衍生指标是在一个或多个派生指标的基础上,通过各种逻辑运算复合而成的。例如比率、比例等类型的指标
退货率,就是退货订单次数/下单次数,假如要是改为投诉率,就是投诉订单次数/下单次数,此时下单次数这个派生指标被使用了两次,每次都统计一遍,浪费时间,
被重复利用的派生指标可以将结果保存起来,以备后面使用,从而形成了dws层
。
ads层需要统计的指标,一般都是衍生指标
,衍生指标拆分,可以拆分为多个派生指标,哪些派生指标被重复利用,就把这些指标的数据专门创建一个表放在dws层,供ads层重复利用
事实表存储在DWD层,维度表存储在DIM层
公共的派生指标统一保存在数据仓库的DWS层