数仓系列-数据仓库分层实现

内容整理自:

  1. 《基于大数据的数据仓库分层实现》

数仓分层的意义

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

  • 数据血缘追踪:简单来讲可以这样理解,我们最终给业务呈现的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

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

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

  • 屏蔽原始数据的异常。

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

四层模型

image.png

ODS层

ODS(Operational Data Store)操作数据存储

是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说经过ETL之后,装入本层;一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。从数据粒度上来说ODS层的数据粒度是最细的。

ODS层的表通常包括两类

  • 一个用于存储当前需要加载的数据
  • 一个用于存储处理完后的历史数据

历史数据一般保存3-6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存

数据在装入本层前需要做以下工作:

  • 去噪(例如去掉明显偏离正常水平的银行刷卡信息)

  • 去重(例如银行账户信息、公安局人口信息中均含有人的姓名,但是只保留一份即可)

  • 提脏(例如有的人的银行卡被盗刷,在十分钟内同时有两笔分别在中国和日本的刷卡信息,这便是脏数据)

  • 业务提取

  • 单位统一

  • 砍字段(例如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)

  • 业务判别

DW

数据仓库层(DW),是数据仓库的主体

通常按照主题建立各种数据模型,如:星形或雪花结构等;

有关维度建模的方法及星型、雪花模型等请参考: 浅谈数据仓库建设中的数据建模方法

DM层

数据集市层(DM)date market,又称DWS, data warehouse service或主题层,存放的是轻度聚合的数据。

通常根据业务需求,划分成流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。

从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了。从数据的时间跨度来说,通常是DW层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。从数据的广度来说,仍然覆盖了所有业务数据

APP层

数据产品层(APP),这一层是提供为数据产品使用的结果数据。

从数据粒度来说是高度汇总的数据。从数据的广度来说,则并不一定会覆盖所有业务数据。从极端情况来说,可以为每一张报表在APP层构建一个模型来支持,达到以空间换时间的目的。

应用层是根据业务需要,由前面三层数据统计而出的结果,可以直接提供查询展现,或导入至Mysql中使用。我们经常说的报表数据,或者说那种大宽表,一般就放在这里

需要一个管理元数据信息的系统,能够提供方便的元数据的操作和查询操作。主要是提供给数据产品和数据分析使用的数据,一般会存放在es、mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用

三层模型

image.png

与四层模型类似,只是把更多逻辑放在了DW层里

Buffer数据缓存层

用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。