|
|
@@ -2,17 +2,19 @@
|
|
|
-- 日期:2026-05-10
|
|
|
-- 工单:(无)
|
|
|
-- 目的:dwd_trd_order_pay_apd_d 日常增量(kb/27 §1.4 + §2):
|
|
|
--- 扫 ods.dt=${dt} + 过滤业务时间 DATE_FORMAT(payment_success_time)=${dt} + status / order_type 支付成功 +
|
|
|
+-- 回算近 2 日(kb/20 §7.3 通用兜底,业界主流 N=2):扫 ods.dt IN (${dt}, ${pdt}) +
|
|
|
+-- 过滤业务时间 DATE(payment_success_time) IN (${dt}, ${pdt}) + 状态码筛选支付成功 +
|
|
|
-- ROW_NUMBER 取每 order_id 最新版本 +
|
|
|
-- LEFT JOIN dim_trd_card_group_ful_d.dt=${dt} 维度退化 +
|
|
|
--- 11 字段金额 mer_act% 派生(kb/27 §2.5)+ 写入 dwd dt=${dt} 单分区
|
|
|
+-- 11 字段金额 mer_act% 派生(kb/27 §2.5)+ 动态分区写入 dwd dt IN (${dt}, ${pdt})
|
|
|
-- 状态:[草案]
|
|
|
--- 备注:sched=T,${dt}=T-1;
|
|
|
--- _apd_d 单分区不回算(ODS 漂移已在 ODS 层归位,kb/27 §1.4);
|
|
|
--- 过滤 DATE(payment_success_time)=${dt} 取业务时间是 ${dt} 的事件(排除"今天 update 的旧订单"误归);
|
|
|
--- 前置 DS DEPENDENT:ods_trd_card_group_order_info_inc_d.dt=${dt} + dim_trd_card_group_ful_d.dt=${dt}
|
|
|
+-- 备注:sched=T,${dt}=T-1,${pdt}=T-2;
|
|
|
+-- 回算 N=2 兜底跨零点漂移:业务时间 T-1 但 update_time 漂到 T 的事件,在 T+1 跑批时通过扫 ods.dt=T 兜回;
|
|
|
+-- INSERT OVERWRITE 动态分区(kb/26 §8 项目默认 DYNAMIC mode):只覆盖 SELECT 出现的 dt 分区,不动其他历史分区;
|
|
|
+-- dwd_pay 是数仓支付明细,不限定 order_type(所有订单类型都进);
|
|
|
+-- 前置 DS DEPENDENT:ods.${dt} + dim.${dt}(${pdt} 历史分区已就绪)
|
|
|
|
|
|
-INSERT OVERWRITE TABLE dwd.dwd_trd_order_pay_apd_d PARTITION (dt='${dt}')
|
|
|
+INSERT OVERWRITE TABLE dwd.dwd_trd_order_pay_apd_d PARTITION (dt)
|
|
|
SELECT
|
|
|
o.id AS order_id,
|
|
|
o.order_no AS order_no,
|
|
|
@@ -67,7 +69,8 @@ SELECT
|
|
|
o.create_time AS order_create_time,
|
|
|
o.expire_time AS expire_time,
|
|
|
o.is_deleted AS is_deleted,
|
|
|
- CURRENT_TIMESTAMP() AS etl_time
|
|
|
+ CURRENT_TIMESTAMP() AS etl_time,
|
|
|
+ DATE_FORMAT(o.payment_success_time, 'yyyyMMdd') AS dt
|
|
|
FROM (
|
|
|
SELECT *
|
|
|
FROM (
|
|
|
@@ -77,10 +80,10 @@ FROM (
|
|
|
ORDER BY COALESCE(update_time, create_time) DESC
|
|
|
) AS rn
|
|
|
FROM ods.ods_trd_card_group_order_info_inc_d
|
|
|
- WHERE dt = '${dt}'
|
|
|
- AND order_type = 'group'
|
|
|
+ WHERE dt IN ('${dt}', '${pdt}')
|
|
|
AND status IN (101, 103, 104, 105, 106, 301, 302)
|
|
|
- AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') = '${dt}'
|
|
|
+ AND payment_success_time IS NOT NULL
|
|
|
+ AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') IN ('${dt}', '${pdt}')
|
|
|
) t
|
|
|
WHERE t.rn = 1
|
|
|
) o
|