Browse Source

fix(jobs/dwd): status 移到 ROW_NUMBER 外层修退款单捞回 bug + dwd init 废弃留档

status IN 原在 ROW_NUMBER 子查询内层(rn 计算前),ods 同 id 多版本时
先滤退款版本再取最新 → 捞回退款前有效版本,已退款单仍进 dwd(5月 +3%)。
移到外层 WHERE t.rn=1 AND t.status IN(...) 对 id 最新版本判 status。
日调度 + backfill 同改;init 废弃(backfill 全量=init),留档标注 bug 解析。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tianyu.chu 1 tuần trước cách đây
mục cha
commit
0dadf3a930

+ 1 - 1
jobs/dwd/trd/dwd_trd_order_pay_apd_d.sql

@@ -81,11 +81,11 @@ FROM (
             ) AS rn
         FROM ods.ods_trd_card_group_order_info_inc_d
         WHERE dt IN ('${dt}', '${pdt}')
-          AND status IN (101, 103, 104, 105, 106, 301, 302)
           AND payment_success_time IS NOT NULL
           AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') IN ('${dt}', '${pdt}')
     ) t
     WHERE t.rn = 1
+      AND t.status IN (101, 103, 104, 105, 106, 301, 302)
 ) o
 LEFT JOIN dim.dim_trd_card_group_ful_d cg
     ON o.group_info_id = cg.group_info_id

+ 1 - 1
jobs/dwd/trd/dwd_trd_order_pay_apd_d_backfill.sql

@@ -82,12 +82,12 @@ FROM (
             ) AS rn
         FROM ods.ods_trd_card_group_order_info_inc_d
         WHERE dt >= DATE_FORMAT(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP('${start_date}', 'yyyyMMdd')), 1), 'yyyyMMdd')
-          AND status IN (101, 103, 104, 105, 106, 301, 302)
           AND payment_success_time IS NOT NULL
           AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') >= '${start_date}'
           AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') <  '${stop_date}'
     ) t
     WHERE t.rn = 1
+      AND t.status IN (101, 103, 104, 105, 106, 301, 302)
 ) o
 LEFT JOIN dim.dim_trd_card_group_ful_d cg
     ON o.group_info_id = cg.group_info_id

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

@@ -7,8 +7,15 @@
 --      LEFT JOIN dim_trd_card_group_ful_d.dt=${pdt} 维度退化 +
 --      11 字段金额 mer_act% 派生(kb/27 §2.5)+
 --      DATE_FORMAT(payment_success_time, 'yyyyMMdd') 动态分区写入
--- 状态:[待执行]
--- 备注:跑一次后由 jobs/dwd/trd/dwd_trd_order_pay_apd_d.sql 接管日常增量;
+-- 状态:[废弃] 2026-06-02 —— 已被 jobs/dwd/trd/dwd_trd_order_pay_apd_d_backfill.sql 取代
+--      backfill 传 start_date=订单最早日 即全量 = 本 init 功能(backfill 是 init 超集,多范围可控)
+-- 【保留 BUG 不修,仅留档】本文件 status IN 写在 ROW_NUMBER 子查询内层 WHERE(rn 计算前),有 bug:
+--      ods 同 id 多版本(如退款前 status=104 + 退款后 status=205)场景下,
+--      内层先滤掉退款版本(205) → ROW_NUMBER 在剩余有效版本取最新 → 捞回退款前 104 版本,
+--      使已退款单仍以"退款前有效态"进 dwd → dwd 比 PG 当前快照多算(2026-05 实测 +3% cnt / 68900 单);
+--      his_o 单版本段(如 2026-03)不暴露(无多版本可捞),inc_d 多版本段(2026-04-23 起)暴露;
+--      正解(已在 backfill + 日调度修复): status IN 移到外层 WHERE t.rn=1 AND t.status IN(...),对 id 最新版本判 status
+-- 原备注:跑一次后由 jobs/dwd/trd/dwd_trd_order_pay_apd_d.sql 接管日常增量;
 --      历史业务时间跨 2021-10 ~ ${dt},动态分区上限 SET 提到 2000;
 --      维度退化 join 用 dim.dt=${pdt}(init 跑当时 dim 已灌入的首日分区);
 --      ods 跨 dt 不去重 → ROW_NUMBER over order_id ORDER BY update_time DESC 取最新