首页/数据/数仓建模速查/DWS 宽表与主题域划分
分层与规范64 条

DWS 宽表与主题域划分

宽表把常用维度属性拼到汇总表减少下游 join;主题域按业务过程划分(交易/用户/商品/流量/履约),跨域指标在 ADS 或指标层组合。

数仓建模速查数据更新于 2026-10-13

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 或指标层组合多一层链路与产出依赖
宽表里的维度取值有「当时值」与「当前值」两种语义,取哪一种是口径决定,必须写进字段注释或指标卡;否则门店改名后历史报表数字会跟着变,没人能解释。
宽表把全部维度都拼上会导致多数字段长期无人使用,每次加维都要回刷历史;按访问频率分组、只拼高频属性更可持续。

易错点

  • 宽表把全部维度都拼上:多数字段无人使用,每次加维都要回刷历史,维护成本远超收益
  • 维度属性没有区分当时值与当前值:门店改名后历史报表数字跟着变,无法对账
  • 域内表跨域关联:主题域边界失效,改一处就要回刷多个域
  • 宽表字段不按访问频率分组:下游整表扫描取数,查询成本明显上升

数据来源与参考

  • Kimball《数据仓库工具箱(第3版)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌