对于初入数仓领域,学习数仓相关知识的新人来说,面临的一个困惑可能就是分不清"自上而下"建设数仓和"自下而上"建设数仓的差异,今天我对这两个理论进行一个简要的梳理,希望能够帮到大家。

1. 两种方式的详细介绍

1.1 自上而下建立数据仓库(范式建模)

别名:范式建模、原子数据仓库、企业信息工厂

这种构建数据仓库的理念是由数据仓库之父Bill Inmon提出的,自上而下建立数据仓库(DW-DM)又称为范式建模,之所以成为范式建模,是因为这种方式构建的数据仓库,信息存储是符合第三范式。关于第三范式的解释,见:概念讲解:数据库第一、二、三范式

数据仓库自上而下和自下而上 数据库自顶向下_建模

数据仓库自上而下和自下而上 数据库自顶向下_数据库_02

按照上述理念,常用的构建方案有以下四个环节:

  1. 底层对接操作性或事务型系统的数据源(OLTP数据库);
  2. 通过ETL工具将数据抽取、转换、加载到数据仓库的ODS层;
  3. 通过ODS的数据建设原子数据的数据仓库DW;
  4. 在DW之上建设多维格式的数据集市。

由于DW里的数据不是多维格式的,不方面直接拿来供上层的应用做数据分析,因此需要通过建设多维格式的数据集市层,数据集市层的数据才有比较好的直接分析价值。

由于DW的数据是原子粒度的,数据量比较大,因此完全规范的第三范式在数据交互的时候效率会比较低下,所以通过会根据实际情况在事实表上做一些冗余,减少过多的数据交互。

1.2 自下而上建立数据仓库(维度建模)

别名:维度建模、维度数据仓库、总线体系结构、结构化数据集市、虚拟数据集市

主流的建设数据仓库的理念其实就两种,一种是上面Bill Inmon提出的,另一种就是Palph Kimball提出的自下而上地建立数据仓库(DM-DW)。

Palph Kimball 极力推崇数据集市,他任务数据仓库是企业内所有数据集市的集合,信息总是被存储在多维模型当中。

数据仓库自上而下和自下而上 数据库自顶向下_数据仓库_03

按照上述理念,常用的构建方案有以下四个环节:

  1. 底层对接操作性或事务型系统的数据源(OLTP数据库);
  2. 通过ETL工具将数据抽取、转换、加载到数据仓库的ODS层;
  3. 通过ODS的数据,利用维度建模方法建设一致维度的数据集市
  4. 通过一致性维度可以将数据集市联系在一起,由所有的数据集市组成数据仓库

可以看出Bill Inmon 的自上而下的理念相比,其实核心差异在:数据仓库和数据集市的建立先后顺序和逻辑关系。

关于维度建模:

  • 维度建模源自数据集市,主要面向分析场景。Palph Kimball 推崇数据集思的集合为数据仓库,同时也提出了对数据集市的维度建模,将数据仓库的表划分为事实表、维度表两种类型。
  • 维度建模是一种面向用户需求的、容易理解的、访问效率高的建模方法。
  • 维度建模通常以星型模式的方式构建,不过有时也会加入一些雪花模型在里面。星型模型和学会模型的概念见:概念讲解:星型模型、雪花模型、星座模型

    数据仓库自上而下和自下而上 数据库自顶向下_建模

2. 两种方式的优劣势

优势

劣势

自上而下建立数据仓库(范式建模)

  1. 数据的整合使得企业对数据有一个真正的企业范围级的观察;
  2. 粒状的数据,可以满足不同分析角色的分析需求,支撑不同方式的分析过程;
  3. 能够从整体上把握数据仓库的规模、粒度的级别和元数据管理,是一种系统的解决方法;
  4. 易于维护,高度集成。
  1. 部署周期较长,投入的资源比较大,导致数据化建设的效果不能立刻展现;
  2. 结构死板,缺乏灵活性,因为整个组织的共同数据模型达到一致是很困难的。

自下而上建立数据仓库(维度建模)

  1. 性能好,通过对各个维的预处理,能够极大地提升数据仓库的处理能力;
  2. 比较直观,不需要经过特别的抽象处理即可完成维度建模,通过紧紧围绕业务模型,可直观地反映出业务模型中的业务问题;
  3. 灵活性,花费低,能够得到快速的投资回报。
  1. 数据孤岛现象。不能保证各个数据集市数据来源的一致性和准确性,可能会出现"孤岛"现象;
  2. 数据抽取负担。当数据集市数量庞大时,抽取原始数据的负担会比较大;
  3. 变更不可传递。当多个数据集市需要做一些相关或类似的变更时,需要在多个数据集市都要做一遍,会增加工作量和出错率;
  4. 缺乏扩展性。当需要建立一个新的数据集市是,可能还要从头建起。

3. 两种方式在什么场景下会被分别选用?

3.1 什么情况下会选择范式建模?

  1. 有公司层面的大量资源投入和部门间协调推进能力,属于公司自上而下发起的数据建设;
  2. 对性能要求没那么高,可以接受查询性能的不足。
  3. 有一些更高层次的要求,例如希望底层数据的一致性,无数据冗余,方便维护等。

3.2 什么情况下选择维度建模?

  1. 追求卓越的性能,希望能够有快速的查询和计算能力;
  2. 希望数据建设项目快速上线,短期内不希望有大量的投入;
  3. 能够接受后续比较高的维护成本,以及维度建模长期发展的一些劣势:数据孤岛、数据抽取负担、变更不可传递、缺乏扩展性的缺点。

参考资料:

  1. 构建数据仓库的方法目前有自顶向下和自底向上两种
  2. 数据仓库的两种建模方法
  3. 【数仓】数据仓库的思考(一)
  4. 第1章 数据仓库简史及第一代数据仓库