DWD 与 DWS 怎么分界
分界判据有两条最实用:一是下游是否需要下钻到单据或事件级记录,需要下钻的留在 DWD;二是同一维度组合的汇总是否被两个以上下游复用,被复用的才值得落成 DWS。DWD 保存业务过程粒度,一行对应一笔订单或一次事件;DWS 在维度组合上做轻度汇总,粒度由维度组合与周期共同确定。判断顺序不要反过来:先问复用范围和下钻需求,再决定要不要物化汇总。
基本信息
| DWD 定位 | 明细层,保留业务过程粒度,一行一事件或一单据 |
|---|---|
| DWS 定位 | 主题域轻度汇总,粒度为维度组合乘周期 |
| 首要判据 | 下游是否需要下钻到单条记录 |
| 复用判据 | 同一汇总被两个以上下游消费才建 DWS |
| 反例 | 单个报表专用的特殊口径聚合,落 ADS 或留在报表层 |
| 常见错误 | 报表 SQL 直接对 DWD 写复杂聚合,相当于把 DWS 的活挪到查询时做 |
| 建模方式 | DWD 事实表加维度表,DWS 基于 DWD 汇总并声明粒度 |
典型使用场景
- 门店日销售汇总被财务、运营、BI 三方同时使用,复用量足够,落成 DWS 值得
- 只有一张临时报表需要的门店乘品类乘小时汇总,直接放 ADS 或不落表,避免产生无人维护的中间层
- 下游要追查单笔订单的处理轨迹,这类需求落在 DWD,不能靠 DWS 反推
- 汇总口径还在频繁调整时先不物化,等口径稳定、消费方确定后再建 DWS
- 做层间复核:粒度相同的两张汇总表必须合并,同一指标不允许在两个地方各算一遍
边界判断顺序
边界判断顺序
1) 下游需要 order_id 级明细记录 -> 留在 DWD
2) 同一维度组合的汇总被 2 个以上下游复用 -> 建 DWS
3) 只有单个报表使用的特殊口径聚合 -> 放 ADS 或报表层,不落 DWS
4) 汇总粒度与已有 DWS 表相同 -> 复用或扩列,不新建表
5) 粒度未定、口径还在调整 -> 暂缓物化,先在 DWD 上出临时结果两条判据的倾向
| 判据 | 倾向 DWD | 倾向 DWS |
|---|---|---|
| 数据粒度 | 一行一事件或一单据 | 维度组合乘周期 |
| 下游用法 | 下钻、明细追溯 | 看板、指标、复用 |
| 复用范围 | 天然公共明细 | 被两个以上下游消费 |
| 口径稳定性 | 来自业务过程,相对稳定 | 需先稳定再物化 |
| 维护成本 | 随源表结构变化 | 随维度组合膨胀 |
把 DWD 当 DWS 用,报表 SQL 每次都重算明细聚合,既浪费资源,又让同一指标的口径散落在各个报表里,改一次要翻十几份 SQL。
判据冲突时优先看复用范围:DWS 的价值来自被多处消费,只有一张报表用到的汇总放在中间层,后续几乎必然沦为无人维护的僵尸表。