老姜: 小白,通过3.1节的学习,对数据仓库是否有了一个初步的认知呢?
小白: 嗯嗯,比之前清晰多了。
老姜: 那就好,本节带你了解一下数据仓库的内部结构,分哪些层级进行存储。作为数据分析师,这方面是需要了解的。
小白: 好的,不过,数据仓库为什么还要分层呢?
老姜: 前面我们提到过,数据仓库就像是一个商品加工厂,从原材料的引入,到商品完成包装出货,其中会有很多环节。原材料需要经过加工、组装、打磨等一系列操作,每一步完成后,都要将半成品存储在对应的区域当中。数据仓库也具有同样的特性,将不同加工程度的数据,存储于指定层级当中,便于整体仓库的管理。
小白: 嗯嗯,明白了,那需要您给我讲一讲数据仓库分层的设计方案。
老姜: 没问题,那我们就开始吧。
在构建数据仓库的过程中,需要根据数据的流转阶段以及数据颗粒度进行层级划分,虽然不同企业在分层技术手段上会有所差异,但整体思路基本一致。
分层的目的,一方面便于数据的管理,另一方面是对整体架构的把控。如同加工工厂,对处于流程中的过程产物,需要分门别类进行存储,便于管理及应用。细化下来,分层的意义主要体现在以下几项上。
意义1:明确数据结构。 各层级数据内容均有其应用方向及侧重点,便于理解。
意义2:简化数据问题。 将复杂任务解耦,每一层只处理特定方向内容,在数据出现偏差时,更容易定位问题。同时,修复的成本也更低。
意义3:减少重复开发。 通过规范设计,开发通用的中间层数据,减少数据冗余及重复计算等问题。
意义4:统一数据口径。 通过数据分层,可以保障数据出口的统一,维持对外数据的一致性。
意义5:追踪数据血缘。 数据表的上下游,我们称作血缘关系。通过数据分层,可以将数据关系规范化,当数据出现问题时,可以通过血缘追溯,快速定位问题。
由此可见,数据仓库分层处理是至关重要的,那么,我们又要如何分层呢?
数据仓库由下至上大体可划分为三层,分别为数据接入层、数据仓库层、数据应用层。在此基础之上,会涵盖更为细分的层级,以满足不同类型的业务需求,如图3-6所示。
图3-6 数据仓库层级
ODS(Operate Data Store,数据准备)作为数据仓库的首个环节,将系统采集的源头数据原封不动地存储一份,作为下游数据处理的“原材料”。原始数据的来源,一般涵盖业务数据库、产品埋点数据、第三方数据及其他数据等。
ODS层设计原则主要包括:
· 数据不做清理及转化,与原始数据格式保持一致。
· 数据存储表多为增量表。
· 数据存储时间由业务需求决定,存储生命周期一般在6个月以内。
DWD(Data Warehouse Detail,数据明细)是为了方便对原始字段进行扩充,往往会将扩展信息汇总成一个JSON格式字段。而DWD层数据表可以根据下游需要,将原始数据进行解析,例如将JSON字段中的部分Key解析出来,作为新的字段。虽然DWD层数据表仍然为明细数据,但整体的清晰度及可用度远远高于ODS层。同时,针对明细数据多表合并、数据清洗、离线反作弊打标等操作,也常常在该层实施。
DWD层设计原则主要包括:
· 数据粒度同ODS层一样,仍然为明细数据。
· 为满足数据的查阅与回溯,往往会在表中增加日期、时等分区字段。
· 核心表的数据存储时间往往同业务年龄一致,用于记录业务完整的成长轨迹,存储生命周期一般较长。
DWS(Data Warehouse Service,数据汇总)可以根据业务主题域,基于DWD层数据汇总生成聚合粒度表,例如用户粒度、“用户+行为粒度”等。
DWS层设计原则主要包括:
· 根据业务设计聚合维度,输出聚合粒度数据。
· 数据仅做汇总操作,一般不做数据的删除操作。
· 数据存储时间由业务需求决定,存储生命周期一般相对较长。
DIM(Dimension,维度)指基于维度建模思想产出的数据表,一般只涵盖某个方面的维度信息。例如,用户信息表(用户画像表)、商品信息表等。
DIM层设计原则主要包括:
· 基于某方面属性而创建的表。
· 一般采用宽表形式进行存储。
· 各分区一般存放该方向的全量维度数据,而非增量表。
· 鉴于量级原因,存储生命周期一般相对较短。
TMP(Temporary,即时查询)用于存放临时产出的数据,一般用完即处理。
TMP层设计原则主要包括:
· 因为是临时数据,所以数据存储周期很短,一般为7日内,以避免浪费资源。
ADS(Application Data,数据应用)指基于数据仓库层数据,根据业务查询需求,生成的面向主题域的服务数据。该层的数据表,主要供数据产品及数据分析应用使用,另外,该层的数据内容,很多情况下也是由数据分析师自行创建的。
ADS层设计原则主要包括:
· 由于数据面向应用层,因此倾向于聚合数据。
· 维度、指标,根据业务诉求而设定,满足少量够用原则。
· 数据存储时间由业务需求决定,存储生命周期一般在3个月以内,不宜过长。
希望本节的学习,可以帮助你更为深入地了解数据仓库的层次结构,并在日常工作中,规范数据仓库建设,设计更为合理的数据仓库体系。