|
|
@@ -2,20 +2,18 @@
|
|
|
-- 日期:2026-07-21
|
|
|
-- 工单:(无)
|
|
|
-- 目的:一次性补数重灌——读中转表 raw.tmp_trd_card_group_order_info(dt=20260721) 当前态全量,
|
|
|
--- 每单按「活动日」展开:创建日 + 变更日(COALESCE),OVERWRITE 写入 ods 的 0716~0719 分区,
|
|
|
--- 修复此前按日 re-pull 弄残的这几天(补回被 COALESCE 甩掉的 create 日 presence)。
|
|
|
+-- 按与日常完全相同的口径(create 日 OR 变更日 = ${dt},按 ${dt} 分桶)重灌 ods 单日分区;
|
|
|
+-- 对 0716~0719 各跑一次,修复此前按日 re-pull 弄残的这几天。
|
|
|
-- 状态:[待执行]
|
|
|
--- 备注:与日常 ods_trd_card_group_order_info_inc_d.sql 同口径(dt=活动日=创建日∪变更日);
|
|
|
--- 分区封顶 0719——0720 交给今天的日调度自愈,别在这抢写;
|
|
|
--- explode 用 CASE 去重「创建日=变更日」的单;tmp 为 PG 单次快照、一单一行,(id,act_dt) 天然不重;
|
|
|
--- 动态分区 OVERWRITE 只覆盖 SELECT 出现的 0716~0719,不动历史与 0720+(本环境默认 DYNAMIC);
|
|
|
--- DISTRIBUTE BY act_dt 防每分区小文件(ADR-15);
|
|
|
--- 跑完并核对无误后 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;
|
|
|
+-- 备注:口径与 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。
|
|
|
|
|
|
INSERT OVERWRITE TABLE ods.ods_trd_card_group_order_info_inc_d PARTITION (dt)
|
|
|
SELECT
|
|
|
@@ -111,16 +109,17 @@ 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
|
|
|
+ ods_dt AS dt
|
|
|
FROM (
|
|
|
SELECT *,
|
|
|
- DATE_FORMAT(create_time, 'yyyyMMdd') AS cdt,
|
|
|
- DATE_FORMAT(COALESCE(NULLIF(update_time, ''), create_time), 'yyyyMMdd') AS udt
|
|
|
+ '${dt}' AS ods_dt,
|
|
|
+ ROW_NUMBER() OVER (
|
|
|
+ PARTITION BY id
|
|
|
+ ORDER BY COALESCE(NULLIF(update_time, ''), create_time) DESC
|
|
|
+ ) AS rn
|
|
|
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
|
|
|
-LATERAL VIEW explode(
|
|
|
- CASE WHEN cdt = udt THEN array(udt) ELSE array(cdt, udt) END
|
|
|
-) e AS act_dt
|
|
|
-WHERE act_dt BETWEEN '20260716' AND '20260719'
|
|
|
-DISTRIBUTE BY act_dt;
|
|
|
+WHERE t.rn = 1;
|