数仓分层目的
通过分层,可以让复杂混乱的数据体系内部的依赖结构变得层次分明,具体好处如下:
- 清晰的数据结构,每个数据层都有自己的作用域和职责
- 减少重复开发,开发一些通用的中间层数据,能够减少重复计算
- 统一数据对外输出的口径
数仓建模
大多数情况下采用的是维度建模,维度建模将数据表分成两类:维度表和事实表。维度表代表的是基础信息,是事实表发生的前提条件,比如商品列表。事实表代表的是业务操作的结果,记录的是事实,比如订单事实表,记录用户买个几样东西等信息。
数仓建模模型
- 3NF
3NF:表的原子性,即每张表代表一个实体,不能包含多个实体
拓展
1NF:列的原子性,即每列不能拆分出其他列
2NF:行的原子性,即每行都有唯一的主键,其他字段与主键之间一一对应 - 维度模型
星型模型、雪花模型、星座模型(雪花模型的变种,多个雪花模型连在一起)、Cube模型(Kylin数据库)
拓展:现在的存储大而便宜,所以雪花模型和星座模型基本不用了 - 宽表模型
遵从3NF的一般称为窄表,宽表是相对窄表而言的,宽表其实是3NF的退化,表不具备原子性,即表中包含多个实体,在NoSQL数据库中非常流行,不需要join即可拿到更多的信息
数仓五级分层
- ODS层:存放原始数据,不对外开放
- DWD层:存放明细数据,即对ODS数据进行清洗,给后续处理提供字段统一、名字统一、格式统一的标准化数据,遵从3NF模型
- DWS层:存放宽表数据,来源于DWD数据,面向具体业务领域,将数据进行横向和纵向汇聚,以空间换时间为业务提供预计算,方便业务方获取,遵从宽表模型
- ADS层:个性化维度汇总,前端应用可以直接读取的数据,例如报表,也称为数据集市
- DIM层:存放维度表