vlambda博客
学习文章列表

4. 数据仓库架构分层(重点)

数据仓库没有固定的分层方式,不过总体的分层方式大致差不多。


数据仓库标准上可以分为四层

  • ODS(临时存储层);

  • DW(PDW)(数据仓库层);

  • DM(数据集市层);

  • APP(应用层)。

        各个系统的元数据通过ETL同步到操作性数据仓库ODS中,对ODS数据进行面向主题域建模形成DW(数据仓库),DM是针对某一个业务领域建立模型,具体用户(决策层)查看DM生成的报表。

  1. 临时存储数据运营层:ODS(Operational Data Store):
    1. ODS层是最接近数据源中数据的一层,数据源各种操作型数据库、外部数据源等)中的数据,经过抽取、洗净、传输,也就说传说中的 ETL(Extract-Transform-Load) 过程汇聚整合成面向主题的、集成的、企业全局的、一致的数据集合(主要是最新的或者最近的细节数据以及可能需要的汇总数据)。
    2. 从数据粒度上来说ODS层的数据粒度是 最细 的。
    3. ODS层的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。历史数据一般保存3-6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存。
    4. 一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。
  2. 数据仓库层:DW(Data Warehouse):
    1. DW为数据仓库层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了 清洗 (去除了杂质)后的数据。
    2. DW层的数据一般是遵循数据库第三范式的,其数据粒度通常和ODS的粒度相同。
    3. DW层会保存BI系统中所有的历史数据,例如保存10年的数据。

DW : Data Warehouse 翻译成数据仓库,DW由下到上分为 DWDDWBDWS

DWD:Warehouse Detail 细节数据层,有的也称为 ODS层,是业务层与数据仓库的隔离层 。

DWB:Data Warehouse Base 基础数据层,存储的是客观数据,一般用作中间层,可以认为是大量指标的数据层。

DWS:Data Warehouse Service 服务数据层,基于DWB上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。

  1. 数据集市层:DM(Data Mart):
    1. DM为数据集市层,这层数据是 面向主题来组织数据 的,通常是 星形 雪花 结构的数据。
    2. 从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了。
    3. 从数据的时间跨度来说,DM层通常是DW层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。
    4. 从数据的广度来说,仍然覆盖了所有业务数据。
  2. 应用层:(APP层)Application层:
    1. 这层数据是完全为了满足具体的分析需求而构建的数据,也是 星形 雪花 结构的数据。
    2. 从数据粒度来说是高度汇总的数据。
    3. 从数据的广度来说,则并不一定会覆盖所有业务数据,而是DM层数据的一个真子集,从某种意义上来说是DM层数据的一个重复。
    4. 从极端情况来说,可以为每一张报表在APP层构建一个模型来支持,达到以空间换时间的目的数据仓库的标准分层只是一个建议性质的标准,实际实施时需要根据实际情况确定数据仓库的分层,不同类型的数据也可能采取不同的分层方法。

问题:为什么要分层?

分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:

  • 清晰数据结构

    每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

  • 数据血缘追踪

    简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

  • 减少重复开发

    规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

  • 把复杂问题简单化

    将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  • 屏蔽原始数据的异常

  • 屏蔽业务的影响,不必改一次业务就需要重新接入数据

  • 空间换时间

    通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。


  • 便于处理业务的变化

  • 随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知.