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

refactor(manual/trd): 订单 re-init rebucket 去 explode,活动日单条

每单一行落 GREATEST(create,update) 活动日(≤0721),不再拆 创建日/活动日 双份;
dump 一单一行一活动日、天然不重,无需去重。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu пре 1 недеља
родитељ
комит
3da2bc1f71

+ 9 - 12
manual/backfill/20260723_ods_trd_card_group_order_info_reinit_rebucket.sql

@@ -2,14 +2,15 @@
 -- 日期:2026-07-23
 -- 工单:(无)
 -- 目的:全量 re-init 重灌——读 dump0722(全表当前态),按活动日重灌 ods_inc 的全部历史分区(至 0721)。
---       每单落两份:创建日 + 活动日;活动日 = GREATEST(create, update)(兼容后端 update<create 脏单,取较晚者)。
+--       每单一行,落其活动日 = GREATEST(create, update)。业务会改 create,故 create/update 皆活动性时间戳、
+--       无"创建日"概念,取二者较晚者为"最后活动日"。
 -- 状态:[待执行]
--- 备注:口径与 jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql 完全一致(GREATEST 活动日 + explode 双份);
---       上界 ≤ 0721:0722 交调度自愈(任务日 0723 处理 0722),故 act_dt 封顶 0721、无下界(全史 2021~0721);
+-- 备注:口径与 jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql 一致(GREATEST 活动日、单条);
+--       上界 ≤ 0721:0722 交调度自愈(任务日 0723 处理 0722),故 adt 封顶 0721、无下界(全史 2021~0721);
 --       全史约 1700 个日分区,max.dynamic.partitions/pernode 调 10000;DISTRIBUTE BY dt 防每分区小文件;
---       explode 用 CASE 去重「创建日=活动日」的单;dump 一单一行,(id,act_dt) 天然不重;
+--       dump 一单一行、一个活动日,(id) 天然不重,无需去重/explode
 --       跑前需先 DROP + 重建空表 ods.ods_trd_card_group_order_info_inc_d(外部表 DROP 不清 HDFS,另跑 hdfs rm);
---       跑完并和 PG 按 create 验平后,dump0722 中转表可 DROP。
+--       跑完按 id 对 dump(活动日≤0721 的单数)验平后,dump0722 中转表可 DROP。
 --       跑法(一次):python3 bin/spark-sql-starter.py -f manual/backfill/20260723_ods_trd_card_group_order_info_reinit_rebucket.sql
 
 SET hive.exec.dynamic.partition=true;
@@ -122,16 +123,12 @@ SELECT
     CAST(self_pickup_time          AS TIMESTAMP)     AS self_pickup_time,
     CAST(act_discount              AS DECIMAL(20,4)) AS act_discount,
     CASE WHEN del_flg = '1' THEN TRUE ELSE FALSE END AS is_deleted,
-    act_dt                                           AS dt
+    adt                                              AS dt
 FROM (
     SELECT *,
-        DATE_FORMAT(create_time, 'yyyyMMdd')                                     AS cdt,   -- 创建日
-        DATE_FORMAT(GREATEST(create_time, NULLIF(update_time, '')), 'yyyyMMdd')  AS adt    -- 活动日 = MAX(create,update)
+        DATE_FORMAT(GREATEST(create_time, NULLIF(update_time, '')), 'yyyyMMdd')  AS adt    -- 活动日 = GREATEST(create,update)
     FROM raw.tmp_trd_card_group_order_info_dump0722
     WHERE dt = '20260722'
 ) t
-LATERAL VIEW explode(
-    CASE WHEN cdt = adt THEN array(cdt) ELSE array(cdt, adt) END   -- 同日一份;跨日炸成 创建日+活动日 两行
-) e AS act_dt
-WHERE act_dt <= '20260721'
+WHERE adt <= '20260721'
 DISTRIBUTE BY dt;