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

fix(ods/trd): 订单 inc 增补 create 日分区,dt 改活动日语义

过滤放宽为 create 日 OR 变更日 = ${dt},ods_dt 改按运行日 ${dt} 分桶,
去重 PARTITION BY id;「创建于 D」的单确定性落 D 分区,为 ful 按 create 完整铺底。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 2 недель назад
Родитель
Сommit
1188828365
1 измененных файлов с 7 добавлено и 4 удалено
  1. 7 4
      jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql

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

@@ -1,9 +1,11 @@
 -- 作者:tianyu.chu
 -- 日期:2026-05-07
 -- 工单:(无)
--- 目的:raw → ods 增量同步(ADR-03);双源 union (raw dt=${dt} + raw dt=${pdt}) + DATE_FORMAT(COALESCE(update_time, create_time))=${dt} 过滤 + (id, ods_dt) 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 分区;
+--         create 份态取 raw 首抽态(正常日调度≈初态;边界/补数可能已含当窗改动,拉链按值去重);
 --       订单表 his_o 历史灌入由 manual/backfill/ods_trd_card_group_order_info_init.sql 一次性处理,本调度只读 inc_d
 
 INSERT OVERWRITE TABLE ods.ods_trd_card_group_order_info_inc_d PARTITION (dt)
@@ -103,13 +105,14 @@ SELECT
     ods_dt                                           AS dt
 FROM (
     SELECT *,
-        DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') AS ods_dt,
+        '${dt}' AS ods_dt,
         ROW_NUMBER() OVER (
-            PARTITION BY id, DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd')
+            PARTITION BY id
             ORDER BY COALESCE(NULLIF(update_time, ''), create_time) DESC
         ) AS rn
     FROM raw.raw_trd_card_group_order_info_inc_d
     WHERE dt IN ('${dt}', '${pdt}')
-      AND DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') = '${dt}'
+      AND ( DATE_FORMAT(create_time, 'yyyyMMdd') = '${dt}'
+            OR DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') = '${dt}' )
 ) t
 WHERE t.rn = 1;