Преглед изворни кода

docs(kb/24): 维度源表选型矩阵 + ful_m 月快照档 + 拉链跟踪列草案

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu пре 1 недеља
родитељ
комит
1c07423f3f
1 измењених фајлова са 81 додато и 0 уклоњено
  1. 81 0
      kb/24-dim建模.md

+ 81 - 0
kb/24-dim建模.md

@@ -27,6 +27,35 @@
 | `_ful_d` | 保留近 7 天热快照,下游 join 单分区即可 |
 | `_zip_d` | 全量历史 SCD2 拉链,属性变化分析 / 历史回放 |
 
+### 1.2.1 ful_m 月快照(第三档)
+
+ful_d / zip 之外的中间档:需要**月度历史**("某月月底的实体状态")但不值得上 zip 全量拉链的慢变参考表,产出月末全量快照 `_ful_m`。
+
+- **跑批**:每月 1 号跑,时点 = 1 号 0 点(= 上月月底末态),写 **dt = 上月月底**(如 8/1 跑 → 写 `dt=20260731`)
+- **保留**:长期全留(月度历史,不进 ful_d 的 7 天滚动 drop)
+- **源**:读当日 `_ful_d` 的 T-1 分区(1 号那天 T-1 恰 = 上月月底),另存进长留月表
+
+### 1.2.2 全量快照跑批机制(ful_d / ful_m / zip 共用底座)
+
+维度源表一律**全量 DataX 拉**(`where 1=1`,不走 update 增量窗)——create/update 皆可变、无可信增量信号,全量快照最稳。
+
+- **ful_d**:每日全量,写 dt=T-1,**保留近 7 天**;SQL 前 `ALTER TABLE ... DROP IF EXISTS PARTITION (dt='${rdt}')`(`rdt`=T-8)掉滚出窗的一个分区
+- **ful_m**:月末快照,见 §1.2.1
+- **zip**:无可信变更信号 → 靠 ful_d 的 **T-1 vs T-2 相邻全量快照 diff** 建版(触发列见 §4)
+
+### 1.2.3 维度源表选型矩阵
+
+| 源表 | 域 | ful_d(7天) | ful_m 月快照 | zip 拉链 |
+|---|---|:-:|:-:|:-:|
+| `app_base_user` | usr | ✓ | — | ✓ |
+| `tzy_merchant_info` | shp | ✓ | — | ✓ |
+| `checklist_base_info` | prd | ✓ | ✓ | — |
+| `panini_checklist_base_info` | prd | ✓ | ✓ | — |
+| `panini_checklist_version_config` | prd | ✓ | ✓ | — |
+| `app_user_cert_info` | usr | ✓ | — | — |
+
+判据:① 需回溯历史属性状态(会员/等级/授权轨迹)→ **zip**;② 慢变参考数据、月末快照够回放 → **+ful_m**;③ 近静态(`app_user_cert_info` update 仅千分之三)→ **纯 ful_d**。ful_d 7 天是所有表统一底座,ful_m / zip 在其上叠。
+
 ### 1.3 跑批策略
 
 ODS 跨 dt 不去重 → 同 pk 多分区并存 → DIM 取每个 pk 的最新有效行。
@@ -225,3 +254,55 @@ ODS 跨 dt 不去重 → 同 pk 多分区并存 → DIM 取每个 pk 的最新
 | 软删 | is_deleted | BOOLEAN | | 软删归一 |
 | 框架 | etl_time | TIMESTAMP | 派生 | ETL 处理时间 |
 | 分区 | dt | STRING | 控制 | T-1,`yyyyMMdd` |
+
+---
+
+## 4. 拉链跟踪列草案
+
+> **[草案 · 未实施]**:本节仅记录 §1.2.3 中 `zip` 两张表(`app_base_user` / `tzy_merchant_info`)的**变更触发列**设计,供 zip 落地时取用。zip 靠相邻两天 ful_d 全量快照 diff 建版——**仅在下列触发列变化时开新拉链版本**;计数列 / 登录痕迹 / 偏好设置 / config blob 不参与 diff(趋势归 dws,不撑爆拉链)。trim 砍掉的敏感列本不在仓。
+
+### 4.1 app_base_user
+
+**触发列(diff 开版):**
+
+| 列 | 含义 |
+|---|---|
+| `level` | 会员等级 |
+| `member_level` | 会员等级 ⚠️ 与 `level` 疑似重复(呼应 §2.3 同款待澄清),确认哪个权威、是否留一个 |
+| `status` | 账号状态 |
+| `del_flg` | 软删(状态跃迁)|
+| `blacklist` | 黑名单 |
+| `face_verify` | 人脸认证标志 |
+| `open_invoice` | 开票权限 |
+| `id_card` | 身份证(md5)——变=重新实名/换绑 |
+| `register_channel` | 注册渠道 |
+
+**身份列(近不变,纳入 diff 兜底):** `appid` `username` `code`
+
+**排除(不 diff):** 计数 `point` `growth_num` `current_month_growth` `member_keep_growth` `consume_amount` `order_total_num` `cancel_verify_num`;登录痕迹 `login_ip_addr` `login_addr`;偏好 `notify_flag` `notify_type` `voice_reminder` `vibrate_reminder` `window_open` `daily/weekly/monthly_limit` `open_card_show` `live_anonymous` `open_psd` `refuse_pick_up`;文本/blob `remark` `prop1-4` `live_config_json`;派生/内部 `member_name` `member_init_flag` `effects_type` `version` `create/update_time`。
+
+### 4.2 tzy_merchant_info
+
+**触发列(diff 开版):**
+
+| 列 | 含义 |
+|---|---|
+| `status` | 商家状态 |
+| `check_status` | 审核状态 |
+| `del_flg` | 软删 |
+| `member_level` | 商家会员等级 |
+| `commission_rate` | 佣金比例(核心商业条款)|
+| `main_business` | 主营业务(品类)|
+| `mall_role` | 是否 APP 商城用户 |
+| `applet_auth` / `applet_lives_auth` / `applet_lives_role` | 小程序/直播授权 + 角色 |
+| `live_type` | 直播类型 |
+| `express_level` | 快递等级 |
+| `show_status` | 搜索展示可见性 |
+| `open_act_discount` | 无余额模式开关 |
+| `prefer_valid_time` | 优选商家有效期 |
+| `tag_id` | 分类标签 |
+| `merchant_group_id` | 集团归属 |
+
+**身份列(近不变,纳入 diff 兜底):** `appid` `user_id` `username` `name` `code` `group_show_name`
+
+**排除(不 diff):** 计数/评分 `fans` `sale_num` `goods_sold_num` `total_sold_num` `current_month_score` `reputation_score`;config blob `prop_json` `hot_config` `tag_config` `living_auth_config` `dy_name` `shipping_cost_config` `living_time`;设置/派生 `sort_rate` `min_card_num` `refund_limit_day` `hide_stock` `point_type` `member_name` `member_medal` `version` `remark`。