一种通用的数据仓库分层方法

00 概述数据分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更易理解和使用 。而目前网络中大部分可以被检索到相关文章只是简单地提及数据分层的设计,或缺少明确而详细的说明,或缺少可落地实施的方案,或缺少具体的示例说明 。
因此,本文将指出一种通用的数据仓库分层方法,具体包含如下内容:

  1. 介绍数据分层的作用
  2. 提出一种通用的数据分层设计,以及分层设计的原则
  3. 举出具体的例子说明
  4. 提出可落地的实践意见
01 数据分层?“为什么要设计数据分层?”
这应该是数据仓库同学在设计数据分层时首先要被挑战的问题,类似的问题可能会有很多,比如说“为什么要做数据仓库?”、“为什么要做元数据管理?”、“为什么要做数据质量管理?” 。当然,这里我们只聊一下为什么要做设计数据分层 。
作为一名数据的规划者,我们肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到 。直观来讲就是如下的左图这般层次清晰、依赖关系直观 。
但是,大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的 。如下的右图,在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系 。
一种通用的数据仓库分层方法

文章插图
 
因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层 。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:
  1. 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
  2. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
  3. 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
  4. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
02 一种通用的数据分层设计为了满足前面提到数据分层带来的好处,我们将数据模型分为三层:数据运营层( ODS )、数据仓库层(DW)和数据应用层(App) 。如下图所示 。简单来讲,我们可以理解为:**ODS层存放的是接入的原始数据,DW层是存放我们要重点设计的数据仓库中间层数据,APP是面向业务定制的应用数据 。**下面详细介绍这三层的设计 。
一种通用的数据仓库分层方法

文章插图
 
一、数据运营层:ODS(Operational Data Store)“面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层 。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的 。
一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做 。
二、数据仓库层:DW(Data Warehouse)数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型 。DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data WareHouse Middle)层和DWS(Data WareHouse Servce)层 。
1. 数据明细层:DWD(Data Warehouse Detail)
该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证 。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联 。
另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性,后文会举例说明 。
2. 数据中间层:DWM(Data WareHouse Middle)
该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工 。
直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标 。
3. 数据服务层:DWS(Data WareHouse Servce)
又称数据集市或宽表 。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等 。


推荐阅读