【大数据_数仓架构-04_到底DWS层的主题域和DWD层的数据域有什么区别和联系】
● DWS层"主题"与DWD层"数据域"的区别与联系
这是数仓建模中又一个容易混淆的核心概念。理解它,就理解了"从过程记录到分析对象"的视角转换。
一、本质区别:分析视角完全不同
┌────────────┬────────────────────────────┬──────────────────────────┐
│ 维度 │ DWD 数据域(业务过程视角) │ DWS 主题(分析对象视角) │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 回答的问题 │ 业务上发生了什么 │ 围绕谁/什么做分析 │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 组织依据 │ 按业务过程(动词) │ 按分析对象(名词) │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 建模思想 │ 事件驱动,记录过程 │ 实体驱动,刻画对象 │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 粒度 │ 一条业务记录(事件级) │ 一个分析对象(聚合级) │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 数据形态 │ 事实表(明细) │ 宽表(聚合指标) │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 典型动作 │ 下单、支付、发货、登录 │ 用户、店铺、商品、品牌 │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 命名前缀 │ dwd_{域}{过程}{粒度} │ dws_{主题}{周期}{粒度} │
├────────────┼────────────────────────────┼──────────────────────────┤
│ 驱动方 │ 业务系统的业务流程 │ 分析师/运营的分析诉求 │
└────────────┴────────────────────────────┴──────────────────────────┘
二、淘宝场景直观对比
DWD 数据域:按"业务过程"组织(动词视角)
交易域(trade)── 交易过程中发生了什么?
├── dwd_trade_order_create_di 下单
├── dwd_trade_order_pay_di 支付
├── dwd_trade_order_refund_di 退款
└── dwd_trade_order_cancel_di 取消
会员域(member)── 会员身上发生了什么?
├── dwd_member_register_di 注册
├── dwd_member_login_di 登录
└── dwd_member_level_change_di 等级变更
履约域(logi)── 履约过程中发生了什么?
├── dwd_logi_shipment_di 发货
├── dwd_logi_delivery_di 妥投
└── dwd_logi_sign_di 签收
流量域(traffic)── 用户在平台做了什么?
├── dwd_traffic_page_view_di 浏览
└── dwd_traffic_item_click_di 点击
关键词都是动词:下单、支付、发货、登录、点击 —— 记录"事件"。
DWS 主题:按"分析对象"组织(名词视角)
用户主题(user)── 围绕"用户"这个对象,刻画ta的方方面面
├── dws_user_trade_1d 用户的交易表现
├── dws_user_trade_nd 用户多周期交易(1/7/30/90天)
├── dws_user_traffic_1d 用户的浏览行为
├── dws_user_logi_nd 用户的履约体验
└── dws_user_full_nd 用户全域宽表(汇总所有维度)
店铺主题(shop)── 围绕"店铺"刻画
├── dws_shop_trade_1d 店铺的销售表现
├── dws_shop_traffic_1d 店铺的流量表现
└── dws_shop_logi_1d 店铺的履约表现
商品主题(item)── 围绕"商品"刻画
├── dws_item_trade_1d 商品销售
└── dws_item_traffic_1d 商品流量漏斗
品牌主题(brand)── 围绕"品牌"刻画
└── dws_brand_trade_nd
类目主题(cate)── 围绕"类目"刻画
└── dws_cate_trade_nd
关键词都是名词:用户、店铺、商品、品牌 —— 刻画"对象"。
三、关键区别详解
区别1:动词 vs 名词
DWD:用户【下单】了 → dwd_trade_order_create_di
DWD:用户【支付】了 → dwd_trade_order_pay_di
DWD:用户【浏览】了 → dwd_traffic_page_view_di
⬇ 全部以"用户"为中心聚合 ⬇
DWS:这个【用户】1天/7天/30天的下单数、支付额、浏览PV、加购数
→ dws_user_full_nd
DWD 切一刀按"业务过程",DWS 切一刀按"分析对象",两个切法完全垂直。
区别2:多个 DWD 域 → 同一个 DWS 主题
一个分析对象往往横跨多个业务域:
用户主题(dws_user_xxx)的数据来源:
├── 交易域 dwd_trade_order_pay_di → 算用户的支付金额
├── 流量域 dwd_traffic_page_view_di → 算用户的浏览深度
├── 履约域 dwd_logi_delivery_di → 算用户的收货时效
└── 会员域 dwd_member_login_di → 算用户的活跃度
DWS 打破了 DWD 的"域"边界,以分析对象为中心进行横向整合。
区别3:粒度的根本转变
┌─────┬───────────────────────────┬──────────────────────────────────────────────┐
│ 层 │ 粒度 │ 例子 │
├─────┼───────────────────────────┼──────────────────────────────────────────────┤
│ DWD │ 一行 = 一次业务过程 │ 用户A在2026-06-10 14:23支付了订单X,金额99元 │
├─────┼───────────────────────────┼──────────────────────────────────────────────┤
│ DWS │ 一行 = 一个对象在一个周期 │ 用户A在2026-06-10当天共支付3笔,金额350元 │
└─────┴───────────────────────────┴──────────────────────────────────────────────┘
DWD 是"流水账",DWS 是"对账单"。
区别4:是否做聚合计算
┌──────────────┬─────────┬───────────────────────────┐
│ 处理 │ DWD │ DWS │
├──────────────┼─────────┼───────────────────────────┤
│ 业务过程记录 │ ✅ 明细 │ ❌ 已聚合 │
├──────────────┼─────────┼───────────────────────────┤
│ 维度退化 │ ✅ │ ✅(继承) │
├──────────────┼─────────┼───────────────────────────┤
│ 指标聚合 │ ❌ │ ✅ count/sum/avg │
├──────────────┼─────────┼───────────────────────────┤
│ 多周期窗口 │ ❌ │ ✅ 1d/7d/30d/90d │
├──────────────┼─────────┼───────────────────────────┤
│ 跨域整合 │ ❌ │ ✅ 横跨多个DWD域 │
├──────────────┼─────────┼───────────────────────────┤
│ 派生指标 │ ❌ │ ✅ 复购率、活跃度、客单价 │
└──────────────┴─────────┴───────────────────────────┘
区别5:稳定性差异
- DWD 数据域:跟业务过程绑定,很稳定。淘宝从有交易那天起,"下单、支付、退款"就一直存在。
- DWS 主题:跟分析诉求绑定,会演进。早期可能只有用户、店铺主题;后来加品牌、类目、达人、直播间主题。
四、紧密联系:DWS 完全基于 DWD 构建
虽然组织视角不同,但 DWS 的数据 100% 来自 DWD:
- 加工链路:DWD 是 DWS 唯一源头
DWD(多张过程事实表)
│ 按分析对象 group by
│ 按时间周期 window
│ 多域 join 整合
▼
DWS(一张主题宽表)
- 一个完整例子:构建"用户交易主题宽表"
– dws_user_trade_nd 的加工逻辑(简化)
INSERT INTO dws_user_trade_nd
SELECT
user_id,
-- 来自 dwd_trade_order_pay_di(支付过程)
COUNT(DISTINCT IF(dt >= '近1天', order_id)) AS pay_order_cnt_1d,
SUM(IF(dt >= '近1天', pay_amount, 0)) AS pay_amount_1d,
COUNT(DISTINCT IF(dt >= '近30天', order_id)) AS pay_order_cnt_30d,
SUM(IF(dt >= '近30天', pay_amount, 0)) AS pay_amount_30d,
-- 来自 dwd_trade_order_refund_di(退款过程)
SUM(IF(dt >= '近30天', refund_amount, 0)) AS refund_amount_30d,
-- 派生指标
pay_amount_30d / NULLIF(pay_order_cnt_30d, 0) AS avg_order_value_30d,
refund_amount_30d / NULLIF(pay_amount_30d, 0) AS refund_rate_30d
FROM (
– 横跨 DWD 多个业务过程
SELECT user_id, order_id, pay_amount, 0 AS refund_amount, dt
FROM dwd_trade_order_pay_di
UNION ALL
SELECT user_id, order_id, 0, refund_amount, dt
FROM dwd_trade_order_refund_di
) t
GROUP BY user_id;
多个DWD表(不同业务过程)→ 一张DWS表(同一分析对象)
- 血缘示意
dwd_trade_order_pay_di ─────┐
dwd_trade_order_refund_di ──┤
dwd_traffic_page_view_di ───┼──→ dws_user_full_nd ──→ ads_member_rfm
dwd_logi_delivery_di ───────┤
dwd_member_login_di ────────┘
五、为什么要做这个转变?
如果只有 DWD,没有 DWS
分析师要回答"用户A最近30天的综合价值",必须:
SELECT FROM dwd_trade_order_pay_di – 算支付金额
JOIN dwd_trade_order_refund_di – 减退款
JOIN dwd_traffic_page_view_di – 算浏览
JOIN dwd_logi_delivery_di – 算收货
JOIN dwd_member_login_di – 算活跃
WHERE user_id = ‘xxx’ AND dt >= …
GROUP BY user_id
问题:
- 每个分析师都重复写一遍
- 不同人写出的"30天支付金额"可能口径不一致
- 大表 JOIN 慢且贵
- 一个看板要查 5 张明细表
引入 DWS 后
SELECT * FROM dws_user_full_nd WHERE user_id = ‘xxx’ AND dt = ‘2026-06-10’;
收益:
- 一次计算,处处复用
- 口径统一,全公司一致
- 性能提升一个数量级
- 分析师无需懂底层业务过程
六、DWD 数据域与 DWS 主题的映射关系
不是一一对应,而是多对多的网状映射:
┌─── 用户主题 dws_user_xxx
│
交易域 ───────┼─── 店铺主题 dws_shop_xxx
│
├─── 商品主题 dws_item_xxx
│
流量域 ───────┼─── 类目主题 dws_cate_xxx
│
履约域 ───────┴─── 品牌主题 dws_brand_xxx
会员域 ───────────── 用户主题 dws_user_xxx
同一个 DWD 域服务多个主题,同一个主题汇聚多个 DWD 域。
七、对比总结表
┌──────────┬──────────────────┬───────────────────────┐
│ 对比项 │ DWD 数据域 │ DWS 主题 │
├──────────┼──────────────────┼───────────────────────┤
│ 视角 │ 业务过程(动词) │ 分析对象(名词) │
├──────────┼──────────────────┼───────────────────────┤
│ 例子 │ 下单、支付、发货 │ 用户、店铺、商品 │
├──────────┼──────────────────┼───────────────────────┤
│ 粒度 │ 事件级明细 │ 对象级聚合 │
├──────────┼──────────────────┼───────────────────────┤
│ 时间 │ 事件发生时刻 │ 统计周期(1d/7d/30d) │
├──────────┼──────────────────┼───────────────────────┤
│ 表形态 │ 事实表 │ 宽表 │
├──────────┼──────────────────┼───────────────────────┤
│ 数据源 │ ODS │ DWD(可能多个域) │
├──────────┼──────────────────┼───────────────────────┤
│ 跨域 │ 单域内组织 │ 跨域横向整合 │
├──────────┼──────────────────┼───────────────────────┤
│ 谁定义 │ 业务流程定义 │ 分析需求定义 │
├──────────┼──────────────────┼───────────────────────┤
│ 稳定性 │ 高 │ 中(随业务演进) │
├──────────┼──────────────────┼───────────────────────┤
│ 服务对象 │ 灵活查询、下钻 │ 报表、看板、宽表查询 │
└──────────┴──────────────────┴───────────────────────┘
八、一句话总结
▎ DWD 域回答"业务上发生了什么",DWS 主题回答"围绕这个对象我能分析什么"。
▎
▎ - 联系:DWS 的所有指标都从 DWD 聚合而来,DWD 是 DWS 的唯一原料;
▎ - 区别:DWD 按业务过程横切(动词),DWS 按分析对象纵切(名词),两个切法垂直交叉;
▎ - 价值:从"流水账"升级为"用户/店铺/商品画像",是数仓从"记录业务"走向"赋能业务"的关键一跃。
简单记忆:
- DWD 像日记:今天我下单了、支付了、收货了 —— 按事件记录
- DWS 像档案:这个用户的消费档案、那个店铺的经营档案 —— 按对象汇总
更多推荐

所有评论(0)