Просмотр исходного кода

docs(kb): 文档号段重排为 6 语义带(平台/接入/建模/指标标签/规范/决策)

- 13 篇改号:raw接入 25→15;时间语义 26→21 / raw 24→22 / dwd 27→23 / dim 28→24 / dws 29→25 / tdm 33→26;指标 22→30 / 标签 23→31 / 标签字典 34→32;命名 21→40 / 开发 30→41 / UDF 31→42
- 全量重写跨文档号引用:kb / README / tests + jobs/manual/conf/bin 头注释 + 93 ADR 引用

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 неделя назад
Родитель
Сommit
e4133289a7
51 измененных файлов с 136 добавлено и 136 удалено
  1. 15 15
      README.md
  2. 1 1
      bin/datax-sync-template-gen.py
  3. 1 1
      conf/templates/datax/mask/mask.template.ini
  4. 2 2
      jobs/dim/trd/dim_trd_card_group_ful_d.sql
  5. 1 1
      jobs/dim/usr/dim_usr_user_ful_d.sql
  6. 3 3
      jobs/dws/usr/dws_usr_user_trade_1d.sql
  7. 1 1
      jobs/raw/prd/raw_prd_checklist_base_info_inc_d.mask.ini
  8. 1 1
      jobs/raw/prd/raw_prd_panini_checklist_base_info_inc_d.mask.ini
  9. 1 1
      jobs/raw/prd/raw_prd_panini_checklist_version_config_inc_d.mask.ini
  10. 1 1
      jobs/raw/shp/raw_shp_tzy_merchant_info_inc_d.mask.ini
  11. 1 1
      jobs/raw/trd/raw_trd_card_group_info_inc_d.mask.ini
  12. 1 1
      jobs/raw/trd/raw_trd_card_group_order_info_inc_d.mask.ini
  13. 1 1
      jobs/raw/usr/raw_usr_app_base_user_inc_d.mask.ini
  14. 1 1
      jobs/raw/usr/raw_usr_app_user_cert_info_inc_d.mask.ini
  15. 6 6
      jobs/tdm/usr/tdm_usr_tag_d.sql
  16. 1 1
      kb/00-项目导览.md
  17. 1 1
      kb/15-raw接入流程.md
  18. 4 4
      kb/20-数仓分层与建模.md
  19. 0 0
      kb/21-时间语义.md
  20. 0 0
      kb/22-raw建模.md
  21. 3 3
      kb/23-dwd建模.md
  22. 2 2
      kb/24-dim建模.md
  23. 3 3
      kb/25-dws建模.md
  24. 8 8
      kb/26-tdm建模.md
  25. 2 2
      kb/30-指标体系.md
  26. 16 16
      kb/31-标签体系.md
  27. 6 6
      kb/32-标签字典.md
  28. 1 1
      kb/40-命名规范.md
  29. 6 6
      kb/41-开发规范.md
  30. 0 0
      kb/42-UDF手册.md
  31. 1 1
      kb/91-重构备忘.md
  32. 6 6
      kb/93-架构决策.md
  33. 1 1
      manual/backfill/20260509_dim_usr_user_ful_d_init.sql
  34. 2 2
      manual/backfill/20260510_dim_trd_card_group_ful_d_init.sql
  35. 2 2
      manual/backfill/20260510_dwd_trd_order_pay_apd_d_init.sql
  36. 2 2
      manual/backfill/20260510_dws_usr_user_trade_1d_init.sql
  37. 2 2
      manual/backfill/20260511_tdm_usr_tag_o_y2025.sql
  38. 3 3
      manual/ddl/dim/trd/dim_trd_card_group_ful_d_create.sql
  39. 3 3
      manual/ddl/dim/usr/dim_usr_user_ful_d_create.sql
  40. 6 6
      manual/ddl/dwd/trd/dwd_trd_order_pay_apd_d_create.sql
  41. 5 5
      manual/ddl/dws/usr/dws_usr_user_trade_1d_create.sql
  42. 1 1
      manual/ddl/raw/prd/raw_prd_checklist_base_info_inc_d_create.sql
  43. 1 1
      manual/ddl/raw/prd/raw_prd_panini_checklist_base_info_inc_d_create.sql
  44. 1 1
      manual/ddl/raw/prd/raw_prd_panini_checklist_version_config_inc_d_create.sql
  45. 1 1
      manual/ddl/raw/shp/raw_shp_tzy_merchant_info_inc_d_create.sql
  46. 1 1
      manual/ddl/raw/trd/raw_trd_card_group_info_inc_d_create.sql
  47. 1 1
      manual/ddl/raw/usr/raw_usr_app_base_user_inc_d_create.sql
  48. 1 1
      manual/ddl/raw/usr/raw_usr_app_user_cert_info_inc_d_create.sql
  49. 3 3
      manual/ddl/tdm/usr/tdm_usr_tag_d_create.sql
  50. 2 2
      manual/ddl/tdm/usr/tdm_usr_tag_o_create.sql
  51. 1 1
      tests/README.md

+ 15 - 15
README.md

@@ -83,24 +83,24 @@ PG/ES ──DataX(raw)──> RAW ──> ODS ──> DWD ──> DWS ──> TD
 | 文档 | 职责 |
 |----|----|
 | [20-数仓分层与建模](kb/20-数仓分层与建模.md) | **建模方法论**:分层定义、主题域、总线矩阵、维度五步法 |
-| [21-命名规范](kb/21-命名规范.md) | **命名规则**:Hive 表 / 字段 / 词根字典 + 建表 Checklist |
-| [22-指标体系](kb/22-指标体系.md) | **指标字典**:指标 / 维度 / 度量定义与口径 |
-| [23-标签体系](kb/23-标签体系.md) | **TDM 画像**:用户 / 商品 / 商家标签 |
-| [24-raw 建模](kb/24-raw建模.md) | **raw 层字段裁剪决策**:各 raw 表三态标记(保留 / 明性裁 / 隐性裁)+ 决策理由溯源 |
-| [25-raw 接入流程](kb/25-raw接入流程.md) | **新表入仓标准 8 步**:sync 生成器 + mask 配置 + DDL 生成器 + raw 建模文档协同 |
-| [26-时间语义](kb/26-时间语义.md) | **时间变量约定**:T 任务日锚点 + DS 变量底层 + cdt/dt/tdt/pdt 项目参数 + raw/ods 各层 dt 语义 + 重跑幂等条件 |
-| [27-dwd 建模](kb/27-dwd建模.md) | **DWD 字段建模**:业务过程拆分 + 维度退化策略 + 单分区不回算 + 各业务过程字段表 |
-| [28-dim 建模](kb/28-dim建模.md) | **DIM 字段建模**:ful_d 优先选型 + ful→zip 触发条件 + 跑批策略(初始化 + 增量合并)+ 脏数据清洗位置 + 各实体字段表 |
-| [29-dws 建模](kb/29-dws建模.md) | **DWS 字段建模**:日聚合主题宽表单一职责 + 维度退化触发条件 + N=2 回算(与 DWD 对齐)+ dws_usr_user_trade_1d 字段表 |
-| [33-tdm 建模](kb/33-tdm建模.md) | **TDM 字段建模**:EAV 7 字段不扩 + _d 日更 / _o 一次性凝固分表 + tag_code 命名约定 + 16 品类 × 4 窗口消费明细统计 + 7 属性 + 跨年扩张规则 |
-| [34-标签字典](kb/34-标签字典.md) | **标签字典权威源**:103 标签全量(编码 / 口径 / 业务价值 / 示例)+ 编码规则 + 跨年滚动 + INTERSECT 圈选 SQL 示例(读者:运营 / 数据分析师)|
+| [40-命名规范](kb/40-命名规范.md) | **命名规则**:Hive 表 / 字段 / 词根字典 + 建表 Checklist |
+| [30-指标体系](kb/30-指标体系.md) | **指标字典**:指标 / 维度 / 度量定义与口径 |
+| [31-标签体系](kb/31-标签体系.md) | **TDM 画像**:用户 / 商品 / 商家标签 |
+| [24-raw 建模](kb/22-raw建模.md) | **raw 层字段裁剪决策**:各 raw 表三态标记(保留 / 明性裁 / 隐性裁)+ 决策理由溯源 |
+| [25-raw 接入流程](kb/15-raw接入流程.md) | **新表入仓标准 8 步**:sync 生成器 + mask 配置 + DDL 生成器 + raw 建模文档协同 |
+| [21-时间语义](kb/21-时间语义.md) | **时间变量约定**:T 任务日锚点 + DS 变量底层 + cdt/dt/tdt/pdt 项目参数 + raw/ods 各层 dt 语义 + 重跑幂等条件 |
+| [27-dwd 建模](kb/23-dwd建模.md) | **DWD 字段建模**:业务过程拆分 + 维度退化策略 + 单分区不回算 + 各业务过程字段表 |
+| [28-dim 建模](kb/24-dim建模.md) | **DIM 字段建模**:ful_d 优先选型 + ful→zip 触发条件 + 跑批策略(初始化 + 增量合并)+ 脏数据清洗位置 + 各实体字段表 |
+| [29-dws 建模](kb/25-dws建模.md) | **DWS 字段建模**:日聚合主题宽表单一职责 + 维度退化触发条件 + N=2 回算(与 DWD 对齐)+ dws_usr_user_trade_1d 字段表 |
+| [33-tdm 建模](kb/26-tdm建模.md) | **TDM 字段建模**:EAV 7 字段不扩 + _d 日更 / _o 一次性凝固分表 + tag_code 命名约定 + 16 品类 × 4 窗口消费明细统计 + 7 属性 + 跨年扩张规则 |
+| [32-标签字典](kb/32-标签字典.md) | **标签字典权威源**:103 标签全量(编码 / 口径 / 业务价值 / 示例)+ 编码规则 + 跨年滚动 + INTERSECT 圈选 SQL 示例(读者:运营 / 数据分析师)|
 
 ### 3x 开发流程
 
 | 文档 | 职责 |
 |----|----|
-| [30-开发规范](kb/30-开发规范.md) | **开发方法论**:TPAD、数据开发流程、代码/SQL/Git 规范、DDL/jobs 文件组织、manual/ 临时 SQL、样板、存储 / raw 类型契约 |
-| [31-UDF手册](kb/31-UDF手册.md) | **UDF 登记表**:通用 + 业务 UDF 清单 |
+| [41-开发规范](kb/41-开发规范.md) | **开发方法论**:TPAD、数据开发流程、代码/SQL/Git 规范、DDL/jobs 文件组织、manual/ 临时 SQL、样板、存储 / raw 类型契约 |
+| [42-UDF手册](kb/42-UDF手册.md) | **UDF 登记表**:通用 + 业务 UDF 清单 |
 
 ### 9x 演进与决策
 
@@ -115,5 +115,5 @@ PG/ES ──DataX(raw)──> RAW ──> ODS ──> DWD ──> DWS ──> TD
 1. [00-项目导览](kb/00-项目导览.md) — 了解模块全貌
 2. [01-运行环境](kb/01-运行环境.md) — 了解基础设施
 3. [20-数仓分层与建模](kb/20-数仓分层与建模.md) — 了解建模方法论
-4. [21-命名规范](kb/21-命名规范.md) — 熟悉命名规则
-5. [30-开发规范](kb/30-开发规范.md) — 熟悉开发流程
+4. [40-命名规范](kb/40-命名规范.md) — 熟悉命名规则
+5. [41-开发规范](kb/41-开发规范.md) — 熟悉开发流程

+ 1 - 1
bin/datax-sync-template-gen.py

@@ -6,7 +6,7 @@ PG → HDFS DataX sync ini 模板生成器 + raw 建模 metadata 表 + 表探查
 一次跑同时产出三件:
   1. PG 表探查段(行数估值 + 锚点字段维护质量 + 软删字段命中),落 md 头部
   2. PG 全字段 metadata markdown 表(序号/字段名/中文名/数据类型/主键标识/
-     脱敏类型)—— 用于 kb/24 raw 建模文档
+     脱敏类型)—— 用于 kb/22 raw 建模文档
   3. 全字段 sync ini 模板 —— 开发者按 md 讨论结果手动裁剪字段 / 改 where /
      加 [mask] / 调 splitPk / 改 writer.path 表名后缀等,再提交到 jobs/raw/{域}/
 

+ 1 - 1
conf/templates/datax/mask/mask.template.ini

@@ -5,7 +5,7 @@
 #   1. sync 生成器(bin/datax-sync-template-gen.py -mask-conf)
 #      → 生成几乎可用 ini:trim 字段从 reader.column 剔除(保持 PG 原顺序);
 #                          其他 method 渲染 [mask] 段供 DataX reader 端脱敏
-#      → md 脱敏类型列填好(kb/24 raw 建模文档手动同步)
+#      → md 脱敏类型列填好(kb/22 raw 建模文档手动同步)
 #   2. 数据质量模块(后期实现)→ schema 变更探查 ground truth
 
 [mask]

+ 2 - 2
jobs/dim/trd/dim_trd_card_group_ful_d.sql

@@ -1,7 +1,7 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:dim_trd_card_group_ful_d 日常增量(kb/28 §1.3 + ADR-08,业界主流模式 B):
+-- 目的:dim_trd_card_group_ful_d 日常增量(kb/24 §1.3 + ADR-08,业界主流模式 B):
 --      (a) today_changed = 今日 ods cgi 增量 group_info_id 集合;
 --      (b) today_rebuilt = 今日 ods cgi 行(sport→category 清洗);
 --      (c) 昨日 dim 中今日没变的 group_info_id (NOT IN today_changed) 直接保留;
@@ -9,7 +9,7 @@
 -- 状态:[草案]
 -- 备注:sched=T,${dt}=T-1,${pdt}=T-2;
 --      单源(ods.cgi 仅一张表)写法比 dim_usr_user 简单:今日变更行直接用今日 cgi 字段,无需 LEFT JOIN 昨日 dim 兜底;
---      sport→category 清洗规则 init 与 sche 同步实现(kb/28 §3.2);
+--      sport→category 清洗规则 init 与 sche 同步实现(kb/24 §3.2);
 --      性能:dim 大表只 scan + broadcast NOT IN 剪枝,不参与 shuffle;
 --      前置 DS DEPENDENT:ods.cgi.dt=${dt} + dim.dt=${pdt}
 

+ 1 - 1
jobs/dim/usr/dim_usr_user_ful_d.sql

@@ -1,7 +1,7 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-09
 -- 工单:(无)
--- 目的:dim_usr_user_ful_d 日常增量(kb/28 §1.3,业界主流模式 B):
+-- 目的:dim_usr_user_ful_d 日常增量(kb/24 §1.3,业界主流模式 B):
 --      (a) 找今日变更 user_id (base 或 cert 任一变);
 --      (b) 这些 user 重 join 形成 today_rebuilt:base 字段 CASE WHEN bu IS NOT NULL THEN bu.x ELSE o.x,cert 字段同理;
 --      (c) 昨日 dim 中今日没变的 user (NOT IN today_changed) 直接保留;

+ 3 - 3
jobs/dws/usr/dws_usr_user_trade_1d.sql

@@ -1,15 +1,15 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:dws_usr_user_trade_1d 日常增量(kb/29 §1.4 + §2):
+-- 目的:dws_usr_user_trade_1d 日常增量(kb/25 §1.4 + §2):
 --      回算近 2 日(与 dwd N=2 对齐,漂移连锁补偿,kb/93 ADR-09):扫 dwd.dt IN (${dt}, ${pdt}) +
---      过滤 category IS NOT NULL(脏数据 other 已在 DIM 清洗为 NULL,kb/28 §3.2)+
+--      过滤 category IS NOT NULL(脏数据 other 已在 DIM 清洗为 NULL,kb/24 §3.2)+
 --      GROUP BY (user_id, category, dt) 聚合 +
 --      动态分区写入 dws.dt IN (${dt}, ${pdt})
 -- 状态:[草案]
 -- 备注:sched=T,${dt}=T-1,${pdt}=T-2;
 --      回算 N=2 兜底跨零点漂移连锁补偿(dwd 同步,参 kb/93 ADR-09);
---      INSERT OVERWRITE 动态分区(kb/26 §8 项目默认 DYNAMIC mode):只覆盖 SELECT 出现的 dt 分区,不动其他历史分区;
+--      INSERT OVERWRITE 动态分区(kb/21 §8 项目默认 DYNAMIC mode):只覆盖 SELECT 出现的 dt 分区,不动其他历史分区;
 --      前置 DS DEPENDENT:dwd_trd_order_pay_apd_d.${dt}
 
 INSERT OVERWRITE TABLE dws.dws_usr_user_trade_1d PARTITION (dt)

+ 1 - 1
jobs/raw/prd/raw_prd_checklist_base_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_prd_checklist_base_info_inc_d
 ; 配套 sync ini:jobs/raw/prd/raw_prd_checklist_base_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/prd/raw_prd_checklist_base_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §8
+; 配套建模文档:kb/22-raw建模.md §8
 ;
 ; 字段决策来源:inbox 3.2.2.5 商品域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/prd/raw_prd_panini_checklist_base_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_prd_panini_checklist_base_info_inc_d
 ; 配套 sync ini:jobs/raw/prd/raw_prd_panini_checklist_base_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/prd/raw_prd_panini_checklist_base_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §6
+; 配套建模文档:kb/22-raw建模.md §6
 ;
 ; 字段决策来源:inbox 3.2.2.5 商品域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/prd/raw_prd_panini_checklist_version_config_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_prd_panini_checklist_version_config_inc_d
 ; 配套 sync ini:jobs/raw/prd/raw_prd_panini_checklist_version_config_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/prd/raw_prd_panini_checklist_version_config_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §7
+; 配套建模文档:kb/22-raw建模.md §7
 ;
 ; 字段决策来源:inbox 3.2.2.5 商品域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/shp/raw_shp_tzy_merchant_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_shp_tzy_merchant_info_inc_d
 ; 配套 sync ini:jobs/raw/shp/raw_shp_tzy_merchant_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/shp/raw_shp_tzy_merchant_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §5
+; 配套建模文档:kb/22-raw建模.md §5
 ;
 ; 字段决策来源:inbox 3.2.2.3 店铺域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/trd/raw_trd_card_group_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_trd_card_group_info_inc_d
 ; 配套 sync ini:jobs/raw/trd/raw_trd_card_group_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/trd/raw_trd_card_group_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §2
+; 配套建模文档:kb/22-raw建模.md §2
 ;
 ; 字段决策来源:inbox 3.2.2.4 交易域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/trd/raw_trd_card_group_order_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_trd_card_group_order_info_inc_d
 ; 配套 sync ini:jobs/raw/trd/raw_trd_card_group_order_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/trd/raw_trd_card_group_order_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §1
+; 配套建模文档:kb/22-raw建模.md §1
 ;
 ; 来源:本次 mask conf 机制上线前,inc_d ini reader.column 已确定为 91 入仓字段
 ;       (PG 全字段 120 砍 29)。本配置按 29 个不入仓字段反推为 trim,

+ 1 - 1
jobs/raw/usr/raw_usr_app_base_user_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_usr_app_base_user_inc_d
 ; 配套 sync ini:jobs/raw/usr/raw_usr_app_base_user_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/usr/raw_usr_app_base_user_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §3
+; 配套建模文档:kb/22-raw建模.md §3
 ;
 ; 字段决策来源:inbox 3.2.2.2 用户域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 1 - 1
jobs/raw/usr/raw_usr_app_user_cert_info_inc_d.mask.ini

@@ -1,7 +1,7 @@
 ; 表名:raw_usr_app_user_cert_info_inc_d
 ; 配套 sync ini:jobs/raw/usr/raw_usr_app_user_cert_info_inc_d.ini
 ; 配套 DDL:manual/ddl/raw/usr/raw_usr_app_user_cert_info_inc_d_create.sql
-; 配套建模文档:kb/24-raw建模.md §4
+; 配套建模文档:kb/22-raw建模.md §4
 ;
 ; 字段决策来源:inbox 3.2.2.2 用户域建模.md(分析师库 ods 草稿) vs PG 业务库实际 schema 对账。
 ;   - 明性裁:inbox 涉密列标 y / y(hash) / y(sync -month) → 审批会议决策。

+ 6 - 6
jobs/tdm/usr/tdm_usr_tag_d.sql

@@ -1,19 +1,19 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-12
 -- 工单:(无)
--- 目的:tdm_usr_tag_d 日常调度 + 手动 init 复用(kb/33 §2):
+-- 目的:tdm_usr_tag_d 日常调度 + 手动 init 复用(kb/26 §2):
 --      INSERT OVERWRITE PARTITION (dt='${dt}') 静态单分区全量重刷;
 --      7 属性(attr) ← dim_usr_user_ful_d.dt='${dt}' 各属性 UNION ALL;
 --      4 消费明细统计窗口(stat,1 期拼团订单粒度) ← dwd_trd_order_pay_apd_d 跨层下钻
 --          (1 期 dws 上层无消费方,跨层取数,kb/93 ADR-10)滚动 30d / y{当年} 累计聚合 UNION ALL;
---      EAV 7 字段(kb/33 §1.2);WHERE 源字段 IS NOT NULL / HAVING SUM > 0 过滤空标签
+--      EAV 7 字段(kb/26 §1.2);WHERE 源字段 IS NOT NULL / HAVING SUM > 0 过滤空标签
 -- 状态:[草案]
--- 备注:sched=T,${dt}=T-1(项目级 globalParam,kb/26);
+-- 备注:sched=T,${dt}=T-1(项目级 globalParam,kb/21);
 --      30d 滚动起点 = DATE_SUB(${dt}, 29) [T-30, T-1];
 --      y{当年} 累计起点 = '${dt}' 前 4 位 + '0101' = 当年 01-01;
 --      tag_code 当年通过 SUBSTR('${dt}', 1, 4) 拼接,跨年自然滚动(27-01-01 起自动从 y2026 切到 y2027);
---      stat 段 WHERE 必带 order_type='group'(1 期拼团粒度,kb/34 §编码规则);
---      属性细节口径(出生世代切片 / sex 原值 / 等)按 kb/33 §6 默认,业务回头校准换字段不动 schema(EAV 收益);
+--      stat 段 WHERE 必带 order_type='group'(1 期拼团粒度,kb/32 §编码规则);
+--      属性细节口径(出生世代切片 / sex 原值 / 等)按 kb/26 §6 默认,业务回头校准换字段不动 schema(EAV 收益);
 --      birthday_cert 业务库 STRING 多格式,REPLACE 去 '-' 后取 yyyyMM/yyyy 兼容 'yyyy-MM-dd' 与 'yyyyMMdd';
 --      前置 DS DEPENDENT:dim_usr_user_ful_d.${dt} + dwd_trd_order_pay_apd_d.${dt}
 
@@ -103,7 +103,7 @@ SELECT entity_id, tag_code, tag_value, tag_type, confidence, etl_time FROM (
 
     UNION ALL
 
-    -- 7. usr_generation 出生世代(10 年切片中文 N 后,kb/33 §6)
+    -- 7. usr_generation 出生世代(10 年切片中文 N 后,kb/26 §6)
     SELECT
         user_id                                                  AS entity_id,
         'usr_generation'                                         AS tag_code,

+ 1 - 1
kb/00-项目导览.md

@@ -57,7 +57,7 @@ poyee-data-warehouse/              # 项目根目录(仓库名 = 部署名)
 │   ├── env.sh                     #   环境变量 / 路径(bash + Python 单源)
 │   ├── spark-defaults.conf
 │   ├── spark-tuning.conf
-│   ├── templates/                 #   开发样板(见 30-开发规范.md §7)
+│   ├── templates/                 #   开发样板(见 41-开发规范.md §7)
 │   │   ├── datax/
 │   │   │   ├── datasource/
 │   │   │   └── sync/

+ 1 - 1
kb/25-raw接入流程.md → kb/15-raw接入流程.md

@@ -48,7 +48,7 @@
 ┌──────────────────┐
-│ Step 8:PR 提交   │ 四件套:mask.ini + sync.ini + DDL + kb/24 章节
+│ Step 8:PR 提交   │ 四件套:mask.ini + sync.ini + DDL + kb/22 章节
 │ 四件套            │
 └──────────────────┘
 ```

+ 4 - 4
kb/20-数仓分层与建模.md

@@ -143,7 +143,7 @@ RDS PG / ES ──DataX──▶ RAW ──SparkSQL──▶ ODS ──▶ DWD 
 
 **建模规则:**
 
-| 类型 | 归属 | 命名(参考 `21-命名规范.md`)| 示例 |
+| 类型 | 归属 | 命名(参考 `40-命名规范.md`)| 示例 |
 |---|---|---|---|
 | 业务事件 | DWD 事实表,每个业务过程一张 | `dwd_{域}_{业务过程}_apd_d` | `dwd_trd_order_create_apd_d`、`dwd_trd_order_pay_apd_d` |
 | 实体状态 | DIM 拉链表 | `dim_{域}_{实体}_zip_d` | `dim_trd_order_zip_d`(含 `current_status` / 各阶段时间 / `start_date` / `end_date`) |
@@ -420,6 +420,6 @@ raw 层是否需要 `etl_load_time` / `src_file` / `src_row_no` 等框架字段
 
 ## 9. 相关文档
 
-- [命名规范](21-命名规范.md) — 表/字段命名五段式
-- [指标体系](22-指标体系.md) — 原子/派生指标定义
-- [标签体系](23-标签体系.md) — TDM 层画像/标签
+- [命名规范](40-命名规范.md) — 表/字段命名五段式
+- [指标体系](30-指标体系.md) — 原子/派生指标定义
+- [标签体系](31-标签体系.md) — TDM 层画像/标签

+ 0 - 0
kb/26-时间语义.md → kb/21-时间语义.md


+ 0 - 0
kb/24-raw建模.md → kb/22-raw建模.md


+ 3 - 3
kb/27-dwd建模.md → kb/23-dwd建模.md

@@ -1,6 +1,6 @@
 # DWD 建模
 
-> 本数仓 DWD 层(明细层)的字段建模与设计约定。建模方法论(事件 vs 状态拆分、维度建模五步、星型模型)见 `20-数仓分层与建模.md` §5;命名规则见 `21-命名规范.md` §3.4;时间语义见 `26-时间语义.md`。
+> 本数仓 DWD 层(明细层)的字段建模与设计约定。建模方法论(事件 vs 状态拆分、维度建模五步、星型模型)见 `20-数仓分层与建模.md` §5;命名规则见 `40-命名规范.md` §3.4;时间语义见 `21-时间语义.md`。
 >
 > 本文档按"业务过程一节"组织,每节包含业务过程定义 / 粒度 / dt 锚点 / 维度退化策略 / 字段表。
 
@@ -16,12 +16,12 @@
 
 ### 1.3 维度退化策略
 
-DWD 直引 DIM 层已清洗字段,**不在 DWD 二次清洗、不做空值兜底**。如 `cgi.sport` 脏数据归一在 `dim_trd_card_group_ful_d` 完成(见 `28-dim建模.md §3.2`),DWD pay 维度退化时直引 DIM 已清洗的 `category`。
+DWD 直引 DIM 层已清洗字段,**不在 DWD 二次清洗、不做空值兜底**。如 `cgi.sport` 脏数据归一在 `dim_trd_card_group_ful_d` 完成(见 `24-dim建模.md §3.2`),DWD pay 维度退化时直引 DIM 已清洗的 `category`。
 
 ### 1.4 分区与写入
 
 - 分区锚点:业务时间(事件发生日,如 `payment_success_time`),不是抽取日
-- 写入策略:**回算近 2 日**(`dt IN (${dt}, ${pdt})`),兜底跨零点 ODS 漂移(业务时间 T-1 但 update_time 漂到 T 的事件,第二天跑批时通过扫 ods.dt=T 兜回);动态分区写入(kb/26 §8 项目默认 DYNAMIC mode 只覆盖 SELECT 出现的 dt,不动其他历史分区)
+- 写入策略:**回算近 2 日**(`dt IN (${dt}, ${pdt})`),兜底跨零点 ODS 漂移(业务时间 T-1 但 update_time 漂到 T 的事件,第二天跑批时通过扫 ods.dt=T 兜回);动态分区写入(kb/21 §8 项目默认 DYNAMIC mode 只覆盖 SELECT 出现的 dt,不动其他历史分区)
 - 回算窗口 N:本项目按业界主流 N=2(阿里 OneData / 字节 / 美团默认);金融 / 强稳定性场景可调到 N=3 或更大(kb/20 §7.3 通用兜底默认)
 - 重跑幂等:`INSERT OVERWRITE PARTITION (dt)` 动态分区
 - 调度依赖:DS DEPENDENT 同 dt ODS + 同 dt DIM ful_d 双前置(按 Kimball 维度退化原则,DWD 必依赖 DIM 同分区跑完)

+ 2 - 2
kb/28-dim建模.md → kb/24-dim建模.md

@@ -1,6 +1,6 @@
 # DIM 建模
 
-> 本数仓 DIM 层(维度层)的字段建模与设计约定。建模方法论(拉链表 SCD2 vs 全量快照选型、拉链表分区特殊性)见 `20-数仓分层与建模.md` §5.5 / §7.3;命名规则见 `21-命名规范.md` §3.3。
+> 本数仓 DIM 层(维度层)的字段建模与设计约定。建模方法论(拉链表 SCD2 vs 全量快照选型、拉链表分区特殊性)见 `20-数仓分层与建模.md` §5.5 / §7.3;命名规则见 `40-命名规范.md` §3.3。
 >
 > 本文档按"实体一节"组织,每节包含实体范围 / 关键设计 / 字段表。
 
@@ -108,7 +108,7 @@ ODS 跨 dt 不去重 → 同 pk 多分区并存 → DIM 取每个 pk 的最新
 
 ### 3.2 category 字段(命名 + 脏数据清洗)
 
-**字段命名**:业务库原字段 `card_group_info.sport` → 数仓字段名 `category`(lv2 叶子品类)。按 `kb/21 §1` 一词一义原则,业务库 sport 实际已多义(16 个值里含"影视收藏 / 综合收藏 / 综合体育"等非 sport 语义),数仓字段改用中性的 `category`。lv1 大类(业务库 `first_sport`,1 期不引)未来引入时命名为 `main_category`。
+**字段命名**:业务库原字段 `card_group_info.sport` → 数仓字段名 `category`(lv2 叶子品类)。按 `kb/40 §1` 一词一义原则,业务库 sport 实际已多义(16 个值里含"影视收藏 / 综合收藏 / 综合体育"等非 sport 语义),数仓字段改用中性的 `category`。lv1 大类(业务库 `first_sport`,1 期不引)未来引入时命名为 `main_category`。
 
 **业务依据**(取自拼团粒度而非产品粒度):拼团可上单个产品,也可组合多个产品(可能跨类);以商家设置的拼团大类(`cgi.sport`)为准聚合最贴近业务侧分析口径,因此 `category` 取自拼团表本身,不通过底层产品表(panini / checklist)反查。
 

+ 3 - 3
kb/29-dws建模.md → kb/25-dws建模.md

@@ -1,6 +1,6 @@
 # DWS 建模
 
-> 本数仓 DWS 层(汇总层)的字段建模与设计约定。建模方法论(主题宽表 / 维度退化原则 / 业界 OneData 范式)见 `20-数仓分层与建模.md` §5;命名规则见 `21-命名规范.md` §3.5;时间语义见 `26-时间语义.md`。
+> 本数仓 DWS 层(汇总层)的字段建模与设计约定。建模方法论(主题宽表 / 维度退化原则 / 业界 OneData 范式)见 `20-数仓分层与建模.md` §5;命名规则见 `40-命名规范.md` §3.5;时间语义见 `21-时间语义.md`。
 >
 > 本文档按"主题宽表一节"组织,每节包含主题定义 / 粒度 / 来源 / dt 锚点 / 度量字段说明 / 字段表。
 
@@ -38,7 +38,7 @@ DWS 只做 `_1d` 日聚合主题宽表,不爆窗口表(不建 `_30d` / `_y{
 - 分区锚点:业务时间(与上游 DWD 对齐,如 `DATE(payment_success_time)`)
 - 写入策略:**回算近 2 日**(`dt IN (${dt}, ${pdt})`),与 DWD N=2 对齐(DWD 漂移连锁补偿,参 `93-架构决策.md` ADR-09)
 - 分区类型:动态分区 `PARTITION (dt)`
-- 重跑幂等:`INSERT OVERWRITE PARTITION (dt)` 项目默认 DYNAMIC mode(kb/26 §8)只覆盖 SELECT 出现的 dt,不动其他历史分区
+- 重跑幂等:`INSERT OVERWRITE PARTITION (dt)` 项目默认 DYNAMIC mode(kb/21 §8)只覆盖 SELECT 出现的 dt,不动其他历史分区
 - 调度依赖:DS DEPENDENT 同 dt DWD 跑完
 
 ---
@@ -69,7 +69,7 @@ DWD 已完成维度退化(`category` 来自 `dim_trd_card_group_ful_d`,DIM 
 
 **口径要点**:
 
-- `pay_amt_cny`(Net Revenue)= **消费明细统计金额口径**。DWD 已内置 `mer_act%` 修正规则(mer_act% 时取 `point/100`,否则取 `actual_payment`),详见 kb/27 §2.5
+- `pay_amt_cny`(Net Revenue)= **消费明细统计金额口径**。DWD 已内置 `mer_act%` 修正规则(mer_act% 时取 `point/100`,否则取 `actual_payment`),详见 kb/23 §2.5
 - `payable_amt_cny`(GMV)= **业务通用 GMV 口径**,与统计标签解耦(业务侧 SQL 常用)
 - `pay_order_cnt = COUNT(DISTINCT order_id)` = **消费明细统计次数口径**(A2 锁定,不用份数;1 期 TDM 跨层下钻 DWD 后用 `COUNT(DISTINCT order_id)` 直接计算)
 - `purchase_cnt`(份数)保留作 2 期备用 + 审计,1 期标签不用

+ 8 - 8
kb/33-tdm建模.md → kb/26-tdm建模.md

@@ -1,6 +1,6 @@
 # TDM 建模
 
-> 本数仓 TDM 层(主题域模型 / 画像层)的字段建模与设计约定。建模方法论见 `20-数仓分层与建模.md` §5;标签体系总览见 `23-标签体系.md`;命名规则见 `21-命名规范.md`;时间语义见 `26-时间语义.md`。
+> 本数仓 TDM 层(主题域模型 / 画像层)的字段建模与设计约定。建模方法论见 `20-数仓分层与建模.md` §5;标签体系总览见 `31-标签体系.md`;命名规则见 `40-命名规范.md`;时间语义见 `21-时间语义.md`。
 >
 > 本文档按"表一节"组织,每节包含表用途 / 粒度 / 来源 / tag_code 清单 / 写入策略。
 
@@ -10,7 +10,7 @@
 
 所有 TDM 表必带 `etl_time TIMESTAMP` + 分区 `dt STRING`,`STORED AS ORC`。
 
-### 1.2 EAV 长表 schema(kb/23 §2 严守 7 字段)
+### 1.2 EAV 长表 schema(kb/31 §2 严守 7 字段)
 
 所有标签表共用 EAV 7 字段,**不扩展**:
 
@@ -95,13 +95,13 @@
 | `usr_trade_{category}_amt_y2026` | 某品类 26 年累计金额 | `SUM(pay_amt_cny)` from dwd WHERE dt IN [20260101, T-1] + order_type='group'(每天滚动覆盖)|
 | `usr_trade_{category}_cnt_y2026` | 某品类 26 年累计次数 | `COUNT(DISTINCT order_id)` 同口径 |
 
-`{category}` 是 16 品类占位(kb/28 §3.2 DIM 已清洗):Basketball / Soccer / MLB / TCG / PTCG / 影视收藏 / 综合体育 / 综合收藏 / NFL / NHL / UFC / WWE / Tennis / Esports / F1 / Golf。
+`{category}` 是 16 品类占位(kb/24 §3.2 DIM 已清洗):Basketball / Soccer / MLB / TCG / PTCG / 影视收藏 / 综合体育 / 综合收藏 / NFL / NHL / UFC / WWE / Tennis / Esports / F1 / Golf。
 
-**金额口径**:`SUM(pay_amt_cny)` = Net Revenue(A3 锁 1 期不扣减退款;GMV = `payable_amt_cny`,统计 amt 用 pay_amt_cny,见 kb/27 §2.5 / kb/29 §2.5)。
+**金额口径**:`SUM(pay_amt_cny)` = Net Revenue(A3 锁 1 期不扣减退款;GMV = `payable_amt_cny`,统计 amt 用 pay_amt_cny,见 kb/23 §2.5 / kb/25 §2.5)。
 
 **次数口径**:`COUNT(DISTINCT order_id)`(A2 锁定,1 期不用份数;dwd 订单粒度需 DISTINCT 而非 SUM)。
 
-> 详细 tag_code 字典 + 业务价值 + 圈选示例见 [kb/34-标签字典.md](34-标签字典.md)。
+> 详细 tag_code 字典 + 业务价值 + 圈选示例见 [kb/32-标签字典.md](32-标签字典.md)。
 
 ### 2.5 字段表
 
@@ -160,7 +160,7 @@
 
 **所有维度(品类 / 窗口 / 度量)全部 encode 到 tag_code**。下游按维度切片用 `tag_code LIKE 'usr_trade_%_amt_30d'` 等模式匹配。
 
-> 详细字段说明 + 业务价值 + 示例值见 [kb/34-标签字典.md](34-标签字典.md)。
+> 详细字段说明 + 业务价值 + 示例值见 [kb/32-标签字典.md](32-标签字典.md)。
 
 `{window}` 取值约定:
 
@@ -185,7 +185,7 @@
 
 ## 6. 属性细节默认口径(待业务回头校准)
 
-按 tdm.md 7 个属性,业务侧未给精确口径前先用合理默认(源字段已在 kb/28 §2 确认);调字段不动 schema(EAV 收益)。
+按 tdm.md 7 个属性,业务侧未给精确口径前先用合理默认(源字段已在 kb/24 §2 确认);调字段不动 schema(EAV 收益)。
 
 | tag_code | 默认口径 | 待业务确认 |
 |---|---|---|
@@ -201,7 +201,7 @@
 
 ## 7. 不在 1 期 scope
 
-- **TDM 宽表** `tdm_usr_profile_ful_d`:1 期标签未完善(业界规范长表稳定后再做宽表,见 kb/23 §3.2),2 期再评估
+- **TDM 宽表** `tdm_usr_profile_ful_d`:1 期标签未完善(业界规范长表稳定后再做宽表,见 kb/31 §3.2),2 期再评估
 - **TDM 人群包** `tdm_usr_crowd_ful_d`:1 期不做圈选
 - **商品标签 / 店铺标签**:tdm.md mermaid 图的 C / D 分支,1 期 scope 外
 - **algo 类标签**:`tag_type` 预留枚举值,1 期无实际数据;将来接 RFM / 用户生命周期预测等 ML 标签时启用

+ 2 - 2
kb/22-指标体系.md → kb/30-指标体系.md

@@ -152,5 +152,5 @@
 ## 7. 相关文档
 
 - [数仓分层与建模](20-数仓分层与建模.md) — 总线矩阵定义业务过程与维度
-- [命名规范](21-命名规范.md) — 字段词根字典(gmv/cnt/rto/...)
-- [标签体系](23-标签体系.md) — TDM 层画像/标签口径
+- [命名规范](40-命名规范.md) — 字段词根字典(gmv/cnt/rto/...)
+- [标签体系](31-标签体系.md) — TDM 层画像/标签口径

+ 16 - 16
kb/23-标签体系.md → kb/31-标签体系.md

@@ -38,7 +38,7 @@ DWD / DWS(事实 + 维度)
 
 **设计原则**:
 - 按**实体类型**分表(用户/商品/商家),不按标签主题拆表
-- 长表分 `_d` 日更(属性 snap + 当年累计 + 滚动窗口)/ `_o` 凝固(往年总额,按 `dt='{yyyy}1231'` 单表多分区,业界 Kimball 周期快照事实表标准);写入策略不同必须分表(详见 kb/33 §1.3)
+- 长表分 `_d` 日更(属性 snap + 当年累计 + 滚动窗口)/ `_o` 凝固(往年总额,按 `dt='{yyyy}1231'` 单表多分区,业界 Kimball 周期快照事实表标准);写入策略不同必须分表(详见 kb/26 §1.3)
 - 长表负责**全量明细存储**,宽表负责**高频服务**,人群包负责**圈选计算**
 - 前期只用 Hive 做离线标签计算,不引入额外组件
 
@@ -50,8 +50,8 @@ DWD / DWS(事实 + 维度)
 
 | 表名 | 实体 | 更新策略 | 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_usr_tag_d` | 用户 | 日更全量重刷 dt='${dt}',每天 INSERT OVERWRITE 单分区 | ✅ 1 期落地(kb/26 §2)|
+| `tdm_usr_tag_o` | 用户 | 往年总额凝固 dt='{yyyy}1231',单表多分区 insert-only | ✅ 1 期落地(kb/26 §3)|
 | `tdm_prd_tag_d` / `tdm_prd_tag_o` | 商品 | 同 schema | ⏸ 2 期 scope |
 | `tdm_shp_tag_d` / `tdm_shp_tag_o` | 商家 | 同 schema | ⏸ 2 期 scope |
 
@@ -72,11 +72,11 @@ DWD / DWS(事实 + 维度)
 - 所有标签统一口径管理,便于建设标签字典元数据
 - 支持按 `tag_code` 灵活查询任意标签组合
 
-**1 期落地标签清单**:用户域共 103 个 tag_code(7 attr + 64 stat 日更 + 32 stat 25 年凝固),详细 tag_code + 业务价值 + 计算口径 + 示例值见 [kb/34-标签字典.md](34-标签字典.md)。
+**1 期落地标签清单**:用户域共 103 个 tag_code(7 attr + 64 stat 日更 + 32 stat 25 年凝固),详细 tag_code + 业务价值 + 计算口径 + 示例值见 [kb/32-标签字典.md](32-标签字典.md)。
 
 ## 3. 核心标签宽表
 
-> **1 期 scope 外**:1 期标签未完善(kb/33 §7),等长表稳定 + 高频标签固定后再启动;过早做宽表会引出 schema 频繁 ALTER + 重刷历史。下面是设计预案。
+> **1 期 scope 外**:1 期标签未完善(kb/26 §7),等长表稳定 + 高频标签固定后再启动;过早做宽表会引出 schema 频繁 ALTER + 重刷历史。下面是设计预案。
 
 从长表 pivot 高频、核心标签为列,供下游 ADS 和 BI 直接 JOIN,避免每次都对长表做条件聚合。
 
@@ -129,7 +129,7 @@ GROUP BY entity_id
 
 ## 4. 人群包
 
-> **1 期 scope 外**:1 期不做圈选(kb/33 §7),等业务侧有实时圈选诉求后再启动。下面是设计预案。
+> **1 期 scope 外**:1 期不做圈选(kb/26 §7),等业务侧有实时圈选诉求后再启动。下面是设计预案。
 
 以圈选规则为主键,存储实体 ID 集合,支持人群圈选和二次计算(交集、并集、差集)。
 
@@ -139,13 +139,13 @@ GROUP BY entity_id
 
 所有 `tag_code` 必须在标签字典中注册后才能写入长表,确保编码唯一、口径明确。
 
-**字典权威源**:[kb/34-标签字典.md](34-标签字典.md)(103 个 tag_code 全量 + 编码规则 + 业务价值 + 示例值 + 圈选 SQL 示例)。
+**字典权威源**:[kb/32-标签字典.md](32-标签字典.md)(103 个 tag_code 全量 + 编码规则 + 业务价值 + 示例值 + 圈选 SQL 示例)。
 
 **字典元数据 schema(业务字典服务化时可参考)**:
 
 | 字段 | 说明 |
 |------|------|
-| `tag_code` | 全局唯一编码,详细命名约定见 kb/33 §4。属性 `usr_{属性名}`(如 `usr_sex`);消费明细统计 `usr_{主题}_{category}_{metric}_{window}`(如 `usr_trade_Basketball_amt_30d`)|
+| `tag_code` | 全局唯一编码,详细命名约定见 kb/26 §4。属性 `usr_{属性名}`(如 `usr_sex`);消费明细统计 `usr_{主题}_{category}_{metric}_{window}`(如 `usr_trade_Basketball_amt_30d`)|
 | `tag_name` | 中文名称 |
 | `entity_type` | `usr` / `prd` / `shp` |
 | `tag_type` | `attr` / `stat` / `rule`(预留 `algo`)|
@@ -155,16 +155,16 @@ GROUP BY entity_id
 | `owner` | 负责人 |
 | `is_core` | 是否进入宽表 |
 
-### 5.1 字典维护规约(kb/34 ↔ kb/33 ↔ SQL 联动)
+### 5.1 字典维护规约(kb/32 ↔ kb/26 ↔ SQL 联动)
 
-字典 kb/34 是业务字典权威源,kb/33 是建模约定 + 命名规则。两者按变化频率分层维护:
+字典 kb/32 是业务字典权威源,kb/26 是建模约定 + 命名规则。两者按变化频率分层维护:
 
 | 字典改动类型 | 联动改动范围 |
 |---|---|
-| 改命名规则(如 `usr_pref_` → `usr_`)| kb/33 §4 命名约定 + kb/34 全表 + 所有相关 SQL(jobs/tdm/ + manual/backfill/)|
-| 加 / 删 tag_code | kb/34 字典行 + 相关 SQL UNION ALL 段 + kb/23 §2 总数字(若变化)|
-| 改口径 / 业务价值 / 示例值 / 业务校准 | 只改 kb/34(kb/33 不动)|
-| 改 EAV schema 或 _d / _o 分表策略 | kb/33 §1.2 / §1.3 + 重写 SQL + kb/34 提示运营字典刷新 |
+| 改命名规则(如 `usr_pref_` → `usr_`)| kb/26 §4 命名约定 + kb/32 全表 + 所有相关 SQL(jobs/tdm/ + manual/backfill/)|
+| 加 / 删 tag_code | kb/32 字典行 + 相关 SQL UNION ALL 段 + kb/31 §2 总数字(若变化)|
+| 改口径 / 业务价值 / 示例值 / 业务校准 | 只改 kb/32(kb/26 不动)|
+| 改 EAV schema 或 _d / _o 分表策略 | kb/26 §1.2 / §1.3 + 重写 SQL + kb/32 提示运营字典刷新 |
 
 ## 6. 标签服务演进路线
 
@@ -329,5 +329,5 @@ Hive TDM(离线标签计算,唯一来源)
 ## 7. 相关文档
 
 - [数仓分层与建模](20-数仓分层与建模.md) -- TDM 层定位
-- [命名规范](21-命名规范.md) -- TDM 层命名规则(&sect;3.6)
-- [指标体系](22-指标体系.md) -- 指标与标签是独立体系,口径各自管理
+- [命名规范](40-命名规范.md) -- TDM 层命名规则(&sect;3.6)
+- [指标体系](30-指标体系.md) -- 指标与标签是独立体系,口径各自管理

+ 6 - 6
kb/34-标签字典.md → kb/32-标签字典.md

@@ -2,7 +2,7 @@
 
 > 业务字典权威源。读者:运营 / 数据分析师 / 标签消费方。
 >
-> 建模约定 / 命名规则见 [kb/33-tdm建模.md](33-tdm建模.md) §4;标签体系总览见 [kb/23-标签体系.md](23-标签体系.md);字典维护规约(字典 ↔ kb/33 ↔ SQL 联动)见 [kb/23 §5.1](23-标签体系.md#51-字典维护规约kb34--kb33--sql-联动)。
+> 建模约定 / 命名规则见 [kb/26-tdm建模.md](26-tdm建模.md) §4;标签体系总览见 [kb/31-标签体系.md](31-标签体系.md);字典维护规约(字典 ↔ kb/26 ↔ SQL 联动)见 [kb/31 §5.1](31-标签体系.md#51-字典维护规约kb34--kb33--sql-联动)。
 
 ## 1. 总则
 
@@ -60,7 +60,7 @@ graph TD
 
 - 当年累计窗口(`y{当年}`)由 `tdm_usr_tag_d`(日更)实时滚动;当年 12-31 后凝固到 `tdm_usr_tag_o.dt='{当年}1231'`
 - 跨年自动切换:2027-01-01 起 `_d` 表当年从 `y2026` 切到 `y2027`;`y2026` 凝固到 `_o`,永不再变
-- 历史多年凝固同表 `tdm_usr_tag_o` 多 `dt` 分区(Kimball 周期快照事实表,详见 kb/33 §3)
+- 历史多年凝固同表 `tdm_usr_tag_o` 多 `dt` 分区(Kimball 周期快照事实表,详见 kb/26 §3)
 
 ### 2.3 1 期粒度
 
@@ -191,11 +191,11 @@ graph TD
 
 ## 4. 商品域标签字典
 
-> ⏸ 2 期 scope,详见 kb/33 §7。
+> ⏸ 2 期 scope,详见 kb/26 §7。
 
 ## 5. 店铺域标签字典
 
-> ⏸ 2 期 scope,详见 kb/33 §7。
+> ⏸ 2 期 scope,详见 kb/26 §7。
 
 ## 6. 查询示例
 
@@ -264,6 +264,6 @@ FROM (
 
 ## 7. 相关文档
 
-- [kb/23-标签体系.md](23-标签体系.md) — 标签体系总览 / 长表 vs 宽表 vs 人群包 / 演进路线 / §5.1 字典维护规约
-- [kb/33-tdm建模.md](33-tdm建模.md) — TDM 表建模 / EAV schema / 命名规则 §4 / 跨年扩张 §5
+- [kb/31-标签体系.md](31-标签体系.md) — 标签体系总览 / 长表 vs 宽表 vs 人群包 / 演进路线 / §5.1 字典维护规约
+- [kb/26-tdm建模.md](26-tdm建模.md) — TDM 表建模 / EAV schema / 命名规则 §4 / 跨年扩张 §5
 - [kb/93-架构决策.md](93-架构决策.md) ADR-10 — TDM 跨层下钻 DWD(1 期专用,反悔条件)

+ 1 - 1
kb/21-命名规范.md → kb/40-命名规范.md

@@ -192,7 +192,7 @@ dws 层使用**时间窗口后缀**替代五段式的 `{快照类型}_{周期}`
 
 ### 3.6 tdm 层
 
-TDM 层采用**长表(明细)+ 宽表(服务)+ 人群包(远期)**三级结构,按实体类型分表,不按标签主题拆表。详见 `23-标签体系.md`。
+TDM 层采用**长表(明细)+ 宽表(服务)+ 人群包(远期)**三级结构,按实体类型分表,不按标签主题拆表。详见 `31-标签体系.md`。
 
 **标签明细长表**(EAV 结构,所有标签值纵向存放):
 

+ 6 - 6
kb/30-开发规范.md → kb/41-开发规范.md

@@ -1,7 +1,7 @@
 # 开发规范
 
 > 本文档记录 `poyee-data-warehouse` 数仓数据开发流程与项目管理规范。
-> 与 `21-命名规范.md` 配合使用。
+> 与 `40-命名规范.md` 配合使用。
 
 ## 1. 项目管理规范(TPAD)
 
@@ -70,7 +70,7 @@ flowchart TD
 - 禁止 SQL 字符串拼接(防 SQL 注入),使用参数化查询
 - 硬编码配置项必须外置到 `conf/`
 - 敏感信息(数据库账密)**不得入库**
-- 新增 UDF 必须带注释与单元测试,再登记到 `kb/31-UDF手册.md`
+- 新增 UDF 必须带注释与单元测试,再登记到 `kb/42-UDF手册.md`
 
 ### 3.2 SQL
 
@@ -279,7 +279,7 @@ flowchart LR
 |------|------|------|
 | `feat` | 新功能 / 新 job / 新表 | `feat(raw/crm): 新增 ods_crm_ent_contact_di` |
 | `fix` | Bug 修复 / 数据订正 | `fix(dwd/trd): 修复订单金额币种换算错误` |
-| `docs` | 只改文档(含 `kb/`、注释、README) | `docs(kb): 更新 21-命名规范.md §3.4 示例` |
+| `docs` | 只改文档(含 `kb/`、注释、README) | `docs(kb): 更新 40-命名规范.md §3.4 示例` |
 | `refactor` | 不改变外部行为的重构 | `refactor(dw_base): tendata → dw_base 模块改名` |
 | `perf` | 性能优化 | `perf(dws): 拆 tmp 表减少 shuffle` |
 | `test` | 只增/改测试 | `test(udf): 补 safe_cast_decimal 边界用例` |
@@ -322,7 +322,7 @@ flowchart LR
 
 ### 4.1 `manual/ddl/` —— DDL 唯一来源
 
-**目录组织**:按 `{layer}/{domain}/` 分子目录。layer 代码取自 `21-命名规范.md` §3.1(`raw`/`ods`/`dim`/`dwd`/`dws`/`tdm`/`ads`),domain 代码取自 §3.2(`trd`/`usr`/`prd`/`shp`/`pub`)。每张目标表的首次建表 + 所有 ALTER 都落在这个子目录里,便于一眼看清某层某域的表清单。
+**目录组织**:按 `{layer}/{domain}/` 分子目录。layer 代码取自 `40-命名规范.md` §3.1(`raw`/`ods`/`dim`/`dwd`/`dws`/`tdm`/`ads`),domain 代码取自 §3.2(`trd`/`usr`/`prd`/`shp`/`pub`)。每张目标表的首次建表 + 所有 ALTER 都落在这个子目录里,便于一眼看清某层某域的表清单。
 
 ```
 manual/ddl/
@@ -427,7 +427,7 @@ raw 层的 `jobs/` 有两类主要任务,根据源数据形态选择:
 
 ### 4.4 ods 层(类型转换 + 软删归一)
 
-ods 与 raw 一对一对应(表名 `ods_<域>_<源表名>_<快照类型>_<周期>`,详见 kb/21 §3.2),承担类型转换 / 软删归一 / 跨日漂移修正职责,下游 dwd / dim / dws 全部从 ods 取数。
+ods 与 raw 一对一对应(表名 `ods_<域>_<源表名>_<快照类型>_<周期>`,详见 kb/40 §3.2),承担类型转换 / 软删归一 / 跨日漂移修正职责,下游 dwd / dim / dws 全部从 ods 取数。
 
 **类型映射**:`conf/pg-to-hive-type.ini` 集中维护(详见 kb/93 ADR-06),核心规则:int 系统一 BIGINT、numeric → DECIMAL(20,4)、timestamp → Hive TIMESTAMP、text/varchar/json → STRING;未命中类型报错显式补 conf。
 
@@ -552,6 +552,6 @@ jobs/ads/trd/
 
 ## 8. 相关文档
 
-- [命名规范](21-命名规范.md)
+- [命名规范](40-命名规范.md)
 - [数仓分层与建模](20-数仓分层与建模.md)
 - [演进路线](90-演进路线.md)

+ 0 - 0
kb/31-UDF手册.md → kb/42-UDF手册.md


+ 1 - 1
kb/91-重构备忘.md

@@ -16,7 +16,7 @@
 
 `dws_usr_user_trade_1d` **不重跑**(SQL 未改,保通用聚合语义;kb/93 ADR-10)。
 
-**验证**:跑完按 [kb/34 §6.2](34-标签字典.md#62-多标签人群圈选intersect业界-cdp-标准模式) INTERSECT 圈选 SQL 跑"上海男 × 篮球 25 年 > 200",能查到用户即口径正确。
+**验证**:跑完按 [kb/32 §6.2](32-标签字典.md#62-多标签人群圈选intersect业界-cdp-标准模式) INTERSECT 圈选 SQL 跑"上海男 × 篮球 25 年 > 200",能查到用户即口径正确。
 
 ---
 

+ 6 - 6
kb/93-架构决策.md

@@ -52,7 +52,7 @@
 
 ### ADR-03 零点漂移决策
 
-> 时间变量定义(cdt/dt/tdt/pdt 数值映射)+ 各层 dt 重跑幂等条件 详见 [kb/26-时间语义](26-时间语义.md)。
+> 时间变量定义(cdt/dt/tdt/pdt 数值映射)+ 各层 dt 重跑幂等条件 详见 [kb/21-时间语义](21-时间语义.md)。
 
 - **状态**:草案
   T+1 按 `update_time` 过滤单日窗口 `[day-start, day-stop)` 同步时,源库在同步执行期间持续写入——跨零点的记录 `update_time` 会从 N 号"漂到" N+1 号,单日窗口**无法捕获漂移记录**。
@@ -187,7 +187,7 @@
 
   - **保留老 §5.5 合派 acc**:经典 Kimball 但不适合 Hive 技术栈 + 不支持循环——否决
   - **完全禁用 acc**:inbox 草稿原版主张"事实表出现需要更新状态就是建模错"——过度扩大化,放弃了 Kimball 三类事实表的理论丰富性,未来引擎栈升级(Iceberg / Hudi)想用 acc 又得反悔——否决,留例外口子
-  - **inc 主表 + apd 流水表 fallback**(kb/21 §2.2 老循环 fallback 方案):inc 只保留最新状态,状态历史靠 apd 流水还原,但状态查询要 join 流水表算最新值,远不如拉链表 `is_current` 直接——否决
+  - **inc 主表 + apd 流水表 fallback**(kb/40 §2.2 老循环 fallback 方案):inc 只保留最新状态,状态历史靠 apd 流水还原,但状态查询要 join 流水表算最新值,远不如拉链表 `is_current` 直接——否决
 
 - **反悔条件**:
   - 引擎栈升级到支持高效 UPDATE 的存储(Iceberg / Hudi / Delta Lake),acc 实现成本 / 性能不再是问题,可重新评估
@@ -221,7 +221,7 @@
       - 未命中规则报错让人显式补,不静默 fallback
     - 输出:typed 字段 + **末尾加 `is_deleted BOOLEAN` 软删归一字段**(保留原 `del_flg` / `del_time` / `del_flag`,CASE WHEN 转换在 ods SQL 里做)+ dt STRING 分区 + ORC + EXTERNAL TABLE + LOCATION `/user/hive/warehouse/ods.db/{ods 表名}`
     - **不加技术字段**(反悔早先草案中的 `etl_time` / `src_sys` / `src_tbl` 三件套):单源情况下技术字段是常量浪费存储;多源 UNION 时(如订单表 his_o + inc_d)在 SELECT 加 literal 字段即可,不必建表时固化;追溯需求由 dt 分区 + DS 实例日志 + git history 满足
-    - ods 表名 = raw 表名首段 `raw_` 替换为 `ods_`(kb/21 §3.2 一对一对应)
+    - ods 表名 = raw 表名首段 `raw_` 替换为 `ods_`(kb/40 §3.2 一对一对应)
 
 - **后果**:
 
@@ -275,7 +275,7 @@
      - 拿 PG 实时字段集(pg_catalog 查询)
      - 拿数仓已知字段集(mask conf trim ∪ ini reader.column)
      - 对称差非空 → alerter 推 "新增 [...] / 已删 [...]"
-     - 数仓 review → 决策(保留 / trim / 脱敏)→ 更新 mask conf + sync ini + DDL + kb/24
+     - 数仓 review → 决策(保留 / trim / 脱敏)→ 更新 mask conf + sync ini + DDL + kb/22
 
   2. **数据量比对**:
      - PG `count(*) WHERE update_time ∈ [day-start, day+1-stop)`
@@ -313,7 +313,7 @@
 
   dim ful_d 全量快照需要每日产出最新分区,增量更新方式选型。Hive / Spark 2.4 不支持 MERGE INTO(Hudi / Iceberg / Delta Lake 才有);业务库存在"主动置 NULL"场景(用户解绑某属性时业务库直接写 NULL),字段级 COALESCE 在新值是 NULL、老值非 NULL 时会**错误地用昨日值兜底**导致 dim 数据滞后。
 
-  本项目第一张 dim 表 `dim_usr_user_ful_d`(kb/28 §2)落地时定下范式,未来所有 dim_*_ful_d 表沿用。
+  本项目第一张 dim 表 `dim_usr_user_ful_d`(kb/24 §2)落地时定下范式,未来所有 dim_*_ful_d 表沿用。
 
 - **决策**:
 
@@ -442,7 +442,7 @@
   - 正面:
     - dws 通用聚合语义不污染(不写死 `order_type='group'`),未来多消费方接入零反悔成本
     - tdm SQL 显式 WHERE 业务过滤,意图清晰
-    - 单下游场景下不为虚构的"通用价值"付多维粒度的复杂度(kb/29 §1.2 1 期数据量级 Spark 单年扫描可接受)
+    - 单下游场景下不为虚构的"通用价值"付多维粒度的复杂度(kb/25 §1.2 1 期数据量级 Spark 单年扫描可接受)
   - 负面:
     - 重复聚合(dws 已 GROUP BY 一次,tdm 又 GROUP BY 一次)Spark IO 倍增;1 期数据量级可接受
     - 长期看是 1 期权宜,演进到下游多消费方时反悔到 A 多维粒度需 dws 重跑全量 + tdm SQL 改回拉 dws

+ 1 - 1
manual/backfill/20260509_dim_usr_user_ful_d_init.sql

@@ -1,7 +1,7 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-09
 -- 工单:(无)
--- 目的:dim_usr_user_ful_d 初始化(kb/28 §1.3):扫 ods 历史分区 (dt < ${dt}) + ROW_NUMBER 取每 pk 最新版本,
+-- 目的:dim_usr_user_ful_d 初始化(kb/24 §1.3):扫 ods 历史分区 (dt < ${dt}) + ROW_NUMBER 取每 pk 最新版本,
 --      base_user LEFT JOIN cert_info 落 dim dt=${pdt} 单分区
 -- 状态:[待执行]
 -- 备注:首次上线 init 与 sche 同一天跑(sched=T),${dt}=T-1,${pdt}=T-2;

+ 2 - 2
manual/backfill/20260510_dim_trd_card_group_ful_d_init.sql

@@ -1,9 +1,9 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:dim_trd_card_group_ful_d 初始化(kb/28 §1.3 + ADR-08):
+-- 目的:dim_trd_card_group_ful_d 初始化(kb/24 §1.3 + ADR-08):
 --      扫 ods 历史分区 dt < ${dt} + ROW_NUMBER 取每 pk 最新版本,
---      sport→category 数据脏点清洗(mlb→MLB / Boxing→UFC / other→NULL,kb/28 §3.2),
+--      sport→category 数据脏点清洗(mlb→MLB / Boxing→UFC / other→NULL,kb/24 §3.2),
 --      落 dim dt=${pdt} 单分区
 -- 状态:[待执行]
 -- 备注:首次上线 init/sche 同日跑(sched=T),${dt}=T-1,${pdt}=T-2;

+ 2 - 2
manual/backfill/20260510_dwd_trd_order_pay_apd_d_init.sql

@@ -1,11 +1,11 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:dwd_trd_order_pay_apd_d 初始化(kb/27 §2):
+-- 目的:dwd_trd_order_pay_apd_d 初始化(kb/23 §2):
 --      扫 ods 全量历史订单 + ROW_NUMBER 取每 order_id 最新版本 +
 --      过滤支付成功(order_type='group' AND status IN (101,103,104,105,106,301,302))+
 --      LEFT JOIN dim_trd_card_group_ful_d.dt=${pdt} 维度退化 +
---      11 字段金额 mer_act% 派生(kb/27 §2.5)+
+--      11 字段金额 mer_act% 派生(kb/23 §2.5)+
 --      DATE_FORMAT(payment_success_time, 'yyyyMMdd') 动态分区写入
 -- 状态:[废弃] 2026-06-02 —— 已被 jobs/dwd/trd/dwd_trd_order_pay_apd_d_backfill.sql 取代
 --      backfill 传 start_date=订单最早日 即全量 = 本 init 功能(backfill 是 init 超集,多范围可控)

+ 2 - 2
manual/backfill/20260510_dws_usr_user_trade_1d_init.sql

@@ -1,9 +1,9 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:dws_usr_user_trade_1d 初始化(kb/29 §2):
+-- 目的:dws_usr_user_trade_1d 初始化(kb/25 §2):
 --      扫 dwd_trd_order_pay_apd_d 全量历史分区 +
---      过滤 category IS NOT NULL(脏数据 other 已在 DIM 清洗为 NULL,聚合时排除,kb/28 §3.2)+
+--      过滤 category IS NOT NULL(脏数据 other 已在 DIM 清洗为 NULL,聚合时排除,kb/24 §3.2)+
 --      GROUP BY (user_id, category, dwd.dt) 聚合 +
 --      动态分区写入 dws dt(承袭 dwd 业务时间分区)
 -- 状态:[待执行]

+ 2 - 2
manual/backfill/20260511_tdm_usr_tag_o_y2025.sql

@@ -1,7 +1,7 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-11
 -- 工单:(无)
--- 目的:tdm_usr_tag_o y2025 凝固(kb/33 §3 tdm_usr_tag_o):
+-- 目的:tdm_usr_tag_o y2025 凝固(kb/26 §3 tdm_usr_tag_o):
 --      扫 dwd.dwd_trd_order_pay_apd_d.dt BETWEEN '20250101' AND '20251231' +
 --      WHERE order_type='group'(1 期拼团粒度) + category IS NOT NULL +
 --      GROUP BY (user_id, category) 16 品类 × 金额+次数 = 32 tag_code +
@@ -11,7 +11,7 @@
 --      跑一次后该 dt 分区永远不动(insert-only 凝固语义,Kimball 周期快照事实表标准);
 --      27-01-01 凝固 26 年时新落 manual/backfill/{date}_tdm_usr_tag_o_y2026.sql + dt='20261231',
 --      同表 tdm_usr_tag_o 多 dt 分区,不新建表;
---      tag_code 命名 usr_trade_{category}_{amt|cnt}_y2025(kb/34 §编码规则);
+--      tag_code 命名 usr_trade_{category}_{amt|cnt}_y2025(kb/32 §编码规则);
 --      WHERE 'dt BETWEEN' STRING 字典序对 yyyyMMdd 格式安全;
 --      HAVING SUM > 0 过滤空消费用户,EAV 习惯不存空标签
 

+ 3 - 3
manual/ddl/dim/trd/dim_trd_card_group_ful_d_create.sql

@@ -1,10 +1,10 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:拼团维度 ful_d 全量快照建表(kb/28 §3 dim_trd_card_group_ful_d)
+-- 目的:拼团维度 ful_d 全量快照建表(kb/24 §3 dim_trd_card_group_ful_d)
 -- 状态:[草案]
--- 备注:单源 ods.ods_trd_card_group_info_inc_d;sport→category 数据脏点清洗在 DIM 内置(kb/28 §3.2);
---      默认 ful_d,未来出"看历史属性变化"标签需求或全量快照存储 > 100GB 时迁 zip_d 双轨共存(kb/28 §1.2);
+-- 备注:单源 ods.ods_trd_card_group_info_inc_d;sport→category 数据脏点清洗在 DIM 内置(kb/24 §3.2);
+--      默认 ful_d,未来出"看历史属性变化"标签需求或全量快照存储 > 100GB 时迁 zip_d 双轨共存(kb/24 §1.2);
 --      字段类型对齐 ods(整数全 BIGINT,详见 kb/20 §8.4.1 + ADR-06);`lock` 是 SQL 关键字加反引号
 
 DROP TABLE IF EXISTS dim.dim_trd_card_group_ful_d;

+ 3 - 3
manual/ddl/dim/usr/dim_usr_user_ful_d_create.sql

@@ -1,10 +1,10 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-09
 -- 工单:(无)
--- 目的:用户维度 ful_d 全量快照建表(kb/28 §2 dim_usr_user_ful_d)
+-- 目的:用户维度 ful_d 全量快照建表(kb/24 §2 dim_usr_user_ful_d)
 -- 状态:[草案]
--- 备注:base_user LEFT JOIN cert_info 合一;性别/生日仅取 cert(kb/28 §2.2);
---       默认 ful_d,未来出"看历史属性变化"标签需求或全量快照存储 > 100GB 时迁 zip_d 双轨共存(kb/28 §1.2);
+-- 备注:base_user LEFT JOIN cert_info 合一;性别/生日仅取 cert(kb/24 §2.2);
+--       默认 ful_d,未来出"看历史属性变化"标签需求或全量快照存储 > 100GB 时迁 zip_d 双轨共存(kb/24 §1.2);
 --       字段类型对齐 ods(整数全 BIGINT,详见 kb/20 §8.4.1)
 
 DROP TABLE IF EXISTS dim.dim_usr_user_ful_d;

+ 6 - 6
manual/ddl/dwd/trd/dwd_trd_order_pay_apd_d_create.sql

@@ -1,11 +1,11 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:订单支付明细事件追加表(kb/27 §2 dwd_trd_order_pay_apd_d)
+-- 目的:订单支付明细事件追加表(kb/23 §2 dwd_trd_order_pay_apd_d)
 -- 状态:[草案]
--- 备注:dt 锚点 = DATE(payment_success_time) 业务时间分区(kb/27 §2.3);
---      支付成功判定:order_type='group' AND status IN (101,103,104,105,106,301,302)(kb/27 §2.1);
---      11 字段金额按 mer_act% 通式派生 + Net Revenue 特例(kb/27 §2.5);
+-- 备注:dt 锚点 = DATE(payment_success_time) 业务时间分区(kb/23 §2.3);
+--      支付成功判定:order_type='group' AND status IN (101,103,104,105,106,301,302)(kb/23 §2.1);
+--      11 字段金额按 mer_act% 通式派生 + Net Revenue 特例(kb/23 §2.5);
 --      维度退化:category/manufacturer/sets/year/group_name/list_id/panini_list_id 来自 dim_trd_card_group_ful_d;
 --      字段类型对齐 ods(整数全 BIGINT,详见 kb/20 §8.4.1 + ADR-06);
 --      _apd_d 事件不可变,只装支付那一刻的事实快照(状态字段 status/serve_status 等归 dim_trd_order_zip_d 拉链)
@@ -30,8 +30,8 @@ CREATE EXTERNAL TABLE IF NOT EXISTS dwd.dwd_trd_order_pay_apd_d (
     shipping_address_id            BIGINT         COMMENT '收货地址 id',
     purchase_cnt                   BIGINT         COMMENT '购买份数(源 purchase_count)',
     give_cnt                       BIGINT         COMMENT '赠送个数(源 give_num)',
-    payable_amt_cny                DECIMAL(20,4)  COMMENT 'GMV(派生 accounts_payable,见 kb/27 §2.5)',
-    pay_amt_cny                    DECIMAL(20,4)  COMMENT 'Net Revenue 购买偏好口径(派生:mer_act% 时 ROUND(point/100,2),其他 actual_payment,见 kb/27 §2.5)',
+    payable_amt_cny                DECIMAL(20,4)  COMMENT 'GMV(派生 accounts_payable,见 kb/23 §2.5)',
+    pay_amt_cny                    DECIMAL(20,4)  COMMENT 'Net Revenue 购买偏好口径(派生:mer_act% 时 ROUND(point/100,2),其他 actual_payment,见 kb/23 §2.5)',
     trade_amt_cny                  DECIMAL(20,4)  COMMENT '订单交易金额(派生 trade_amount)',
     settle_amt_cny                 DECIMAL(20,4)  COMMENT '结算金额(派生 settlement_amount,支付那一刻=实付,_apd_d 不被退款改写)',
     card_price_cny                 DECIMAL(20,4)  COMMENT '单价应付(派生 card_price)',

+ 5 - 5
manual/ddl/dws/usr/dws_usr_user_trade_1d_create.sql

@@ -1,13 +1,13 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-10
 -- 工单:(无)
--- 目的:用户 x 品类 x 日 交易主题宽表(kb/29 §2 dws_usr_user_trade_1d)
+-- 目的:用户 x 品类 x 日 交易主题宽表(kb/25 §2 dws_usr_user_trade_1d)
 -- 状态:[草案]
--- 备注:粒度 (user_id, category, dt) 唯一(kb/29 §2.2);
---      来源 dwd_trd_order_pay_apd_d 单源(A3 锁定 1 期不做 refund,kb/29 §2.3);
---      dt 锚点 = DATE(payment_success_time) 业务时间分区,承袭 dwd(kb/29 §2.4);
+-- 备注:粒度 (user_id, category, dt) 唯一(kb/25 §2.2);
+--      来源 dwd_trd_order_pay_apd_d 单源(A3 锁定 1 期不做 refund,kb/25 §2.3);
+--      dt 锚点 = DATE(payment_success_time) 业务时间分区,承袭 dwd(kb/25 §2.4);
 --      回算 N=2 与 dwd 对齐(漂移连锁补偿,kb/93 ADR-09);
---      不冗余维度退化字段(1 期 scope 服务标签计算,kb/29 §1.3 触发条件再扩);
+--      不冗余维度退化字段(1 期 scope 服务标签计算,kb/25 §1.3 触发条件再扩);
 --      字段类型对齐 dwd(整数 BIGINT,金额 DECIMAL(20,4),kb/20 §8.4.1)
 
 DROP TABLE IF EXISTS dws.dws_usr_user_trade_1d;

+ 1 - 1
manual/ddl/raw/prd/raw_prd_checklist_base_info_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/prd/raw_prd_checklist_base_info_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/prd/raw_prd_checklist_base_info_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_prd_checklist_base_info_inc_d;
 

+ 1 - 1
manual/ddl/raw/prd/raw_prd_panini_checklist_base_info_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/prd/raw_prd_panini_checklist_base_info_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/prd/raw_prd_panini_checklist_base_info_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_prd_panini_checklist_base_info_inc_d;
 

+ 1 - 1
manual/ddl/raw/prd/raw_prd_panini_checklist_version_config_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/prd/raw_prd_panini_checklist_version_config_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/prd/raw_prd_panini_checklist_version_config_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_prd_panini_checklist_version_config_inc_d;
 

+ 1 - 1
manual/ddl/raw/shp/raw_shp_tzy_merchant_info_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/shp/raw_shp_tzy_merchant_info_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/shp/raw_shp_tzy_merchant_info_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_shp_tzy_merchant_info_inc_d;
 

+ 1 - 1
manual/ddl/raw/trd/raw_trd_card_group_info_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:第一版(已与业务库后端对账)
 -- 备注:配套 sync ini = jobs/raw/trd/raw_trd_card_group_info_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/trd/raw_trd_card_group_info_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_trd_card_group_info_inc_d;
 

+ 1 - 1
manual/ddl/raw/usr/raw_usr_app_base_user_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/usr/raw_usr_app_base_user_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/usr/raw_usr_app_base_user_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_usr_app_base_user_inc_d;
 

+ 1 - 1
manual/ddl/raw/usr/raw_usr_app_user_cert_info_inc_d_create.sql

@@ -5,7 +5,7 @@
 -- 状态:[已执行]
 -- 备注:配套 sync ini = jobs/raw/usr/raw_usr_app_user_cert_info_inc_d.ini;
 --       配套 mask 配置 = jobs/raw/usr/raw_usr_app_user_cert_info_inc_d.mask.ini;
---       字段决策溯源 = kb/24-raw建模.md
+--       字段决策溯源 = kb/22-raw建模.md
 
 DROP TABLE IF EXISTS raw.raw_usr_app_user_cert_info_inc_d;
 

+ 3 - 3
manual/ddl/tdm/usr/tdm_usr_tag_d_create.sql

@@ -1,9 +1,9 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-11
 -- 工单:(无)
--- 目的:用户标签 日更长表(kb/33 §2 tdm_usr_tag_d)
+-- 目的:用户标签 日更长表(kb/26 §2 tdm_usr_tag_d)
 -- 状态:[草案]
--- 备注:EAV 严守 kb/23 §2 / kb/33 §1.2 7 字段不扩(entity_id/tag_code/tag_value/tag_type/confidence/etl_time/dt);
+-- 备注:EAV 严守 kb/31 §2 / kb/26 §1.2 7 字段不扩(entity_id/tag_code/tag_value/tag_type/confidence/etl_time/dt);
 --      tag_type 枚举 attr/stat/rule,预留 algo 给将来 ML 标签;
 --      1 期含 7 属性 + 16 品类 × 4 偏好窗口(30d 金额+次数 / y{当年} 金额+次数) = 71 tag_code/分区;
 --      跑批 INSERT OVERWRITE PARTITION (dt='${dt}') 静态单分区;
@@ -13,7 +13,7 @@ DROP TABLE IF EXISTS tdm.tdm_usr_tag_d;
 
 CREATE EXTERNAL TABLE IF NOT EXISTS tdm.tdm_usr_tag_d (
     entity_id    BIGINT         COMMENT '实体 id(用户场景=user_id)',
-    tag_code     STRING         COMMENT '标签编码(维度全 encode,命名见 kb/33 §4)',
+    tag_code     STRING         COMMENT '标签编码(维度全 encode,命名见 kb/26 §4)',
     tag_value    STRING         COMMENT '标签值,统一 STRING;数值标签下游 CAST(... AS DECIMAL)',
     tag_type     STRING         COMMENT '标签类型 attr/stat/rule(预留 algo)',
     confidence   DECIMAL(5,4)   COMMENT '置信度,规则标签 1.0;模型标签按模型输出',

+ 2 - 2
manual/ddl/tdm/usr/tdm_usr_tag_o_create.sql

@@ -1,7 +1,7 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-11
 -- 工单:(无)
--- 目的:用户标签 往年凝固长表(kb/33 §3 tdm_usr_tag_o)
+-- 目的:用户标签 往年凝固长表(kb/26 §3 tdm_usr_tag_o)
 -- 状态:[草案]
 -- 备注:EAV 同 tdm_usr_tag_d 7 字段不扩(schema 完全一致);
 --      每凝固年 16 品类 × 金额+次数 = 32 tag_code/分区;
@@ -13,7 +13,7 @@ DROP TABLE IF EXISTS tdm.tdm_usr_tag_o;
 
 CREATE EXTERNAL TABLE IF NOT EXISTS tdm.tdm_usr_tag_o (
     entity_id    BIGINT         COMMENT '实体 id(用户场景=user_id)',
-    tag_code     STRING         COMMENT '标签编码(维度全 encode,命名见 kb/33 §4)',
+    tag_code     STRING         COMMENT '标签编码(维度全 encode,命名见 kb/26 §4)',
     tag_value    STRING         COMMENT '标签值,统一 STRING;数值标签下游 CAST(... AS DECIMAL)',
     tag_type     STRING         COMMENT '标签类型 attr/stat/rule(预留 algo)',
     confidence   DECIMAL(5,4)   COMMENT '置信度,规则标签 1.0;模型标签按模型输出',

+ 1 - 1
tests/README.md

@@ -30,4 +30,4 @@
 
 **骨架(未启动)**。本批仅建目录 + 本 README。
 
-见 `kb/30-开发规范.md` §5 测试规范。
+见 `kb/41-开发规范.md` §5 测试规范。