DWS 宽表与主题域划分
DWS 宽表把常用维度属性预先拼到汇总表上,下游不必每次再 join 维表;主题域按业务过程划分(交易、用户、商品、流量、履约),域内表只引用维表属性,不跨域关联事实。跨域组合指标放到 ADS 或指标层处理,避免 DWS 结构被单个报表牵着走。
基本信息
| 划分依据 | 业务过程(主题域) |
|---|---|
| 宽表作用 | 预拼常用维度属性 |
| 跨域处理 | ADS 或指标层组合 |
| 约束 | 域内不跨域 join |
| 代价 | 字段膨胀与回刷成本上升 |
典型使用场景
- 报表长期使用同一组维度:把门店名、区域名拼进 DWS,省掉每次 join 维表
- 主题域建模评审:交易域只引用维表的稳定属性,不引用其他域的过程表
- 宽表字段变多后按访问频率分组,避免下游整表扫描式取数
- 维度属性更新(门店改名、区域调整)时先决定回刷历史还是保留当时值
- 跨域指标(交易结合流量)在 ADS 或指标层组合,不改动 DWS 结构
宽表拼维
宽表拼维
SELECT f.store_id, s.store_name, r.region_name, f.order_cnt, f.pay_amt
FROM dws_trade_store_day f
LEFT JOIN dim_store s ON f.store_id = s.store_id AND s.is_current = 1 -- 取当前版本维
LEFT JOIN dim_region r ON s.region_id = r.region_id
WHERE f.dt = '2026-10-12';
-- 需要历史归属时改用拉链维按数据日期匹配生效区间
-- ON f.store_id = s.store_id AND f.dt BETWEEN s.start_dt AND s.end_dt宽表取舍
| 问题 | 做法 | 代价 |
|---|---|---|
| 下游反复 join 维表 | 预拼常用维度属性 | 字段变多,回刷成本上升 |
| 同域多表互相 join | 合并到同一张宽表 | 单表变大后维护复杂 |
| 跨域指标 | 放 ADS 或指标层组合 | 多一层链路与产出依赖 |
宽表里的维度取值有「当时值」与「当前值」两种语义,取哪一种是口径决定,必须写进字段注释或指标卡;否则门店改名后历史报表数字会跟着变,没人能解释。
宽表把全部维度都拼上会导致多数字段长期无人使用,每次加维都要回刷历史;按访问频率分组、只拼高频属性更可持续。