数据集市层 DM 的位置与取舍
部分团队在 DWS 与 ADS 之间设一层 DM(数据集市),用来隔离业务线:每条业务线有自己的集市,口径可以独立演进,不被其他业务牵制。代价是多一层存储与调度链路,所以必须先划清 DM 与 DWS 的边界,否则同一指标会在两层各算一遍。
基本信息
| 位置 | DWS 之后、ADS 之前 |
|---|---|
| 主要目的 | 业务线隔离与口径独立演进 |
| 代价 | 多一层存储与调度链路 |
| 替代方案 | DWS 按主题域划分直接服务 ADS |
| 设层判据 | 是否存在稳定且独立演进的口径集合 |
典型使用场景
- 多条业务线口径差异大且各自独立演进:为每条业务线建集市,变更互不影响
- 口径统一、维度共享的团队:DWS 直接服务 ADS,不额外引入 DM 层
- 命名按业务线前缀区分(dm_trade_、dm_user_),避免与 DWS 表混淆
- 成本评估:每加一层就多一份调度与回刷链路,先算清维护人力再决定
- 治理检查:同一指标在 DM 与 DWS 各算一遍时收敛到一层,明确权威口径
目录与命名示意
目录与命名示意
corp_dw.dm_trade_store_day 交易线集市(门店日汇总)
corp_dw.dm_user_active_day 用户线集市(活跃日汇总)
corp_dw.ads_trade_board_day 交易线看板结果(消费 DM)
边界原则:DM 面向业务线,DWS 面向主题域
同一指标只在一层权威计算,另一层只做引用与展示加工取舍参考
| 场景 | 建议 | 原因 |
|---|---|---|
| 多条业务线口径差异大 | 设 DM 层 | 变更互不影响 |
| 口径统一、维度共享 | DWS 直接服务 ADS | 少一层链路更易维护 |
| 只为单个报表服务 | 不设 DM | ADS 即可承载 |
设层判据是「存在稳定且独立演进的口径集合」;如果只是临时报表需求,用 ADS 承载更轻,也不必为它长期维护一条链路。
DM 表要写清它的上游与权威口径归属:它从 DWS 派生,但不复制口径计算逻辑,否则两层的数字会慢慢漂移,对账变成常态工作。