首页 > BigData > 大数据之数仓分层
2021
05-30

大数据之数仓分层

 

概述

我们建议将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。

数据仓库的分层和各层级用途如下图所示。

大数据之数仓分层 - 第1张  | 技术人生

  • 数据引入层ODS(Operation Data Store):存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。主要完成基础数据引入到MaxCompute的职责,同时记录基础数据的历史变化。
  • 数据公共层CDM(Common Data Model,又称通用数据模型层),包括DIM维度表、DWD和DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
    • 公共维度层(DIM):基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。

公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。

  • 公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。

公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。

  • 明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。

明细粒度事实层的表通常也被称为逻辑事实表。

  • 数据应用层ADS(Application Data Service):存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成。

该数据分类架构在ODS层分为三部分:数据准备区、离线数据和准实时数据区。整体数据分类架构如下图所示。

大数据之数仓分层 - 第2张  | 技术人生

在本教程中,从交易数据系统的数据经过DataWorks数据集成,同步到数据仓库的ODS层。经过数据开发形成事实宽表后,再以商品、地域等为维度进行公共汇总。

整体的数据流向如下图所示。其中,ODS层到DIM层的ETL(萃取(Extract)、转置(Transform)及加载(Load))处理是在MaxCompute中进行的,处理完成后会同步到所有存储系统。ODS层和DWD层会放在数据中间件中,供下游订阅使用。而DWS层和ADS层的数据通常会落地到在线存储系统中,下游通过接口调用的形式使用。

 

大数据之数仓分层 - 第3张  | 技术人生

 

数据分层的作用

我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是数据分层。数据分层的好处有

①,清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解

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

③,统一数据口径:通过数据分层提供统一的数据出口,同意对外输出的数据口径

④,复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题

002,分层设计的原则以及介绍一种通用的数据分层设计

一般情况下,将数据模型分为3层

①,数据运营层ODS:存放的是接入的原始数据。经过ETL之后装入本层,大多是按照源头业务系统的分类方式而分类的。为了考虑后续可能追溯数据为题,因此对这一层不建议做过多的数据清洗工作,原封不动接入源数据即可,至于数据的去噪,去重,异常值处理等过程可以放在后面的DW层

②,数据仓库层DW:重点设计的数据仓库中间层数据,在这里ODS层获得的数据按照主题建立各种数据模型,DW又细分

Ⅰ,数据明细层:DWD(Data WareHouse Detail)

该层一般保持和ODS层一样的数据粒度,并且提供给一定的数据质量保证。同时为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化到事实表中,减少事实表和维度表的关联。另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性

Ⅱ,数据中间层:DWM(Data WareHouse Middle)

在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表提升公共指标的复用性,减少重复加工,直观来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标

Ⅲ,数据服务层:DWS(Data WareHouse Service)

又称为数据集市或者宽表,按照业务划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,OLAP分析,数据分析等。

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

一般采用维度模型方法作为理论基础,更多的采用一些维度退化手法,将维度退化至事实表中,减少维度表与事实表的关联,提高明细数据表的易用性;同时在汇总数据层要加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工

例如:

表1:

姓名,城市,年龄

表2:

姓名,订单,订单金额

退化成宽表:

姓名,城市,年龄,订单,订单金额

维度退化感觉就是把维度对应的描述直接放在事实表中,使用时不再关联维度表,把表做宽,查询更方便

③,数据应用层APP:面向业务定制的应用数据

主要提供给数据铲平和数据分析使用的数据,一般会放在ES,MYSQL,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用

④,维表层 Dimension

最后补充一个维表层

1,高基数维度数据:一般是用户资料表,商品资料表类似的资料表。数据量可能是千万级或者上亿级别

2,低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万

 

 大数据之数仓分层 - 第4张  | 技术人生

 

具体案例

电商网站的用户访问日志:

1,在ODS层中,由于各端的开发团队不同或者其他问题,用户的访问日志被分成了好几张表,上报到ODS层中

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

3,在DWM层,从DWD层中选取业务关注的核心维度来做聚合操作,比如只保留人、商品、和页面区域维度。类似的 需要做很多歌DWM的中间表

4,然后再DWS层,将一个人在整个网站中的行为数据放到一张表中,这就是我们的大宽表。可以快速满足大部分的通用型业务需求

5,最后在APP层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可

 

大数据之数仓分层 - 第5张  | 技术人生

 

落地实现

1,DataSouce:数据源一般是公司的业务数据库和埋点数据,当然也有可能是第三方购买数据等多种数据来源方式,一般是mysql

2, ODS:数据量很大,大多数公司选择放在HDFS上,HIVE或者hbase,HIVE居多

3,DW:与ODS存储一致

4,APP:应用层的数据,要求响应快:放在mysql中

思考

数据分层的原则是什么?为什么这样分?每层的界限是什么?

1,从对应用的支持来说,越靠上的层次,对应用越友好。比如APP层,基本是完全为应用设计。DWS层的话,相对来讲就会有一点点理解成本,然后DWM和DWD层就比较难理解了,因为它的维度可能比较多,而且一个需求可能要多张表经过很复杂的计算才能完成

2,从能力范围上来讲,我们希望80%的数据可以由20%的表来支持

3,从数据聚合程度来讲,越上层的聚合程度越高

最后编辑:
作者:sunny5156
喜欢技术....

留下一个回复