Browse Source

fix(ods/trd): 订单 inc 活动日锚点 COALESCE 改 GREATEST,兼容 update<create

活动日取 GREATEST(create, update)(较晚者、永不早于 create);后端 update<create 脏单
不再被甩到 create 之前的假日子;过滤条件与去重 ORDER BY 同步改。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 week ago
parent
commit
3085b39241
1 changed files with 5 additions and 4 deletions
  1. 5 4
      jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql

+ 5 - 4
jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql

@@ -1,10 +1,11 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-07
 -- 工单:(无)
--- 目的:raw → ods 增量同步(ADR-03);双源 union (raw dt=${dt} + raw dt=${pdt}) + create 日 OR 变更日 = ${dt} 过滤 + 按运行日 ${dt} 分桶(dt=活动日:创建日∪变更日)+ (id) dedupe + 动态分区写入
+-- 目的:raw → ods 增量同步(ADR-03);双源 union (raw dt=${dt} + raw dt=${pdt}) + create 日 OR 活动日 = ${dt} 过滤 + 按运行日 ${dt} 分桶(dt=活动日:创建日∪活动日)+ (id) dedupe + 动态分区写入
 -- 状态:[草案]
 -- 备注:sched=T,${dt}=业务日 T-1(yyyyMMdd),${pdt}=T-2;ods 跨 dt 不去重,同 pk 多 dt 并存(拉链表底层);
---       dt=活动日(创建日∪变更日):每单在创建日与各变更日分区各留一份,「创建于 D」确定性落 D 分区;
+--       dt=活动日(创建日∪活动日):活动日 = GREATEST(create, update)(兼容后端 update<create 脏单,取较晚者,永不早于 create);
+--         每单在创建日与活动日分区各留一份,「创建于 D」确定性落 D;
 --         create 份态取 raw 首抽态(正常日调度≈初态;边界/补数可能已含当窗改动,拉链按值去重);
 --       订单表 his_o 历史灌入由 manual/backfill/ods_trd_card_group_order_info_init.sql 一次性处理,本调度只读 inc_d
 
@@ -108,11 +109,11 @@ FROM (
         '${dt}' AS ods_dt,
         ROW_NUMBER() OVER (
             PARTITION BY id
-            ORDER BY COALESCE(NULLIF(update_time, ''), create_time) DESC
+            ORDER BY GREATEST(create_time, NULLIF(update_time, '')) DESC
         ) AS rn
     FROM raw.raw_trd_card_group_order_info_inc_d
     WHERE dt IN ('${dt}', '${pdt}')
       AND ( DATE_FORMAT(create_time, 'yyyyMMdd') = '${dt}'
-            OR DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') = '${dt}' )
+            OR DATE_FORMAT(GREATEST(create_time, NULLIF(update_time, '')), 'yyyyMMdd') = '${dt}' )
 ) t
 WHERE t.rn = 1;