首页/数据/数据工程与 ETL 速查/分层边界与加工下沉判断

分层边界与加工下沉判断

判断加工写在哪一层的实用标准:涉及业务规则(枚举映射、金额口径)放 DWD;多需求共用的聚合放 DWS;一次性或强业务定制放 ADS。放反会造成重复计算或口径分裂。

分层边界是什么

数仓分层(ODS 贴源、DWD 明细、DWS 汇总、ADS 应用)本身不解决数据可信问题,真正决定结果的是「一段加工逻辑写在哪一层」。边界划得太浅,同一套清洗与映射会在多个下游各写一份;划得过深,公共层就被单个业务需求绑架,改一次全体回归。

各层职责

ODS贴源落地、分区、去重与追加,不做业务加工
DWD清洗、类型规范、维度退化、枚举与金额口径统一
DWS按主题与常用维度做共性聚合,供多个下游复用
ADS最终口径与交付形态,允许含报表定制逻辑
总原则同一规则只写一处;越通用越靠前,越易变越靠后

典型使用场景

  • 新需求评审:判断新增字段进 DWD 公共层,还是只在 ADS 报表里算
  • 口径冲突排查:两个报表同一指标数字不同,先看规则是否分裂在多层
  • 上游变更评估:变更落在公共层还是应用层,直接决定回归测试范围
  • 公共层重构:把散落在 ADS 里的通用聚合上移到 DWS 复用
  • 成本治理:减少同一份明细被反复扫描、重复计算

判断标准对照

情形建议落层理由
被两个以上下游使用的清洗与映射DWD改一处即可全链路生效,避免口径分裂
只服务单一报表的定制聚合ADS变更不牵动公共层,回归面最小
多报表共用的汇总口径DWS一次计算多次复用,省资源也保一致
高频变化的业务规则(活动口径)ADS 或配置表公共层求稳,规则外置便于快速调整

判断清单

判断清单
# 按顺序回答,先命中先决定落层
# 这段逻辑有 2 个以上下游使用吗?
#   是 -> 下沉 DWD 或 DWS
# 是业务规则吗(枚举映射、币种、单位换算)?
#   是 -> 放 DWD,不要留在报表里
# 只服务一个报表吗?
#   是 -> 留在 ADS
# 经常变吗?
#   是 -> 放 ADS 或配置表,避开公共层
# 改动需要全链路重跑吗?说明放得太浅,考虑上移
分层不是教条:团队规模小时 DWD 与 DWS 可以合并成一套明细层,但「规则只写一处」不能破,否则合并只是把混乱集中进一张更大的表。
公共层表被单个业务需求改动后,所有下游都要回归测试。公共层变更应走评审,并附下游任务、报表、指标的影响面清单。

易错点

  • 同一套清洗逻辑在 DWD 与 ADS 各写一份,源字段变化时只改了一处,两份数据长期不一致
  • 把活动口径这类高频变更逻辑放进 DWD,每次活动调整都触发全量重跑和下游回归
  • ADS 里堆大量只有一张报表用过的中间表,血缘混乱、存储与计算成本持续上升
  • 下游直接读 ODS 绕过公共层,口径校验与质量稽核全部失效,出问题无法定责
  • 分层边界只写在文档里,没有落到建表注释与任务命名,新人仍按习惯随意放置逻辑

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》分层设计原则
  • 行业数据仓库建设实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌