我们已经知道,数据仓库中常见的两大建模体系有关系建模和维度建模。现在我们可以了解一下数据仓库中非常重要的内容:数仓分层。
一、数据集市(Data Mart)要理解数仓分层及各层作用,就应该了解一下数据集市的概念。
1、数据集市概念
数据集市也叫数据市场。为某个特殊的专业人员团体服务的数据源中收集数据的仓库。从范围上来说,数仓是从企业范围的,而数据集市是部门范围的。
2、数据集市和数据仓库的主要区别
数据仓库
数据仓库是企业级的,能为整个企业各个部门的运行提供数据支持;
数据集市
则是一种微型的数据仓库,它通常支持更小的数据量,更少的主题区域,以及更少的历史数据,所以适合部门使用。
一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库。
二、数仓分层思想
1、为什么要分层
宏观抽象来说,数仓分层是一套让我们的数据体系更有序的行之有效的数据组织和管理方法。
2、数仓分层带来如下的好处:
每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。
减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。
把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。
通过数据分层,提供统一的数据出口,统一对外输出的数据口径。3、数仓分层的目的
分层就能解决业务上所有的数据问题?
数仓的搭建设计是由关系型业务应用系统到面向主题的数据仓库系统,从范式建模到维度建模的必经之路。
三、数仓分层及各层作用
数仓中常见的层级如下:
1、ODS(Operation Data Store)这层字面意思叫操作型数据存储,存储来自多个业务系统、前端埋点、爬虫获取等的一系列数据源的数据。
有些公司还会把ODS层再细分两层:STG:数据缓冲层,存原始数据;ODS:对STG层简单清洗后的数据。
2、DW(Data Warehouse)数仓主体层从ODS层中获得的数据按照主题建立各种数据模型。又细分为以下几层:2.1、DWD(Data Warehouse Detail)明细粒度事实层:是以业务过程来作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表(注意是最细粒度)。需要结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
ETL(Extract-Transform-Load)
将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程。
目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
2.2、DWS(Data Warehouse Service)
2.3、DWT(Data Warehouse Topic)以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。就是按照维度来决定分析者的角度,如:某用户从注册登录后下了多少订单。
2.4、DIM(Dimension)以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。维度层的表通常也被称为维度逻辑表。
3、ADS(Application Data Store)供给业务使用的数据层,这层是面向业务定制的应用数据层。
4、DM(Data Mart)
数据集市层,上面已经讨论过数据集市的概念,这层就是对不同的主题域,对某个单独业务或者部门专门设立的小型数据集市。
下一篇会精选了几个大厂的数仓分层架构的典型代表,来加深对数仓分层架构的理解、希望对我们设计和构建数仓分层模型,能有所借鉴或启迪。
Q:数仓分几层适合?有没有统一的标准
A: 我们设计数仓分层的时候,要考虑到实体的需要和实际情况来考虑数仓分层及各层作用。如果你负责的仅仅是一个小部门的数据,而公司已经有一个数仓平台了。那么你或许仅需要构建一个你自己的应用层,或者集市层,根本无需分层。如果一般大的公司有公共IT部门,该部门会构建统一数仓,如主数据,如统一交易表,统一埋点或者标准维度表等。当然大一点的事业群或者事业部会构建自己的数仓层,有一些部门特有的业务数据。可以构建简单三层模型即ODS + DW + ADS。