【大数据_数据架构-05_一次性讲解清楚到底ADS层和DWS层的区别是什么,如何划分】
● ADS层与DWS层的区别与划分边界
这是数仓建设中最容易模糊的一对概念。很多团队 DWS 和 ADS 表混在一起,本质就是没想清楚这两层的边界。
一、本质区别:通用性 vs 定制性
┌──────────┬────────────────────────────┬────────────────────────────────┐
│ 维度 │ DWS 汇总层 │ ADS 应用层 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 核心定位 │ 公共汇总指标层 │ 专属应用结果层 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 服务对象 │ 服务 N 个下游应用 │ 服务 1 个具体应用 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 建模导向 │ 数据导向(围绕分析对象) │ 业务导向(围绕业务诉求) │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 复用性 │ 高度复用(一次算多次用) │ 不追求复用(专表专用) │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 指标性质 │ 原子指标、基础派生指标 │ 复合指标、业务指标 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 粒度 │ 标准粒度(用户/店铺/商品) │ 业务粒度(千人千面、混合维度) │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 稳定性 │ 稳定(变化少) │ 易变(跟着需求走) │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 数据组织 │ 宽表(横向扩展指标) │ 结果表(贴合应用结构) │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 加工逻辑 │ 标准化聚合 │ 业务规则、排名、分层、阈值 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 谁来用 │ 数据开发、分析师 │ 业务方、产品、运营、算法 │
├──────────┼────────────────────────────┼────────────────────────────────┤
│ 下游 │ 给 ADS、其他 DWS、临时分析 │ 给 BI、API、看板、算法 │
└──────────┴────────────────────────────┴────────────────────────────────┘
二、淘宝场景对比
DWS 层:通用的"指标超市"
dws_user_trade_nd(用户多周期交易宽表)
字段:
user_id, dt,
– 都是基础原子/派生指标,不掺杂业务规则
pay_amount_1d, pay_amount_7d, pay_amount_30d, pay_amount_90d,
pay_order_cnt_1d, pay_order_cnt_7d, pay_order_cnt_30d,
refund_amount_30d, refund_rate_30d,
avg_order_value_30d,
last_pay_date, first_pay_date,
buy_cate_cnt_30d, buy_brand_cnt_30d
特点:
- 任何用 user_id 切片的分析都能用
- 字段是"中性的",不带业务判断
- 一张表喂养几十个下游应用
ADS 层:专属的"业务成品"
ads_member_rfm(RFM 会员分层结果表)
字段:
user_id, dt,
R_score, – 1-5 分
F_score, – 1-5 分
M_score, – 1-5 分
rfm_segment – “重要价值客户”/“重要发展客户”/“流失预警”/…
– ↑ 这是【业务定义】的分层结果
ads_double11_dashboard(双11大屏)
字段:
dt, hour,
total_gmv, gmv_yoy, gmv_target_complete_rate, – 同比、达成率
top10_cate_json, – 类目TOP10的JSON
top10_shop_json, – 店铺TOP10的JSON
realtime_uv, peak_qps – 大屏专用字段
ads_shop_score_rank(商家评分排名)
字段:
shop_id, dt,
trade_score, service_score, logistics_score,
total_score,
rank_in_cate, – 类目内排名
rank_change, – 排名变化
star_level – 1-5 星
特点:
- 字段紧贴某个具体业务场景
- 充满"业务规则":分数怎么算、星级怎么定、TOP10怎么选
- 换一个场景就需要换一张表
三、判断一张表该放 DWS 还是 ADS:5 个核心判据
判据1:是否被多个下游复用?
问:这张表会被几个应用使用?
1 个 → DWS(通用资产,沉淀复用)
= 1 个 → ADS(专属应用,无需通用化)
例子:
- dws_user_trade_nd 同时喂给 RFM分层、流失预测、营销推送、业务看板 → DWS
- ads_double11_dashboard 只服务双11大屏一个产品 → ADS
判据2:是否包含业务规则/阈值/排序?
问:表里有没有"业务上的判断"?
无 → DWS(中性指标)
有 → ADS(业务结果)
业务规则的信号词:
- 分层:高价值/低价值、活跃/沉默、新客/老客
- 阈值:>1000元算大客户、<7天未登录算流失
- 排名:TOP10、行业第N
- 评级:1-5星、A/B/C级
- 标签:“潜力流失”、“重要保持”
只要出现这些,就是 ADS。
判据3:粒度是否标准?
DWS 粒度:单一标准对象 + 时间
- user_id + dt
- shop_id + dt
- item_id + dt
ADS 粒度:可能是混合的、应用导向的
- dt + 类目 + 地区 + 渠道(多维交叉)
- 一行一个看板(整个看板序列化成一行)
- 一行一个用户的所有标签(千人千面)
判据4:换需求会不会影响?
问:业务方改了一个需求,这张表要不要动?
不动,只是下游 SQL 改 → DWS(稳定的资产)
要改字段或重建 → ADS(贴合需求的成品)
判据5:它的"用户"是谁?
数据开发拿来做下一步加工 → DWS
业务方/BI/API 直接消费 → ADS
四、加工逻辑的差异
DWS 的加工:标准化聚合
– dws_user_trade_nd(典型 DWS 逻辑)
SELECT
user_id,
SUM(IF(dt >= date_sub(now(), 30), pay_amount, 0)) AS pay_amount_30d,
COUNT(DISTINCT IF(dt >= date_sub(now(), 30), order_id)) AS pay_order_cnt_30d,
MAX(pay_time) AS last_pay_date
FROM dwd_trade_order_pay_di
GROUP BY user_id;
只有 SUM/COUNT/MAX/AVG 这种纯统计,没有业务判断。
ADS 的加工:业务规则落地
– ads_member_rfm(典型 ADS 逻辑)
SELECT
user_id,
– R/F/M 打分:业务规则
CASE
WHEN datediff(now(), last_pay_date) <= 30 THEN 5
WHEN datediff(now(), last_pay_date) <= 60 THEN 4
WHEN datediff(now(), last_pay_date) <= 90 THEN 3
WHEN datediff(now(), last_pay_date) <= 180 THEN 2
ELSE 1
END AS R_score,
CASE
WHEN pay_order_cnt_90d >= 10 THEN 5
WHEN pay_order_cnt_90d >= 5 THEN 4
...
END AS F_score,
-- RFM 分层:业务定义
CASE
WHEN R>=4 AND F>=4 AND M>=4 THEN '重要价值客户'
WHEN R>=4 AND F<=2 AND M>=4 THEN '重要发展客户'
WHEN R<=2 AND F>=4 AND M>=4 THEN '重要保持客户'
WHEN R<=2 AND F<=2 AND M>=4 THEN '重要挽留客户'
...
END AS rfm_segment
FROM dws_user_trade_nd – ← 直接拿 DWS 的指标用
WHERE dt = ‘2026-06-11’;
充满 CASE WHEN、阈值、业务标签。
五、典型数据流:DWD → DWS → ADS
dwd_trade_order_pay_di (一条支付明细)
dwd_trade_order_refund_di (一条退款明细)
│
│ 按用户 group by 多周期聚合
▼
dws_user_trade_nd (用户:30天支付3500元、12笔)
│
│ 套用业务规则:RFM 打分 + 分层
▼
ads_member_rfm (用户A = “重要价值客户”)
│
▼
营销系统 API / CRM 看板
DWS 是"原料",ADS 是"菜品"。
同一份原料(dws_user_trade_nd),可以做成不同的菜:
- → ads_member_rfm(RFM 分层)
- → ads_member_churn(流失预测特征)
- → ads_member_lifecycle(生命周期分布)
- → ads_marketing_target(营销人群包)
六、常见误区与纠偏
误区1:把 ADS 当 DWS 用
❌ 错误做法:
ads_member_rfm 算好了"重要价值客户",
另一个业务方说:“我也要这个分层,直接用你的 ADS 表”
✅ 正确做法:
如果 RFM 分层要被复用,就要把它【沉淀】到 DWS,
新建 dws_user_rfm_nd 作为公共资产,
两个 ADS 都从 dws_user_rfm_nd 取。
判断信号:当一个 ADS 开始被多个下游引用,它就该升级为 DWS。
误区2:DWS 里写业务规则
❌ 错误做法:
– dws_user_trade_nd 里直接写
CASE WHEN pay_amount_30d > 1000 THEN ‘高价值’ END AS user_level
✅ 正确做法:
"高价值"是业务定义的(可能今天>1000,明天>2000),
应该放到 ADS,DWS 只提供 pay_amount_30d 这个原子指标。
误区3:DWS 太薄,ADS 干所有活
❌ 现象:DWS 只是 DWD 的简单 group by,几乎没指标沉淀,
所有计算都在 ADS 里写,导致 ADS 表之间大量重复计算。
✅ 修正:把多个 ADS 共用的中间指标下沉到 DWS。
误区4:DWS 太厚,把 ADS 该做的也做了
❌ 现象:DWS 里堆了几百个字段,包含各种排名、分层、标签,
导致 DWS 表跟着业务需求频繁变更,失去稳定性。
✅ 修正:带业务规则的字段抽到 ADS。
七、划分边界的实战准则
准则1:DWS 沉淀"指标",ADS 沉淀"应用"
DWS 关心:这个用户/店铺/商品有哪些可度量的事实?
ADS 关心:这个业务问题(看板/算法/活动)需要什么数据?
准则2:DWS 的字段名都是中性的
DWS:pay_amount_30d、order_cnt_30d、avg_order_value_30d
(都是事实)
ADS:rfm_segment、is_high_value、churn_risk_level、shop_star
(都是判断/标签)
准则3:DWS 表少而精,ADS 表多而专
一个大型电商:
DWS 大约 20-50 张(用户/店铺/商品/类目/品牌主题宽表)
ADS 可能 200-500 张(每个看板、每个 API、每个活动专属表)
准则4:三个问题快速分流
面对一张要建的表,问自己:
- 会被几个应用用? → 多个=DWS,单个=ADS
- 里面有业务规则吗? → 有=ADS,没有=DWS
- 它的客户是数据人还是业务人? → 数据人=DWS,业务人=ADS
三个问题,基本不会划错层。
八、对比总结表
┌──────────┬──────────────────┬─────────────────────┐
│ 维度 │ DWS │ ADS │
├──────────┼──────────────────┼─────────────────────┤
│ 角色 │ 公共资产 │ 业务成品 │
├──────────┼──────────────────┼─────────────────────┤
│ 通用性 │ 高 │ 低 │
├──────────┼──────────────────┼─────────────────────┤
│ 业务规则 │ 不含 │ 大量包含 │
├──────────┼──────────────────┼─────────────────────┤
│ 指标性质 │ 原子/派生 │ 复合/业务 │
├──────────┼──────────────────┼─────────────────────┤
│ 字段含义 │ 中性的事实 │ 业务的判断 │
├──────────┼──────────────────┼─────────────────────┤
│ 粒度 │ 标准对象+时间 │ 业务定制 │
├──────────┼──────────────────┼─────────────────────┤
│ 数量级 │ 几十张 │ 几百张 │
├──────────┼──────────────────┼─────────────────────┤
│ 稳定性 │ 稳定 │ 易变 │
├──────────┼──────────────────┼─────────────────────┤
│ 谁建 │ 数据开发(数仓侧) │ 数据开发+业务方共建 │
├──────────┼──────────────────┼─────────────────────┤
│ 谁消费 │ 下游数据加工 │ BI/API/算法 │
├──────────┼──────────────────┼─────────────────────┤
│ 变更频率 │ 低 │ 高 │
├──────────┼──────────────────┼─────────────────────┤
│ 命名 │ dws_主题_周期 │ ads_业务方向_应用 │
└──────────┴──────────────────┴─────────────────────┘
九、一句话总结
▎ DWS 是"指标的中央厨房",ADS 是"端到客户面前的菜"。
▎
▎ - DWS 解决"重复计算"问题 —— 把通用指标算一次,N 个下游复用
▎ - ADS 解决"业务对接"问题 —— 把指标包装成业务方能直接消费的形态
▎
▎ 最关键的一刀切:有没有业务规则。
▎ - 纯统计聚合 → DWS
▎ - 含分层/排名/阈值/标签 → ADS
记忆口诀:
- DWS 像批发市场:卖标准化的食材,谁来都能买
- ADS 像私房菜馆:为特定客人定制菜品,带着厨师的手艺(业务规则)
更多推荐

所有评论(0)