01
数仓建模综述
数据建模是数据开发工作中的核心与基石,好的模型体系好处很多:
数据建模的实现方式有很多,常用的比如ER模型,Data Vault模型等。目前业界使用最多的模型是Ralph Kimball 在《数据仓库工具》中提出的维度建模模型,其中典型的代表如星型模型,雪花模型。一个典型的维度建模一般需要经过如下几个步骤:
优秀的层次设计可以保证数仓表数量在可控范围内增长,同时保证数据产出流逻辑清晰,便于后期维护和扩展。良好的规范设计规定了统一的命名规则,保证各个业务过程的实体/指标的完备和唯一性。
02
设计原则
按照《大数据之路——阿里巴巴大数据实战》,维度建模应该符合以下几个规范
03
层次设计
腾讯视频数据中心团队把数据模型分成了五层:操作数据层(ODS),主题明细层(DWD),主题聚合层(DWS),应用数据层(ADS),维度数据层(DIM)
数据清洗:过滤日志或者上游中的脏数据 结构化:将数据中的json等非结构化字段结构化处理 保留原始数据:根据业务或者系统要求保留历史切片,方便溯源
复用逻辑:维度退化:宽表化处理,复用关联逻辑
统一公共指标/公共维度:保证公共指标,公共维度的数据一致性,减少因数据来源不一致带来的数据问题
其他团队也有各自的分层方式,例如字节跳动的ODS(操作数据层),DWD(主题明细层),DW(主题聚合层),DM(宽表层),ADS(应用层)。阿里巴巴数据团队把数据模型分为 ODS(操作数据层),DWD(主题明细层),DWS(主题聚合层),ADS(应用层)
04
规范设计
为了保证数仓中同一个业务含义字段命名一致,需要通过某种方式约束/规定字段的命名,以阿里巴巴的命名规范为例。在阿里的数据体系中的每个指标都可以通过如下的规则描述。
从上图可以看出,派生指标由原子指标,修饰词和时间周期组合得到,并且遵循以下几个原则:
ps:对于每一个原子指标,修饰词以及时间周期都需要设定一个词根,常见的命名方式通常为 英文缩写/英文全称/中文缩写,这些词根应该具备较强的可读性,并且在部门内外部有统一的命名方式(通过工具或者文档构建原子指标库/修饰词库)。
05
模型实施
业务调研和架构设计
在构建数仓模型之前首先要分析建模的业务过程,主要包含以下三块工作:
业务调研
业务调研主要从两方面出发:
1. 分析各个业务线/业务模块的异同点,具有相同业务形态的业务应该配置为同一个业务板块。例如字节跳动的抖音,抖音国际版(Tiktok),不难看出两者除了多语言模块以外,其他功能几乎一样。因此在数仓建模的时候应该考虑将两者维护在同一个数据仓库之下,减少重复开发。
功能模块 | 用户 | 视频 | 广告主 | 广告订单 | 跳转页 |
---|---|---|---|---|---|
广告点击 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ⭕️ |
广告转化 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ⭕️ |
广告曝光 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ |
2. 分析业务的分析需求,具有交叉分析需求的业务应该配置为同一个业务板块。数仓服务于数据查询/分析,通过下沉复杂逻辑减少数据查询/分析的代价。对于数仓开发同学来说,理想的数仓开发是业务分析的产品具有完全一致的业务过程,但是产品之间形态千差万别才是常态。这种情况下应该尽量以查询需求为准,抽象共同的业务过程,将不同的业务线融合,统一维护。例如在 字节跳动的商业化部门数仓中,为了分析整个公司收入,会将各个业务线(星图,穿山甲,DOU+,即合等)的收入数据,进行统一维护。当然业务线融合也会在很大程度上提高了数仓开发难度,主要体现在 SLA 维护,维度属性字段产出/维护,指标统一性维护,在介绍事实表建设/维度表建设两章时会详细描述。
产品名称 | 业务类型 |
---|---|
今日头条 | 新闻应用 |
抖音 | 短视频应用 |
火山小视频 | 短视频应用 |
西瓜小视频 | 短视频应用 |
穿山甲 | 联盟广告y应用 |
架构设计
业务过程 | 广告受众 | 广告订单 | 广告位 | 播放视频 | 转化操作 | 广告主 |
---|---|---|---|---|---|---|
广告点击 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ | ⭕️ |
广告曝光 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ | ⭕️ |
广告转化 | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ⭕️ |
规范定义
根据定义的总线架构获得了业务过程中的实体和业务过程,我们可以构建出命名的规范图。例如广告业务的效果域总线架构可以产出如下的规范定义图。
通过上图可以构建出一致性的维度属性和一致性的指标,例如衍生指标最近三天pc平台曝光数 = recent_3_d_pc_exposure。唯一归属在 广告业务——效果域下,其中exposure 原子指标规定了唯一的曝光的口径(例如 广告业务中的曝光为广告海报整体露出大于1/3且持续3秒)和单位(次)
06
维度表建设
维度是分析业务过程中的环境信息,维度表的列值被称为维度属性,维度属性通常被用来作为分析的过滤/排序/聚合条件。因此在分析需求中作为约束条件的字段应该构建成维度属性。
在确定了需要构建的维度实体之后通常按照以下流程设计
除此之外,在设计过程中,开发人员还需要注意以下几个主题:反规范化,维度一致性处理,维度整合和拆分
反规范化
传统的联机事务处理系统(OLTP)通常采用规范化技术来设计数据模型,一种常见的规范化模型是雪花模型,这种模型的优势最大化的减少数据冗余,同时针对更新的数据,雪花模型能够将数据更新操作控制在少数的几个表记录中,从而减少系统更新压力
但是不同于传统的分析事务,在联机分析处理系统(OLAP)中主要面临的业务场景是数据追加数据查询操作,系统中保存的是海量的快照数据,同时根据mr/spark计算引擎可知,数仓系统的性能瓶颈在集中在表JOIN。因此对于维度数据,需要采用反规范化处理,将多个维度属性尽量存放在同一张表内。减少JOIN操作,相应的数据模型被称为星型模型。
维度一致性处理
保持维度一致性是数仓分析需求的前提和基石,数仓分析中的很多需求都是将不同业务领域的业务过程或者同一业务领域下的不同业务过程合并起来分析的,如果存在维度不一致的情况(例如针对同一个广告位,维度一中的枚举是 A,维度二的枚举是B,或者广告客户的行业属性只在业务一中存在,在业务而中不存在)会导致交叉分析失败,通常来说处理维度不一致有以下几个手段:
维度整合和维度拆分
为了保证维度一致性,往往需要将不同的维度表整合成同一份数据,在整合过程中,需要保证命名规范,数据类型,业务含义统一。常用的维度整合方式有如下几种:
除此之外,应该怎么判断哪些维度表是应该整合的呢?通常从以下两个方面去判断
有整合就有拆分,维度拆分通常在以下几种场景中有需求:
07
事实表建设
数仓中使用事实表来描述业务过程,表中的每一条记录代表一个完整的业务过程记录,由描述业务过程环境的维度和描述业务动作的指标组成。按照指标的类型可以将事实表分为事务事实表,周期快照事实表和累计快照事实表
事实表的设计原则
如何设计一个事实表
近期热文
喜欢本文?快点“在看”支持一下
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有