首页/数据/数仓建模速查/DWS 层职责:主题域轻度汇总
分层与规范64 条

DWS 层职责:主题域轻度汇总

DWS 按主题域(交易/用户/流量等)与常用维度组合做预聚合,服务多个下游报表;表粒度写进表名与注释,避免每个报表各算一遍。

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

DWS 是什么

DWS(Data Warehouse Summary)是汇总层,按主题域(交易、用户、流量等)加常用维度组合做预聚合,直接服务多个下游报表。核心判断标准是复用:同一份汇总能被两个以上使用方消费才值得放进 DWS,只服务单一报表的加工留在 ADS 更合适。表粒度必须写进表名和注释,例如 dws_trade_store_day 表示「按门店、按天」,否则下游无法判断能不能再按其他维度下钻。

基本信息

粒度主题 + 维度组合,如门店 × 天
目标跨报表复用,抵消重复计算
周期日表与月表并存,月表可由日表累加
命名dws_主题_维度_周期
加工来源通常读 DWD 明细,不直接读 ODS

典型使用场景

  • 同一份门店日汇总要给看板、日报、接口三处用:放 DWS 只算一次
  • 指标口径统一:把「支付金额」的定义固化在 DWS,下游不再各自写过滤条件
  • 降低查询成本:ADS 直接读 DWS,避免每次都扫 DWD 明细
  • 月粒度汇总由日表累加,供月度报表复用,不重扫明细
  • 新报表需求先查 DWS 有没有现成汇总,有则直接引用,没有再考虑新增

DWS 汇总

DWS 汇总
INSERT OVERWRITE TABLE dws_trade_store_day PARTITION (dt='2026-10-13')
SELECT store_id,
       count(DISTINCT order_id) AS order_cnt,   -- 去重口径:按单据去重
       count(DISTINCT user_id)  AS buyer_cnt,   -- 去重口径:按用户去重
       sum(pay_amt)             AS pay_amt      -- 可累加指标
FROM dwd_trade_order_di
WHERE dt='2026-10-13' AND order_status='PAID'  -- 口径固化:只算已支付
GROUP BY store_id;

月表由日表累加

月表由日表累加
-- 月表复用日表结果,避免重复扫描明细
INSERT OVERWRITE TABLE dws_trade_store_month PARTITION (month='2026-10')
SELECT store_id,
       sum(order_cnt) AS order_cnt,
       sum(pay_amt)   AS pay_amt
FROM dws_trade_store_day
WHERE dt BETWEEN '2026-10-01' AND '2026-10-31'
GROUP BY store_id;

设计要点

项说明注意点
表粒度维度组合 + 时间粒度写进表名与注释,供下游判断可下钻范围
维度选择取跨报表出现频次最高的组合组合贪多会让表数量快速膨胀
聚合方式count、sum 等可累加指标去重类指标不能由日表直接加总得月值
更新策略按分区重算,当日或次日调度迟到数据要靠回刷分区补上
DWS 承担可复用聚合,只服务单一报表的加工留在 ADS,避免汇总层无限膨胀。判断很直接:如果一张 DWS 表的消费方只有一张报表,那它实际上属于 ADS。
去重类指标(日活、去重下单人数)直接相加得不到月值。跨周期汇总要在 DWS 里保留可再聚合的中间结果,例如去重键集合或位图,否则只能回到 DWD 重算。

易错点

  • 每个报表一套 DWS 表:口径散落,同一指标在不同表里数字不一致
  • 月表直接由日表相加:去重类指标被重复计数,月活大于日活之和
  • 表粒度没写清:下游误以为可按更细维度下钻,取数结果错误且不易发现
  • 维度组合贪多:表数量与调度成本成倍增长,收益有限
  • DWS 直接读 ODS:跳过 DWD 的清洗与标准化,脏数据影响全部下游

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌