目录
数仓如何分层
分层实现
数据仓库一般分为三层,自下而上为:数据接入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。
1)ODS层
存放未经处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。
2)CDM层
数据公共层CDM(Common Data Model,又称通用数据模型层),包括DIM维度表、DWD和DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
- 公共维度层(DIM):基于维度建模理念思想,建立企业一致性维度,降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。
- 明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
- 公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。
3)ADS层
数据应用层ADS(Application Data Service):面向业务需求定制开发,存放数据产品个性化的统计指标数据。
数仓分层的好处
- 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
- 数据血缘追踪:如果有一张表出问题了,能够快速准确地定位到问题,并清楚它的危害范围。
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 数据安全和权限控制:可以根据层次进行数据权限的控制,不同层次的用户只能访问其所属层次的数据,保证数据的安全性和保密性。
数仓层次调用规范
ADS应用层优先调用数据仓库公共层数据。如果已经存在CDM层数据,不允许ADS应用层跨过CDM中间层从ODS层重复加工数据。CDM中间层应该积极了解应用层数据的建设需求,将公用的数据沉淀到公共层,为其他数据层次提供数据服务。同时,ADS应用层也需积极配合CDM中间层进行持续的数据公共建设的改造。避免出现过度的ODS层引用、不合理的数据复制和子集合冗余。总体遵循的层次调用原则如下:
- ODS层数据不能直接被应用层任务引用。如果中间层没有沉淀的ODS层数据,则通过CDM层的视图访问。CDM层视图必须使用调度程序进行封装,保持视图的可维护性与可管理性。
- CDM层任务的深度不宜过大(建议不超过10层)。
- 一个计算刷新任务只允许一个输出表,特殊情况除外。
- 如果多个任务刷新输出一个表(不同任务插入不同的分区),需要建立一个虚拟任务,依赖多个任务的刷新和输出。通常,下游应该依赖此虚拟任务。
- CDM汇总层优先调用CDM明细层,可累加指标计算。CDM汇总层尽量优先调用已经产出的粗粒度汇总层,避免大量汇总层数据直接从海量的明细数据层中计算得出。
- CDM明细层累计快照事实表优先调用CDM事务型事实表,保持数据的一致性产出。
- 有针对性地建设CDM公共汇总层,避免应用层过度引用和依赖CDM层明细数据。
主题域如何划分
数据仓库是面向主题(数据综合、归类并进行分析利用)的应用。数据仓库模型设计除横向的分层外,通常也需要根据业务情况纵向划分数据域。数据域是联系较为紧密的数据主题的集合,是业务对象高度概括的概念,目的是便于管理和应用数据。
1)通过阅读各源系统的设计文档、数据字典和数据模型,研究逆向导出的物理数据模型。进而,可以进行跨源的主题域合并,跨源梳理出整个企业的数据域。
2)数据域是指面向业务分析,将业务过程或者维度进行抽象的集合。为保障整个体系的生命力,数据域需要抽象提炼,并长期维护更新。在划分数据域时,既能涵盖当前所有的业务需求,又能让新业务在进入时可以被包含进已有的数据域或扩展新的数据域。数据域的划分工作可以在业务调研之后进行,需要分析各个业务模块中有哪些业务活动。
3)数据域可以按照用户企业的部门划分,也可以按照业务过程或者业务板块中的功能模块进行划分。例如A公司电商营销业务板块可以划分为如下数据域,数据域中每一部分都是实际业务过程经过归纳抽象之后得出的。
数据域 | 业务过程 |
会员店铺域 | 注册、登录、装修、开店、关店 |
商品域 | 发布、上架、下架、重发 |
日志域 | 曝光、浏览、单击 |
交易域 | 下单、支付、发货、确认收货 |
服务域 | 商品收藏、拜访、培训、优惠券领用 |
采购域 | 商品采购、供应链管理 |
如何评价数仓搭建的好坏
数仓建模是数据仓库很关键的一步,需要通过建模的方法更好的组织、存储数据,以便于在性能、成本、效率和数据质量之间找到最佳平衡点,其主要关系到以下4点:
- 访问性能:能够快速查询所需的数据,减少数据I/O
- 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的存储成本和计算成本
- 使用效率:改善用户应用体验,提高使用数据的效率
- 数据质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台
所以,数仓建模如果做得好能够大大的提高后续工作的效率、便利性等等,判断数仓建模好坏主要根据以下5点原因:
- 业务方取数据是否方便,包括指标、维度信息等
- 发现数据计算错误时,是否能清晰定位该逻辑对整个流程的影响
- 新业务进来时 ,是否能合并进现有层级
- 仓库层级数据计算中,是否完美运行并且保证批处理时效性
- 层级模型是否完整,中间表是否比较少,是否存在多层甚至多个跨层调用