对于初入数仓领域,学习数仓相关知识的新人来说,面临的一个困惑可能就是分不清"自上而下"建设数仓和"自下而上"建设数仓的差异,今天我对这两个理论进行一个简要的梳理,希望能够帮到大家。
1. 两种方式的详细介绍
1.1 自上而下建立数据仓库(范式建模)
别名:范式建模、原子数据仓库、企业信息工厂
这种构建数据仓库的理念是由数据仓库之父Bill Inmon提出的,自上而下建立数据仓库(DW-DM)又称为范式建模,之所以成为范式建模,是因为这种方式构建的数据仓库,信息存储是符合第三范式。关于第三范式的解释,见:概念讲解:数据库第一、二、三范式
按照上述理念,常用的构建方案有以下四个环节:
- 底层对接操作性或事务型系统的数据源(OLTP数据库);
- 通过ETL工具将数据抽取、转换、加载到数据仓库的ODS层;
- 通过ODS的数据建设原子数据的数据仓库DW;
- 在DW之上建设多维格式的数据集市。
由于DW里的数据不是多维格式的,不方面直接拿来供上层的应用做数据分析,因此需要通过建设多维格式的数据集市层,数据集市层的数据才有比较好的直接分析价值。
由于DW的数据是原子粒度的,数据量比较大,因此完全规范的第三范式在数据交互的时候效率会比较低下,所以通过会根据实际情况在事实表上做一些冗余,减少过多的数据交互。
1.2 自下而上建立数据仓库(维度建模)
别名:维度建模、维度数据仓库、总线体系结构、结构化数据集市、虚拟数据集市
主流的建设数据仓库的理念其实就两种,一种是上面Bill Inmon提出的,另一种就是Palph Kimball提出的自下而上地建立数据仓库(DM-DW)。
Palph Kimball 极力推崇数据集市,他任务数据仓库是企业内所有数据集市的集合,信息总是被存储在多维模型当中。
按照上述理念,常用的构建方案有以下四个环节:
- 底层对接操作性或事务型系统的数据源(OLTP数据库);
- 通过ETL工具将数据抽取、转换、加载到数据仓库的ODS层;
- 通过ODS的数据,利用维度建模方法建设一致维度的数据集市
- 通过一致性维度可以将数据集市联系在一起,由所有的数据集市组成数据仓库
可以看出Bill Inmon 的自上而下的理念相比,其实核心差异在:数据仓库和数据集市的建立先后顺序和逻辑关系。
关于维度建模:
- 维度建模源自数据集市,主要面向分析场景。Palph Kimball 推崇数据集思的集合为数据仓库,同时也提出了对数据集市的维度建模,将数据仓库的表划分为事实表、维度表两种类型。
- 维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法。
- 维度建模通常以星型模式的方式构建,不过有时也会加入一些雪花模型在里面。星型模型和学会模型的概念见:概念讲解:星型模型、雪花模型、星座模型
2. 两种方式的优劣势
优势 | 劣势 | |
自上而下建立数据仓库(范式建模) |
|
|
自下而上建立数据仓库(维度建模) |
|
|
3. 两种方式在什么场景下会被分别选用?
3.1 什么情况下会选择范式建模?
- 有公司层面的大量资源投入和部门间协调推进能力,属于公司自上而下发起的数据建设;
- 对性能要求没那么高,可以接受查询性能的不足。
- 有一些更高层次的要求,例如希望底层数据的一致性,无数据冗余,方便维护等。
3.2 什么情况下选择维度建模?
- 追求卓越的性能,希望能够有快速的查询和计算能力;
- 希望数据建设项目快速上线,短期内不希望有大量的投入;
- 能够接受后续比较高的维护成本,以及维度建模长期发展的一些劣势:数据孤岛、数据抽取负担、变更不可传递、缺乏扩展性的缺点。
参考资料:
- 构建数据仓库的方法目前有自顶向下和自底向上两种
- 数据仓库的两种建模方法
- 【数仓】数据仓库的思考(一)
- 第1章 数据仓库简史及第一代数据仓库