数仓分层实践

离线数仓分层的理论不仅是一种数据仓库的建设思想,对大数据的统计分析过程设计同样具有指导意义。

数仓分层的理论有很多,没有统一的标准,关键是能与自己的业务场景契合。下面所描述的数据分层理论是在现有理论基础上,结合在数据工厂的数据开发经验总结的分层方法。严格的说它不是数仓的分层,而是数据开发过程的分层。

  1. 数据引入层(ODS,Operation Data Store)。构建这一层一般是离线分析的第一步,使用离线同步或实时同步节点,将源系统的某个表同步到数据工厂。这期间不对数据做任何处理,表结构和数据类型上尽可能与源端保持一致。这主要是因为在数据开发过程中,当对最后的统计结果或某些数据处理结果有疑义时,需要倒查流程,反向追溯分析问题。因为数据在通常情况下是不完美的,如果在构建数据引入层过程进行复杂数据过滤、类型转换等处理,很可能会丢失一部分意料之外的特殊数据,造成统计结果和用户预计的产生偏差。追溯问题时,将不得跨出数据工厂,到源端去分析最原始的数据,而在源端分析数据肯定不如直接在数据工厂中分析数据方便。所以这也是要使得构建数据引入层逻辑尽可能简单,保持表结构、类型不变的原因,使得大部分问题追溯分析在数据工厂内就能完成。

  2. 公共数据层(CDM,Common Data Model)。它存储的是公共基础数据,但并不是每一个数据开发流程都会涉及。在一个大的数据分析项目中,它会包含很多的解决方案和流程,在不考虑公共数据层的情况下,会发现有一些表总是需要发生连接、进行相同的过滤、添加某些字段、应用相同的数据字段处理逻辑。这时我们就需要考虑设计公共数据宽表,将处理过程合并成公共流程,供其它流程依赖并使用其构建的表。

  3. 明细数据层(DWD,Data Warehouse Detail)。在通常的理论中,这一层会位于维度层之后。但在我们开发实践的大部分场景下,选择将它和维度层合并,去掉维度层,代之以统计周期层。具体原因和我们的业务场景和统计技术相关,详见“数据工厂开发经验总结”。在此需要特别说明,在一个完整的数据开发过程中,可以多次出现构建明细数据层的过程,汇总层和明细层也不是绝对的,因为有的汇总过程并不是一步就能完成的,而需要阶梯式分步汇总,前一步的汇总会是下一步的明细。

  4. 汇总周期层(SPD,Summary Period Detail)。这一层是在明细的数据层的基础上,抽取每次执行计算所涉及的统计周期内的数据,附加上表示统计周期相关的字段。表示一个统计期,即时间维度,我们通常会用5个字段。

    • time_range_type,统计期范围类型。可取值有:年度、季度、月度、每周、每天等。可以按需扩展更多统计期范围类型。
    • start_time,统计期开始时间。例如当统计期为年度时,2023年度的start_time就是2023-01-01 00:00:00
    • end_time,统计期结束时间。例如当统计期为年度时,2023年度的end_time就是2024-01-01 00:00:00,
    • sts_start_time,事实上的统计开始时间。例如当统计期为年度时,2023年度的sts_start_time就是2023-01-01 00:00:00
    • sts_end_time,事实上的统计结束时间。例如当统计期为年度时,假设当前是2023年7月15号,那么它的sts_end_time就是2023-07-15 00:00:00。因为这通常是离线统计,业务日期为昨天,2023-07-14。而sts_end_time是右开,不包含的,所以是2023-07-15 00:00:00。
      假设需要统计年度、月度和每天这三个统计期,则原先1条数据会扩增成3条。
idtime_range_typestart_timeend_timests_start_timests_end_time
a年度2023-01-01 00:00:002024-01-01 00:00:002023-01-01 00:00:002023-08-05 00:00:00
a月度2023-08-01 00:00:002023-09-01 00:00:002023-08-01 00:00:002023-08-05 00:00:00
a每天2023-08-04 00:00:002023-08-05 00:00:002023-08-04 00:00:002023-08-05 00:00:00
  1. 汇总层(DWS,Data Warehouse Summary)。这一层存储的是基于指标/维度需求构建出的汇总结果数据。
  2. 应用数据层(ADS,Application Data Store)。这一层是基于汇总层的数据,根据应用的个性化展示需要构建出的数据层。在有数据服务的情形下,这一层可以用“汇总层+数据服务API”的形式替代。

如果是使用我们的大数据平台(XSailboat)或者阿里云的DataWorks的业务流程进行数据开发,那么业务流程DAG图,将总体上呈现如下图所示的哑铃结构(两头粗,中间细,收腰处偏向上游流程)。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值