|
|
@@ -12,11 +12,10 @@ DWD / DWS(事实 + 维度)
|
|
|
|
|
|
|
v
|
|
|
+---------------------------------------------+
|
|
|
- | TDM 标签明细长表(EAV) |
|
|
|
- | tdm_usr_tag_ful_d |
|
|
|
- | tdm_prd_tag_ful_d |
|
|
|
- | tdm_shp_tag_ful_d |
|
|
|
- | 所有标签纵向存放,灵活扩展,不改表结构 |
|
|
|
+ | TDM 标签明细长表(EAV) |
|
|
|
+ | tdm_{usr|prd|shp}_tag_d 日更长表(_d 后缀) |
|
|
|
+ | tdm_{usr|prd|shp}_tag_o 往年凝固(_o 后缀) |
|
|
|
+ | 所有标签纵向存放,灵活扩展,不改表结构 |
|
|
|
+--------------+------------------------------+
|
|
|
| pivot 高频核心标签
|
|
|
v
|
|
|
@@ -39,6 +38,7 @@ DWD / DWS(事实 + 维度)
|
|
|
|
|
|
**设计原则**:
|
|
|
- 按**实体类型**分表(用户/商品/商家),不按标签主题拆表
|
|
|
+- 长表分 `_d` 日更(属性 snap + 当年累计 + 滚动窗口)/ `_o` 凝固(往年总额,按 `dt='{yyyy}1231'` 单表多分区,业界 Kimball 周期快照事实表标准);写入策略不同必须分表(详见 kb/33 §1.3)
|
|
|
- 长表负责**全量明细存储**,宽表负责**高频服务**,人群包负责**圈选计算**
|
|
|
- 前期只用 Hive 做离线标签计算,不引入额外组件
|
|
|
|
|
|
@@ -48,11 +48,12 @@ DWD / DWS(事实 + 维度)
|
|
|
|
|
|
**表清单**:
|
|
|
|
|
|
-| 表名 | 实体 | 更新策略 |
|
|
|
-|------|------|---------|
|
|
|
-| `tdm_usr_tag_ful_d` | 用户 | 全量重刷,日 |
|
|
|
-| `tdm_prd_tag_ful_d` | 商品 | 全量重刷,日 |
|
|
|
-| `tdm_shp_tag_ful_d` | 商家 | 全量重刷,日 |
|
|
|
+| 表名 | 实体 | 更新策略 | scope |
|
|
|
+|------|------|---------|---|
|
|
|
+| `tdm_usr_tag_d` | 用户 | 日更全量重刷 dt='${dt}',每天 INSERT OVERWRITE 单分区 | ✅ 1 期落地(kb/33 §2)|
|
|
|
+| `tdm_usr_tag_o` | 用户 | 往年总额凝固 dt='{yyyy}1231',单表多分区 insert-only | ✅ 1 期落地(kb/33 §3)|
|
|
|
+| `tdm_prd_tag_d` / `tdm_prd_tag_o` | 商品 | 同 schema | ⏸ 2 期 scope |
|
|
|
+| `tdm_shp_tag_d` / `tdm_shp_tag_o` | 商家 | 同 schema | ⏸ 2 期 scope |
|
|
|
|
|
|
**典型字段结构**:
|
|
|
|
|
|
@@ -61,7 +62,7 @@ DWD / DWS(事实 + 维度)
|
|
|
| `entity_id` | BIGINT | 实体 ID(user_id / product_id / shop_id) |
|
|
|
| `tag_code` | STRING | 标签编码(全局唯一,如 `usr_gender`、`usr_pref_sport`) |
|
|
|
| `tag_value` | STRING | 标签值(统一 STRING,下游按需转型) |
|
|
|
-| `tag_type` | STRING | 标签类型(`categorical` / `numeric` / `boolean` / `json`) |
|
|
|
+| `tag_type` | STRING | 标签类型(`attr` 属性 / `stat` 统计 / `rule` 规则;预留 `algo` 算法标签)|
|
|
|
| `confidence` | DECIMAL(5,4) | 置信度(0~1,规则标签填 1.0,模型标签填模型输出) |
|
|
|
| `etl_time` | TIMESTAMP | ETL 写入时间 |
|
|
|
| `dt` | STRING | 分区日期 |
|
|
|
@@ -71,8 +72,19 @@ DWD / DWS(事实 + 维度)
|
|
|
- 所有标签统一口径管理,便于建设标签字典元数据
|
|
|
- 支持按 `tag_code` 灵活查询任意标签组合
|
|
|
|
|
|
+**1 期落地标签清单**(用户域共 103 个 tag_code,详见 kb/33 §2.4 + §3.4):
|
|
|
+
|
|
|
+| 表 | 类别 | tag_code 数 | 内容 |
|
|
|
+|---|---|---|---|
|
|
|
+| `tdm_usr_tag_d` | attr 属性 | 7 | usr_level / usr_is_cert / usr_sex / usr_city / usr_register_time / usr_birth_month / usr_generation |
|
|
|
+| `tdm_usr_tag_d` | stat 偏好 30d | 32 | 16 品类 × {amt, cnt},`usr_pref_trade_{category}_{amt,cnt}_30d` |
|
|
|
+| `tdm_usr_tag_d` | stat 偏好 y{当年} | 32 | 16 品类 × {amt, cnt},`usr_pref_trade_{category}_{amt,cnt}_y{当年}`(1 期当年=2026)|
|
|
|
+| `tdm_usr_tag_o` | stat 偏好 y{往年} | 32 / 凝固年 | 16 品类 × {amt, cnt},`usr_pref_trade_{category}_{amt,cnt}_y{往年}`(1 期凝固 y2025)|
|
|
|
+
|
|
|
## 3. 核心标签宽表
|
|
|
|
|
|
+> **1 期 scope 外**:1 期标签未完善(kb/33 §7),等长表稳定 + 高频标签固定后再启动;过早做宽表会引出 schema 频繁 ALTER + 重刷历史。下面是设计预案。
|
|
|
+
|
|
|
从长表 pivot 高频、核心标签为列,供下游 ADS 和 BI 直接 JOIN,避免每次都对长表做条件聚合。
|
|
|
|
|
|
**表清单**:
|
|
|
@@ -124,6 +136,8 @@ GROUP BY entity_id
|
|
|
|
|
|
## 4. 人群包
|
|
|
|
|
|
+> **1 期 scope 外**:1 期不做圈选(kb/33 §7),等业务侧有实时圈选诉求后再启动。下面是设计预案。
|
|
|
+
|
|
|
以圈选规则为主键,存储实体 ID 集合,支持人群圈选和二次计算(交集、并集、差集)。
|
|
|
|
|
|
**阶段 1 为单表设计**:所有人群包存入一张表 `tdm_usr_crowd_ful_d`,每行一个人群(`crowd_code` 区分)。阶段 2+ 存储格式从 `ARRAY<BIGINT>` 升级为 `BINARY`(bitmap),但表结构不变。详见 §6 演进路线。
|
|
|
@@ -134,7 +148,7 @@ GROUP BY entity_id
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|------|------|
|
|
|
-| `tag_code` | 全局唯一编码,格式 `{实体}_{标签名}`(如 `usr_gender`、`prd_price_band`) |
|
|
|
+| `tag_code` | 全局唯一编码,详细命名约定见 kb/33 §4。属性 `usr_{属性名}`(如 `usr_sex` / `usr_city`);偏好 `usr_pref_{主题}_{category}_{metric}_{window}`(如 `usr_pref_trade_basketball_amt_30d`)|
|
|
|
| `tag_name` | 中文名称 |
|
|
|
| `entity_type` | `usr` / `prd` / `shp` |
|
|
|
| `tag_type` | `categorical` / `numeric` / `boolean` / `json` |
|