数仓基本概述
数据仓库基本概念
数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中
、整合多个信息源的大量数据。
数仓核心架构
数据仓库建模概述
数据仓库建模意义
数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储之后,数据才能高性能、低成本、高效率、高质量的使用。
数仓建模方法论
ER模型
数据仓库之父Bill Inmon提出建模方法是从全企业的高度,用实体关系(Entity Relationship, ER)来描述企业业务,并规范出来,在范式理论上符合3NF。
实体关系模型
实体关系模型将数据抽象为两个概念------关系和实体。实体表示一个对象,例如学生、班级。关系指两个实体之间的关系,例如学生从属于班级。
数据库规范化
数据库规范化就是使用一系列范式设计数据库的过程,其目的是减少数据冗余,增强数据的一致性。其中重要的范式和概念包括:
- 函数依赖
- 第一范式:属性不可切割
- 第二范式:不能存在“部分函数依赖”
- 第三范式:不能存在传递函数依赖
下图为采用ER建模方法构建的模型。
这种方法可以整合数据,且能保证数据的一致性,但不适合直接进行数据分析。
维度模型
数据仓库另一位大师Kimball倡导的方法为维度建模。维度模型将复杂的业务通过事实和维度进行呈现。事实通常对应业务过程,而维度通常对应业务过程发生的环境。
下图是一个典型的维度模型。
维度建模之事实表
事实表概述
事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用以及该业务过程的度量。
事实表特点
事实表通常比较“细长”,即列较少,行较多,且行的增速快。
事实表分类
- 事务事实表
- 周期快照事实表
- 累积快照事实表
事务型事实表
概述
事务型事实表用来记录各个业务过程,保存各业务过程原子操作事件,即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。
设计流程
选择业务过程–> 声明粒度–> 确认维度–> 确认事实
- 选择业务过程
业务过程可概括为一个个不可拆分的行为事件。如电商交易中的下单、支付、发货、退单等。 - 声明粒度
业务过程确定后,需要为每个业务过程声明粒度,即精确定义每张事务型事实表的每行数据表示什么。例如:订单事实表中一行数据表示一个订单中的一个商品项。 - 确定维度
确定与每张事务型事实表相关的维度有哪些。维度的丰富程度决定了维度模型能够支持的指标丰富程度。 - 确定事实
指每个业务过程的度量值。例如:次数、个数、件数、金额等。
不足
在某些业务场景下逻辑负载,效率低下。例如存量型指标和多事务关联统计。
周期性快照事实表
以具有规律性的、可预见的时间间隔来记录事实,主要用于分析存量型或者状态型指标。
例如:对于商品库存,账户余额存量型指标,可以定期同步一份业务系统中全量数据到数据仓库,构建周期型快照事实表。
设计流程
- 确定粒度
可由采样周期和维度描述,确定采样周期和维度后可确定粒度。例如:指标为统计每个仓库中每种商品的库存,可确定维度为仓库和库存。粒度为:每日 - 仓库 - 商品 - 库存。 - 确认事实
事实可根据统计指标确定。则上述粒度事实为商品库存。
事实类型
指度量值的类型,而非事实表的类型。事实(度量值)共分为三类,可加事实,半可加事实,不可加事实。
累积型快照事实表
概述
累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。
累积型快照事实表通常具有多个日期字段,每个日期对应业务流程中的一个关键业务过程(里程碑)。
举例如下:
设计流程
累积型快照事实表的设计流程同事务型事实表类似,也可采用以下四个步骤,下面重点描述与事务型事实表的不同之处。
- 选择业务过程。
选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表。 - 声明粒度: 精确定义每行数据表示的是什么,尽量选择最小粒度。
- 确定维度:选择与各业务过程相关的维度,需要注意的是,每各业务过程均需要一个日期维度。
- 确认事实:选择各业务过程的度量值。