上一节我们了解了数仓中常见的两大建模体系:关系建模和维度建模,并论述了维度建模的4个步骤。

数仓(二)关系建模和维度建模

数仓(三)简析阿里、美团、网易、恒丰银行、马蜂窝5家数仓分层架构

其实数仓建模中还有些其他建模体系:

像DataVault、Anchor模型,这两个模型感兴趣的可以自己查些资料。

这一篇我们来学习一下数仓中非常重要的内容:数仓的分层架构体系。

一、数据集市(Data Mart)

在学习数仓架构体系之前,我们还需要了解一下数据集市的概念。

1、数据集市概念

数据集市也叫数据市场。为某个特殊的专业人员团体服务的数据源中收集数据的仓库。从范围上来说,数仓是从企业范围的,而数据集市是部门范围的。

3da73d0782a7b2335aa9939a707ea219.png

2、数据集市和数据仓库的主要区别

数据仓库

是企业级的,能为整个企业各个部门的运行提供决策支持手段;

数据集市

则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的。

一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库

二、数仓分层思想

1、为什么要分层

  • 通过分层管理来实现分步完成工作,

  • 用空间换时间,通过数据预处理提高效率,提升应用系统的用户体验(效率),简化数据清洗的过程,使每一层处理逻辑变得更简单。

  • 每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性;

  • 当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

宏观抽象来说,数仓分层是一套让我们的数据体系更有序的行之有效的数据组织和管理方法。

2、数仓分层带来如下的好处:

  • 数据结构化更清晰

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

  • 数据血缘追踪

提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。

  • 增强数据复用能力

减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。

  • 简化复杂的问题

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

  • 减少业务的影响

业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。

  • 统一数据口径

通过数据分层,提供统一的数据出口,统一对外输出的数据口径。

3、数仓分层的目的

分层就能解决业务上所有的数据问题?

  • 数仓分层尽管给数仓带来了很多好处,但它不是银弹,不能解决所有的数据问题;

  • 并且没有绝对标准的数仓。不同的公司针对不同的业务搭建数仓的设计模型和分层一般也不一样。

  • 数仓分层要结合当下企业的的技术以及当前的业务的数据量,业务的复杂度等通盘考量。

数仓的搭建设计是由关系型在线交易系统到面向主题的数据仓库系统,从范式建模到维度建模的必经之路。

三、数仓中常见的层级

数仓中常见的层级如下:

b604abcc29a08f94c36a69dc1267443a.png

1、ODS(Operation Data Store)

这层字面意思叫操作型数据存储,存储来自多个业务系统、前端埋点、爬虫获取等的一系列数据源的数据。

  • 又叫“贴源层”,这层保持数据原貌不做任何修改,保留历史数据,储存起到备份数据的作用。

  • 数据一般采用lzo、Snappy、parquet等压缩格式,减少磁盘存储空间(例如:原始数据 10G,根据算法可以压缩到 1G 左 右)。

  • 创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。

有些公司还会把ODS层再细分两层:

STG:数据缓冲层,存原始数据;

ODS:对STG层简单清洗后的数据。

2、DW(Data Warehouse)

数仓主体层从ODS层中获得的数据按照主题建立各种数据模型。

又细分为以下几层:

2.1、DWD(Data Warehouse Detail)

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

31345256695d71fa99de5bcb7bd53c46.png

  • ODS到DWD层,需要对数据进行清洗做ETL操作(ETL是英文Extract-Transform-Load的缩写)。

ETL(Extract-Transform-Load

将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。

目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

  • 主要的数据处理是:去空值、去极值(比方取款300亿)、去业务极值、部分数据脱敏、维度退化等即对业务数据传过来的表进行维度退化和降维(如:商品一级二级、省市县、年月日等)。

2.2、DWS(Data Warehouse Service)

  • 使轻度汇总层,从ODS层中对用户的行为做一个初步的汇总,抽象出来一些通用的维度:时间、ip、id,并根据这些维度做一些统计值。

  • 这里做轻度的汇总会让以后的计算更加的高效,如:统计各个主题对象计算7天、30天、90天的行为, 应对特殊需求(例如,购买行为,统计商品复购率)会快很多不必走ODS层反复拿数据做加工。

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

  • 服务于 DWT 层的主题宽表,以及一些业务明细数据。

2.3、DWT(Data Warehouse Topic)

以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。就是按照维度来决定分析者的角度,如:某用户从注册登录后下了多少订单。

2.4、DIM(Dimension)

以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。维度层的表通常也被称为维度逻辑表。

  • 高基数维度数据

    一般是用户资料表、商品资料表等类似的资料表。数据量可能是千万级或者上亿级别。

  • 低基数维度数据

    一般是配置表,比如枚举值对应的中文含义,比如国家、城市、县市、街道等维表。数据量可能是个位数或者几千几万。

3、ADS(Application Data Store)

供给业务使用的数据层,这层是面向业务定制的应用数据层。

  • 这一层是提供为数据产品使用的结果数据。

  • 在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 、kill中供数据分析和数据挖掘使用。如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

4、DM(Data Mart)

数据集市层,上面已经讨论过数据集市的概念,这层就是对不同的主题域,对某个单独业务或者部门专门设立的小型数据集市。

下一篇会精选了几个大厂的数仓分层架构的典型代表,来加深对数仓分层架构的理解、希望对我们设计和构建数仓分层模型,能有所借鉴或启迪。

参考书籍:

  1. 数据仓库第4版

  2. 数据仓库工具

  3. DAMA数据管理知识体系指南

  4. 华为数据之道


>>>>

Q&A

Q:数仓分几层适合?有没有统一的标准

A: 我们设计数仓分层的时候,要考虑到公司或者部门的实际需要来对数仓分层。如果你负责的仅仅是一个小部门的数据,而公司已经有一个数仓平台了。那么你或许仅需要构建一个你自己的应用层,或者集市层,根本无需分层。

如果一般大的公司有公共IT部门,该部门会构建统一数仓,如主数据,如统一交易表,统一埋点或者标准维度表等。当然大一点的事业群或者事业部会构建自己的数仓层,有一些部门特有的业务数据。可以构建简单三层模型即ODS + DW + ADS。

da83ea28014f3d6fad70308a7dd8c321.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐