维度模型-层次划分规范

本文讲述了作者在数据仓库重构中的经验,强调了定义规范的必要性,区分了ODS(原始数据源)、DWD(详细事实表)和DWS(汇总数据服务)的角色,指出过度聚合可能导致的问题,并提出每种表的合理设计和限制。
摘要由CSDN通过智能技术生成

1. 背景:

10几年重构过很多数据仓库,很多都是层次不清导致不完整,重复加工导致失败。

2. 目标:

定义规范,划分一下ods,dwd,dws之间的边界。 简单,好落地。

个人主观定义规范,无所谓对不对,只有合适不合适 ,有没有遵守。

3. 错误案例:

之前公司结果一个非常极端的订单dws表, 在现有dwd基础上union all 了一部分从ods来的订单然后进行聚合出来汇总数据。

4. 导致的问题:

1)完整性: 订单dwd表不完整。没有描述清楚订单这个业务过程。

2)一致性: 其他地方需要对订单进行聚合时,都得复制一下union all 这个逻辑, 极大可能引入不一致。

3)重复开发:其他人忍受不了就得单独开发一个订单表, 对下游用户来说就存在多个订单表。

5. 规范:

ods:增量或者全量抽取业务数据,原封不动。

dwd:每个业务过程 0-2 的 事务事实表, 0-2个周期快照事实表,0-1个累计快照事实表。为什么是2 和1,后面说。

dws: 单指标来说只是对dwd进行sum group by和连接维度表 等简单加工(因为dws也会对多个dwd进行横向钻取) , 如果涉及了明细处理,说明dwd加工不完整,给dwd提需求。

6. 举例

库存物料进出事务事实表: 每有一次物料进去记录一行。

库存每日快照表: 每天每种物料有一行记录。

库存每日存量+每日销量+其他业务过程的融合事实表。

一个本业务过程的快照表, 一个融合其他业务过程的快照表。 没想到啥情况事务事实表融合其他业务过程。本想说订单,但是从订单维度来说,订单是订单的每日快照,太绕了。

所以一个业务过程,在dwd最多会有3种表,每种表最多会有2个表:本业务过程,融合其他业务过程。

累计快照本身就是融合其他业务过程,所以最多会有一个。

7. 疑问

问:为什么库存是对事务的聚合,算dwd。

答:不是简单的聚合,为了每天每种物料有一条记录,至少要有左连接。参见规范5里对dws的定义。 库存快照是对库存事务的一个补充,从另一个角度对库存进行说明,不是为了性能的简单聚合。 而且从钻取角度来说, 如果把周期快照算作dws表, 不见得就能简单的钻取到事务明细, 尤其在周期快照在事务明细基础上计算了很多指标的情况下。

同理融合事实表虽然也有数据汇总,也算作dwd。

补充:维度建模建议从原子粒度进行设计,快照我们也从最细的粒度进行快照。

8. 结尾

总结起来就一句话: dws只做sum等简单计算, dwd让dws能只做sum等简单计算

最终, 每个业务过程dwd每种类型几个表,做到什么程度, dws 代码格式都有法可依。

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值