【大数据_数仓架构-07_ DWS建的表归属到是什么主题域,如何划分,举例】
● DWS 表的主题归属分析
非常好的追问!这正是 DWS 建模中最关键也最容易模糊的地方。
我建的 dws_cate_region_trade_1d 这张表,它的主题归属其实是有争议的,我们来认真分析一下。
一、回顾这张表的特征
dws_cate_region_trade_1d
粒度:dt × 省 × 市 × 一级类目 × 叶子类目
指标:订单数、交易额、件数、买家数…
关键观察:这张表的粒度里没有任何一个"分析对象"占主导地位 —— 它既不是纯粹的"商品/类目主题",也不是纯粹的"地区主题",而是两个维度的交叉。
二、三种主题归属的判断思路
思路A:归属到"类目主题"(cate)
理由:从分析对象看,这张表的核心是"研究类目的销售表现",地区只是切片维度。
主题域:商品/类目主题
表名应改为:dws_cate_trade_1d
粒度:dt × 类目 × 地区切片
适用场景:以"类目运营"为主线的分析体系。
思路B:归属到"地区主题"(region)
理由:从分析对象看,核心是"研究地区的消费表现",类目只是切片维度。
主题域:地区主题
表名应改为:dws_region_trade_1d
粒度:dt × 地区 × 类目切片
适用场景:以"区域运营"为主线的分析体系。
思路C:归属到"交易主题"(trade)—— 我推荐的归属
理由:这张表本质上是交易事实的多维聚合,没有主导的分析对象,应归到交易主题这个"过程域型主题"。
主题域:交易主题(trade)
表名:dws_trade_cate_region_1d
粒度:dt × 类目 × 地区(交叉粒度)
三、为什么我推荐归属"交易主题"
- 数据仓库主题划分的两种流派
实际生产中,DWS 主题划分通常有两种思路:
┌────────────┬──────────────────┬────────────────────────┐
│ 流派 │ 主题划分依据 │ 典型主题 │
├────────────┼──────────────────┼────────────────────────┤
│ 对象型主题 │ 围绕分析实体 │ 用户、店铺、商品、品牌 │
├────────────┼──────────────────┼────────────────────────┤
│ 过程型主题 │ 围绕业务过程聚合 │ 交易、流量、履约、营销 │
└────────────┴──────────────────┴────────────────────────┘
大多数互联网公司是两种混用的:
- 单实体宽表 → 对象型主题(用户、店铺、商品)
- 多维交叉聚合表 → 过程型主题(交易、流量、履约)
- 我建的这张表属于"多维交叉"
dws_trade_cate_region_1d
├── 它不是"用户宽表"(没有 user_id 维度)
├── 它不是"店铺宽表"(没有 shop_id 维度)
├── 它不是"商品宽表"(粒度比商品粗,是类目级)
└── 它是【交易事实】在【类目 × 地区】两个维度上的交叉聚合
所以归属到"交易主题"最合适。
四、规范化的命名与归属
按阿里 OneData 体系的命名规范,应该这样调整:
– 原来的命名
dws_cate_region_trade_1d ← 不规范
– 规范后的命名
dws_trade_cate_region_1d
↑ ↑ ↑ ↑
层 主题域 粒度 周期
命名解析:
- dws:层级
- trade:主题域 = 交易
- cate_region:粒度 = 类目 × 地区
- 1d:周期 = 日
五、淘宝场景下 DWS 主题域的完整划分
为了让你看清楚归属逻辑,给你一份完整的 DWS 主题分布:
对象型主题(单实体宽表)
用户主题 (user)
├── dws_user_trade_1d 用户的交易表现(用户视角)
├── dws_user_trade_nd
├── dws_user_traffic_1d
└── dws_user_logi_nd
店铺主题 (shop)
├── dws_shop_trade_1d
└── dws_shop_traffic_1d
商品主题 (item)
├── dws_item_trade_1d 单品的销售表现
└── dws_item_traffic_1d
过程型主题(多维交叉聚合)
交易主题 (trade) ← 我建的表归这里
├── dws_trade_cate_region_1d 类目×地区 交易汇总 ← 就是这张
├── dws_trade_cate_1d 类目维 交易汇总
├── dws_trade_region_1d 地区维 交易汇总
├── dws_trade_brand_1d 品牌维 交易汇总
└── dws_trade_channel_1d 渠道维 交易汇总
流量主题 (traffic)
├── dws_traffic_page_1d 页面流量汇总
└── dws_traffic_source_1d 流量来源汇总
履约主题 (logi)
├── dws_logi_carrier_1d 物流商汇总
└── dws_logi_region_1d 地区履约汇总
六、一个判断决策树
判断一张 DWS 表归属哪个主题域,用这个决策树:
这张表的粒度里有【单个明确的分析对象】吗?
│
├─ 有 → 对象型主题
│ ├─ 粒度是 user_id → 用户主题 (user)
│ ├─ 粒度是 shop_id → 店铺主题 (shop)
│ ├─ 粒度是 item_id → 商品主题 (item)
│ └─ 粒度是 brand_id → 品牌主题 (brand)
│
└─ 没有(多维度交叉聚合)→ 过程型主题
├─ 度量是交易类(订单、金额)→ 交易主题 (trade) ✅
├─ 度量是流量类(PV、UV) → 流量主题 (traffic)
├─ 度量是履约类(发货、妥投)→ 履约主题 (logi)
└─ 度量是营销类(券、活动) → 营销主题 (mkt)
我建的 dws_cate_region_trade_1d:
- 没有单一分析对象(cate + region 两个维度)
- 度量是支付订单数、交易额 → 交易类
- ✅ 归属:交易主题 (trade)
七、修正后的最终方案
表名修正
– 原表名(不规范)
dws_cate_region_trade_1d
– 规范后
dws_trade_cate_region_1d
完整命名层级
ods 层 → ods_trade_order_di (贴源,业务系统名)
dwd 层 → dwd_trade_order_pay_di (交易域-支付过程)
dws 层 → dws_trade_cate_region_1d (交易主题-类目地区粒度-日)
ads 层 → ads_flower_rose_geo_1d (应用:鲜花玫瑰地域看板)
一目了然的归属
DWD 数据域: 交易域 (trade)
↓ 聚合
DWS 主题域: 交易主题 (trade)
↓ 应用化
ADS 业务方向: 鲜花运营 (flower)
注意:DWD 的"交易域"和 DWS 的"交易主题"虽然名字相似,但概念不同:
- DWD 交易域:以"交易业务过程"组织的明细事实表集合(下单、支付、退款)
- DWS 交易主题:以"交易度量"为核心、按各种维度组合聚合的汇总表集合
八、为什么不归"商品主题"或"地区主题"?
不归"商品主题"
商品主题的标准粒度应该是 item_id(单品级),用来回答"某个具体商品的销售表现"。
而 dws_trade_cate_region_1d 粒度是 类目级,比商品粗一层,不属于商品主题的核心资产。
不归"地区主题"
如果建"地区主题",应该建一张围绕地区这个分析对象的宽表:
dws_region_full_nd(地区主题宽表,假设建)
粒度:city_code + dt
字段:
city_code, city_name,
– 交易表现
total_pay_amount_30d, total_order_cnt_30d,
– 流量表现
total_uv_30d, total_pv_30d,
– 履约表现
avg_delivery_hours_30d,
– 用户表现
active_user_cnt_30d, new_user_cnt_30d
这才是"地区主题宽表" —— 围绕地区这个对象,刻画它的方方面面。
而我建的表只是"交易事实 × 地区切片",远没到"地区画像"的程度。
九、一句话总结
▎ dws_trade_cate_region_1d 归属【交易主题域 trade】,属于"过程型主题"下的"多维交叉聚合表"。
▎
▎ 判断依据:
▎ 1. 粒度是"类目 × 地区"的交叉,没有单一分析对象 → 不是对象型主题
▎ 2. 度量是订单数、交易额 → 属于交易类度量
▎ 3. 服务于交易场景的多维下钻分析 → 归交易主题最自然
▎
▎ 规范化命名应为:dws_trade_cate_region_1d(主题域放在粒度前面)
这也提醒我们一个建模铁律:
▎ DWS 表名一定要能从名字看出它的主题归属和粒度,否则数仓越建越乱,谁也搞不清一张表该用还是不该用。
