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

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

内容整理自:

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

数仓分层的意义

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

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

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

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

屏蔽原始数据的异常。

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

四层模型

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 中供数据分析和数据挖掘使用

三层模型

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

Buffer 数据缓存层

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