|
|
@@ -2,18 +2,24 @@
|
|
|
-- 日期:2026-07-21
|
|
|
-- 工单:(无)
|
|
|
-- 目的:一次性补数重灌——读中转表 raw.tmp_trd_card_group_order_info(dt=20260721) 当前态全量,
|
|
|
--- 按与日常完全相同的口径(create 日 OR 变更日 = ${dt},按 ${dt} 分桶)重灌 ods 单日分区;
|
|
|
--- 对 0716~0719 各跑一次,修复此前按日 re-pull 弄残的这几天。
|
|
|
+-- 每单按「活动日」落 ods 的 0716~0719 分区:
|
|
|
+-- 创建日一份(保证这几天新建的单在 ful 完整)
|
|
|
+-- + 变更日一份(保证创建更早、这几天改过的单,其最新态能进 ful)。
|
|
|
+-- 一个 INSERT 覆盖 4 天,故每单用 explode 炸成 创建日/变更日 两行(同日只一份)。
|
|
|
-- 状态:[待执行]
|
|
|
--- 备注:口径与 jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql 一致,只把源从
|
|
|
--- raw inc(48h 双分区)换成 tmp 单次快照(dt=20260721,无双源故不读 pdt);
|
|
|
--- 每次 -dt 一天,OVERWRITE 该天分区;0720 交今天的日调度自愈,不在此补;
|
|
|
--- tmp 一单一行,去重 (id) 为空操作,保留以对齐日常写法;
|
|
|
--- 跑法(逐日,0716~0719 各一次):
|
|
|
--- for d in 20260716 20260717 20260718 20260719; do
|
|
|
--- python3 bin/spark-sql-starter.py -f manual/backfill/20260721_ods_trd_card_group_order_info_backfill_rebucket.sql -dt $d
|
|
|
--- done
|
|
|
--- 跑完并核对无误后 DROP TABLE raw.tmp_trd_card_group_order_info。
|
|
|
+-- 备注:口径与 jobs/ods/trd/ods_trd_card_group_order_info_inc_d.sql 一致——explode 相当于把日常
|
|
|
+-- 「按天各跑一次」的外层循环内联进一次 OVERWRITE(等价于跑四遍,省成一遍);
|
|
|
+-- 动态分区 OVERWRITE 只覆盖 SELECT 出现的 0716~0719,不动历史与 0720+(本环境默认 DYNAMIC);
|
|
|
+-- 0720 交今天的日调度自愈,故 WHERE 封顶 0719;
|
|
|
+-- tmp 一单一行、创建日≠变更日 → (id,act_dt) 天然不重,无需去重;
|
|
|
+-- DISTRIBUTE BY act_dt 防每分区小文件(ADR-15);
|
|
|
+-- 跑法(一次):python3 bin/spark-sql-starter.py -f manual/backfill/20260721_ods_trd_card_group_order_info_backfill_rebucket.sql
|
|
|
+-- 跑完并核对无误后 DROP TABLE raw.tmp_trd_card_group_order_info(内部表连数据一起清)。
|
|
|
+
|
|
|
+SET hive.exec.dynamic.partition=true;
|
|
|
+SET hive.exec.dynamic.partition.mode=nonstrict;
|
|
|
+SET hive.exec.max.dynamic.partitions=2000;
|
|
|
+SET hive.exec.max.dynamic.partitions.pernode=2000;
|
|
|
|
|
|
INSERT OVERWRITE TABLE ods.ods_trd_card_group_order_info_inc_d PARTITION (dt)
|
|
|
SELECT
|
|
|
@@ -109,17 +115,16 @@ 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,
|
|
|
- ods_dt AS dt
|
|
|
+ act_dt AS dt
|
|
|
FROM (
|
|
|
SELECT *,
|
|
|
- '${dt}' AS ods_dt,
|
|
|
- ROW_NUMBER() OVER (
|
|
|
- PARTITION BY id
|
|
|
- ORDER BY COALESCE(NULLIF(update_time, ''), create_time) DESC
|
|
|
- ) AS rn
|
|
|
+ DATE_FORMAT(create_time, 'yyyyMMdd') AS cdt, -- 创建日
|
|
|
+ DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') AS udt -- 变更日
|
|
|
FROM raw.tmp_trd_card_group_order_info
|
|
|
WHERE dt = '20260721'
|
|
|
- AND ( DATE_FORMAT(create_time, 'yyyyMMdd') = '${dt}'
|
|
|
- OR DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') = '${dt}' )
|
|
|
) t
|
|
|
-WHERE t.rn = 1;
|
|
|
+LATERAL VIEW explode(
|
|
|
+ CASE WHEN cdt = udt THEN array(cdt) ELSE array(cdt, udt) END -- 同日一份;跨日炸成 创建日+变更日 两行
|
|
|
+) e AS act_dt
|
|
|
+WHERE act_dt BETWEEN '20260716' AND '20260719'
|
|
|
+DISTRIBUTE BY act_dt;
|