维度建模和指标体系构建

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

维度建模和指标体系构建

01数仓建模综述

数据建模是数据开发工作中的核心与基石,好的模型体系好处很多:

•降低成本:优秀的模型设计能够提升数据复用性,减少计算/存储资源浪费

•提升开发效率:优秀的模型设计能够降低数据使用门槛,减少工作量

•提升质量:优秀的模型设计能够保证数据口径一致,降低bug率数据建模的实现方式有很多,常用的比如ER模型,Data Vault模型等。目前业界使用最多的模型是Ralph Kimball 在《数据仓库工具》中提出的维度建模模型,其中典型的代表如星型模型,雪花模型。一个典型的维度建模一般需要经过如下几个步骤:

1.业务调研:调研需要建模的业务形态,划分基本的业务线/数据域

2.层次设计:定义数仓层级,保证各层级之间职责明确,划分清晰

3.规范设计:定义数仓中表/字段的命名规范,建立统一的指标体系

4.事实表设计:根据单一/复合业务过程确定事实表主题,确定最小

粒度

5.维度表设计:根据业务确定实体,补充实体属性字段

优秀的层次设计可以保证数仓表数量在可控范围内增长,同时保证数据产出流逻辑清晰,便于后期维护和扩展。良好的规范设计规定了统一的命名规则,保证各个业务过程的实体/指标的完备和唯一性。

02设计原则

按照《大数据之路——阿里巴巴大数据实战》,维度建模应该符合以下几个规范

1.高内聚,低耦合:从业务流程和数据访问特性两个角度考虑,针

对业务粒度相近,业务流程相近的数据应该放在同一个表中(例如广告数仓中通常会把广告的点击/曝光/转化多个业务过程数据放在同一个宽表中),针对经常要在同一个场景下访问的数据,也应该放在同一个表内。

2.公共处理逻辑下沉和单一:公用的逻辑应该封装在底层表中,避

免公用逻辑直接暴露给上层,同一个公共逻辑需要收敛,避免在多个地方同时存在

3.适当冗余:考虑到mr/rdd计算框架下join运算的资源损耗,可

以通过适当冗余字段处理减少join操作

4.命名一致/可理解:同一个业务含义的字段命名必须相同,且直观

可读。

03层次设计

腾讯视频数据中心团队把数据模型分成了五层:操作数据层(ODS),

主题明细层(DWD),主题聚合层(DWS),应用数据层(ADS),维度数据层(DIM)

•操作数据层(ODS):最接近数据源的一层,主要负责以下工作:数据清洗:过滤日志或者上游中的脏数据

结构化:将数据中的json等非结构化字段结构化处理

保留原始数据:根据业务或者系统要求保留历史切片,方便溯源

•主题明细层(DWD)/主题聚合层(DWS): 采用维度退化的方法将维度指标退化到事实表中,减少下游维度表和事实表的关联,同时在DWS层采用更多的宽表化操作构建公共指标,提高指标复用性,主题层通常是数仓中的核心数据层,主要工作如下:

复用逻辑:维度退化:宽表化处理,复用关联逻辑

统一公共指标/公共维度:保证公共指标,公共维度的数据一致性,减少因数据来源不一致带来的数据问题

•应用数据层(ADS):面向分析和产品的数据层,灵活多变,数据会存储到多种查询引擎,常见的如HIVE,mysql,es等中便与业务使用,降低查询门槛,提高应用中的查询响应速度

•维度数据层(DIM):贯穿数据模型各个层次,保留业务过程中的实体信息,用来关联事实表将数据宽表化

其他团队也有各自的分层方式,例如字节跳动的ODS(操作数据层),DWD(主题明细层),DW(主题聚合层),DM(宽表层),ADS(应

用层)。阿里巴巴数据团队把数据模型分为 ODS(操作数据层),DWD(主题明细层),DWS(主题聚合层),ADS(应用层)

04规范设计

为了保证数仓中同一个业务含义字段命名一致,需要通过某种方式约束/规定字段的命名,以阿里巴巴的命名规范为例。在阿里的数据体系中的每个指标都可以通过如下的规则描述。

•业务板块:业务形态差距较大的多个业务可以通过业务板块来区分,例如广告业务和电商业务属于两个业务板块

•时间周期:时间粒度,常见的如每天,每月,每个季度

•数据域:多个业务过程的抽象,例如广告效果相关业务可以整合成一个数据域(点击/曝光/展示),电商行业的交易业务可以整合成一个数据域(下单/成交/退款)

•修饰类型:一系列修饰词的集合,比如终端类型

•修饰词:除了维度以外的对指标的限定,比如移动端的广告点击,这里的移动端就是修饰词

•业务过程:业务中的一个原子的业务行为,特点是不可拆分,比如点击广告这个业务行为

•原子指标:业务过程下某一个行为的度量,特点是不可拆分,比如广告点击量,每个原子指标有确定的数据类型,算法说明以及命名•维度:维度是用来描述业务过程中的环境(参与方)集合,比如广告点击这个业务行为中的维度有用户,广告订单,广告位,广告所处的页面等

•属性:属性是用来描述维度的内容,比如用户的名称,用户的性别,用户的年龄等。

•派生指标:通过一个派生指标描述业务过程,派生指标 =1个原子指标+n个修饰词(n>=0,也可以没有,全部通过维度来描述)+时间周期,例如移动端最近3天的广告点击量 = 点击量(原子指标)+ 移动端(修饰词)+3天(时间周期) = yidong_r3d_click

从上图可以看出,派生指标由原子指标,修饰词和时间周期组合得到,并且遵循以下几个原则:

1.原子指标,修饰词归属到某一个数据域下

2.派生指标只能完全归属到同一个原子指标下面,相应的也会继承

对应原子指标的数据域,数据类型,算法说明

3.派生指标可以由多个修饰词共同修饰,不同修饰词之间的逻辑关

系是/或/否

ps:对于每一个原子指标,修饰词以及时间周期都需要设定一个词根,常见的命名方式通常为英文缩写/英文全称/中文缩写,这些词根应该具备较强的可读性,并且在部门内外部有统一的命名方式(通过工具或者文档构建原子指标库/修饰词库)。

05模型实施

业务调研和架构设计

在构建数仓模型之前首先要分析建模的业务过程,主要包含以下三块工作:

1.调研业务场景和数据需求,划分业务板块和数据域

2.设计数仓架构:构建总线矩阵,抽象数据域下的业务过程和维度

主体,构建总线矩阵

3.根据数据需求整理指标体系,规范指标定义和命名

相关文档
最新文档