数据仓库
1、数据仓库的概念
数据仓库(DW)是一个用于存储、分析、报告的数据系统
2、数据仓库的特点
-
数据仓库是面向主题的
数据仓库中的数据是按照一定的主题域进行组织,一个主题通常与多个操作型信息系列相关
-
数据仓库是集成的
所需数据从原来的分散数据中抽取出数据仓库的核心来,进行加工与集成统一
-
数据仓库是不可更改的
数据仓库主要是为决策分析提供数据,所涉及的操作主要是数据分查询
-
稳定的数据以只读格式保存,且不随时间改变
-
汇总的 将操作性数据映射成课决策可用的格式
-
大容量的 时间序列数据集合通常都非常大
-
非规范化 DW数据可以是而且经常是冗余的
-
元数据 将描述数据的数据保存起来
-
数据源 数据来自内部的和外部分非集成操作系统
3、为什么要设计数据分层?
作为一名数据的规划者,我们肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如下的左图这般层次清晰、依赖关系直观。
但是,大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。如下的右图,在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。
因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:
-
清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
-
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
-
统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
-
复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
4、分层设计
ODS(Operational Data Store):数据运营层
“面向主题的”数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。
一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。
DW(Data Warehouse):数据仓库层
数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。DW层又细分为 DWD(Data Warehouse Detail)层、DWM(Data WareHouse Middle)层和DWS(Data Warehouse Service)层。
-
DWD(Data Warehouse Detail):数据明细层
该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。
-
DWM(Data Warehouse Middle):数据中间层
该层会在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。
-
DWS(Data Warehouse Service):数据服务层
又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。
ADS/APP/DM(Application Data Store/Application/DataMarket):数据应用层/数据集市
在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、PostgreSql、Redis等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。比如我们经常说的报表数据,一般就放在这里。
DIM(Dimension):维表层
维表层主要包含两部分数据:
-
高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
-
低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。