作为一名数据的方案者,我们肯定希望自己的数据能够有秩序地流转,数据的全体生命周期能够清晰明确被设计者和利用者感知到。
直不雅观来讲便是如图这般层次清晰、依赖关系直不雅观。

但是,大多数情形下,我们完成的数据体系却是依赖繁芜、层级混乱的。
如下图,在不知不觉的情形下,我们可能会做出一套表依赖构造混乱,乃至涌现循环依赖的数据体系。

仓库分层建筑设计讲授 施工技术

因此,我们须要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这便是谈到的数据分层。
数据分层并不能办理所有的数据问题,但是,数据分层却可以给我们带来如下的好处:

1)清晰数据构造:每一个数据分层都有它的浸染域和职责,在利用表的时候能更方便地定位和理解;2)减少重复开拓:规范数据分层,开拓一些通用的中间层数据,能够减少极大的重复打算;3)统一数据口径:通过数据分层,供应统一的数据出口,统一对外输出的数据口径;4)繁芜问题大略化:将一个繁芜的任务分解成多个步骤来完成,每一层办理特定的问题。

为了知足前面提到好处,常日将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据运用层(APP)。
大略来讲,我们可以理解为:ODS层存放的是接入的原始数据,DW层是存放我们要重点设计的数据仓库中间层数据,APP是面向业务定制的运用数据。
下面详细先容这三层的设计。

(2)数据模型的分层

1)源数据层(ODS)此层数据无任何变动,直接沿用外围系统数据构造和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

2)数据仓库层(DW)也称为细节层,DW 层的数据该当是同等的、准确的、干净的数据,即对源系统数据进行了洗濯(去除了杂质)后的数据。

此层可以细分为三层:明细层DWD(Data Warehouse Detail):存储明细数据,此数据是最细粒度的事实数据。
该层一样平常保持和ODS层一样的数据粒度,并且供应一定的数据质量担保。
同时,为了提高数据明细层的易用性,该层会采取一些维度退化手腕,将维度退化至事实表中,减少事实表和维表的关联。

中间层DWM(Data WareHouse Middle):存储中间数据,为数据统计须要创建的中间表数据,此数据一样平常是对多个维度的聚合数据,此层数据常日来源于DWD层的数据。

业务层DWS(Data WareHouse Service):存储宽表数据,此层数据是针对某个业务领域的聚合数据,业务层的数据常日来源与此层,为什么叫宽表,紧张是为了业务层的须要在这一层将业务干系的所有数据统一搜集起来进行存储,方便业务层获取。
此层数据常日来源与DWD和DWM层的数据。

在实际打算中,如果直接从DWD或者ODS打算出宽表的统计指标,会存在打算量太大并且维度太少的问题,因此一样平常的做法是,在DWM层先打算出多个小的中间表,然后再拼接成一张DWS的宽表。
由于宽和窄的界线不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。

3)数据运用层(DA 或 APP)前端运用直接读取的数据源;根据报表、专题剖析的需求而打算天生的数据。

4)维表层(Dimension)末了补充一个维表层,维表层紧张包含两部分数据:A)高基数维度数据:一样平常是用户资料表、商品资料表类似的资料表。
数据量可能是千万级或者上亿级别。
B)低基数维度数据:一样平常是配置表,比如列举值对应的中文含义,或者日期维表。
数据量可能是个位数或者几千几万。

(3)问题扩展数据仓库系统架构

上图系统各部分的实行流程是:1)确定剖析所依赖的源数据。
2)通过ETL将源数据采集到数据仓库。
3)数据按照数据仓库供应的主题构造进行存储。
4)根据各部门的业务剖析哀求创建数据集市(数据仓库的子集)。
5)决策剖析、报表等运用系统从数据仓库查询数据、剖析数据。
6)用户通过运用系统查询剖析结果、报表。

(4)结合项目中利用

电商网站的数据体系设计,这里针对用户访问日志这一部分数据进行举例解释:

在ODS层中,由于各真个开拓团队不同或者各种其它问题,用户的访问日志被分成了好几张表上报到了我们的ODS层。

为了方便大家的利用,我们在DWD层做了一张用户访问行为天表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,提升数据质量,这样就有了一张可供大家方便利用的明细表了。

在DWM层,我们会从DWD层中选取业务关注的核心维度来做聚合操作,比如只保留人、商品、设备和页面区域维度。
类似的,我们这样做很多个DWM的中间表。

然后在DWS层,我们将一个人在全体网站中的行为数据放到一张表中,这便是我们的宽表了,有了这张表,就可以快速知足大部分的通用型业务需求了。
末了,在APP运用层,根据需求从DWS层的一张或者多张表取出数据拼接成一张运用表即可。