|
|
@@ -0,0 +1,92 @@
|
|
|
+-- 作者:tianyu.chu
|
|
|
+-- 日期:2026-06-02
|
|
|
+-- 工单:(无)
|
|
|
+-- 目的:dwd_trd_order_pay_apd_d 补数(backfill,kb/93 ADR-11 宽扫窄落):
|
|
|
+-- 调度中断后回刷历史区间。ods.dt 宽扫 [${start}-1, 不限](捞回 update_time 漂移到后续 ods 分区的版本);
|
|
|
+-- payment 业务时间窄落 [${start}, ${dt}](${dt}=today-1,决定覆盖哪些 dwd 分区,today 当天不落交日调度);
|
|
|
+-- status 口径 / 字段派生 / dim 退化 join 与日调度 dwd_trd_order_pay_apd_d.sql 完全一致
|
|
|
+-- 状态:[草案]
|
|
|
+-- 备注:只传 ${start}(如 20260518),${dt}=today-1(spark-sql-starter -dt 注入);
|
|
|
+-- 前置:ods 已补到 ${dt} + dim_trd 补到 ${dt}(LEFT JOIN cg.dt=${dt} 否则 category 全 NULL);
|
|
|
+-- 跨多 dt 动态分区,SET 上限 2000;与日调度分离(ADR-11),不挂 schedule,手动传 start;
|
|
|
+-- 上界不限 = 扫到 ods 最新分区,payment ∈ [${start}, ${dt}] 的订单 ods 版本落点必 ≤ 最新,全部捞到
|
|
|
+
|
|
|
+set hive.exec.max.dynamic.partitions=2000;
|
|
|
+set hive.exec.max.dynamic.partitions.pernode=200;
|
|
|
+
|
|
|
+INSERT OVERWRITE TABLE dwd.dwd_trd_order_pay_apd_d PARTITION (dt)
|
|
|
+SELECT
|
|
|
+ o.id AS order_id,
|
|
|
+ o.order_no AS order_no,
|
|
|
+ o.combination_no AS combination_no,
|
|
|
+ o.give_order_id AS give_order_id,
|
|
|
+ o.user_id AS user_id,
|
|
|
+ o.merchant_id AS merchant_id,
|
|
|
+ o.group_info_id AS group_info_id,
|
|
|
+ cg.name AS group_name,
|
|
|
+ cg.list_id AS list_id,
|
|
|
+ cg.panini_list_id AS panini_list_id,
|
|
|
+ cg.category AS category,
|
|
|
+ cg.manufacturer AS manufacturer,
|
|
|
+ cg.sets AS sets,
|
|
|
+ cg.year AS year,
|
|
|
+ o.shipping_address_id AS shipping_address_id,
|
|
|
+ o.purchase_count AS purchase_cnt,
|
|
|
+ o.give_num AS give_cnt,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.accounts_payable / 100.00, 2) ELSE o.accounts_payable END AS payable_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.point / 100.00, 2) ELSE o.actual_payment END AS pay_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.trade_amount / 100.00, 2) ELSE o.trade_amount END AS trade_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.settlement_amount / 100.00, 2) ELSE o.settlement_amount END AS settle_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.card_price / 100.00, 2) ELSE o.card_price END AS card_price_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.act_price / 100.00, 2) ELSE o.act_price END AS act_price_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.discount / 100.00, 2) ELSE o.discount END AS merchant_discount_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.platform_discount / 100.00, 2) ELSE o.platform_discount END AS platform_discount_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.member_discount / 100.00, 2) ELSE o.member_discount END AS member_discount_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.act_discount / 100.00, 2) ELSE o.act_discount END AS act_discount_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.point_deduct / 100.00, 2) ELSE o.point_deduct END AS point_deduct_amt_cny,
|
|
|
+ o.shipping_cost AS shipping_amt_cny,
|
|
|
+ o.shipping_free_amount AS shipping_free_amt_cny,
|
|
|
+ CASE WHEN o.point_type LIKE 'mer_act%' THEN ROUND(o.discount_amount / 100.00, 2) ELSE o.discount_amount END AS discount_amount_amt_cny,
|
|
|
+ o.point AS point,
|
|
|
+ o.discount_point AS discount_point,
|
|
|
+ o.coupon AS coupon,
|
|
|
+ o.platform_coupon AS platform_coupon,
|
|
|
+ o.shipping_free_id AS shipping_free_id,
|
|
|
+ o.payment_type AS payment_type,
|
|
|
+ o.payment_sub_type AS payment_sub_type,
|
|
|
+ o.payment_status AS payment_status,
|
|
|
+ o.payment_status_desc AS payment_status_desc,
|
|
|
+ o.payment_time AS payment_time,
|
|
|
+ o.payment_success_time AS payment_success_time,
|
|
|
+ o.pay_record AS pay_record,
|
|
|
+ o.order_type AS order_type,
|
|
|
+ o.order_sub_type AS order_sub_type,
|
|
|
+ o.give_user_code AS give_user_code,
|
|
|
+ o.anonymous AS anonymous,
|
|
|
+ o.pick_up_type AS pick_up_type,
|
|
|
+ o.point_type AS point_type,
|
|
|
+ o.open_self AS open_self,
|
|
|
+ o.create_time AS order_create_time,
|
|
|
+ o.expire_time AS expire_time,
|
|
|
+ o.is_deleted AS is_deleted,
|
|
|
+ CURRENT_TIMESTAMP() AS etl_time,
|
|
|
+ DATE_FORMAT(o.payment_success_time, 'yyyyMMdd') AS dt
|
|
|
+FROM (
|
|
|
+ SELECT *
|
|
|
+ FROM (
|
|
|
+ SELECT *,
|
|
|
+ ROW_NUMBER() OVER (
|
|
|
+ PARTITION BY id
|
|
|
+ ORDER BY COALESCE(update_time, create_time) DESC
|
|
|
+ ) AS rn
|
|
|
+ FROM ods.ods_trd_card_group_order_info_inc_d
|
|
|
+ WHERE dt >= DATE_FORMAT(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP('${start}', 'yyyyMMdd')), 1), 'yyyyMMdd')
|
|
|
+ AND status IN (101, 103, 104, 105, 106, 301, 302)
|
|
|
+ AND payment_success_time IS NOT NULL
|
|
|
+ AND DATE_FORMAT(payment_success_time, 'yyyyMMdd') BETWEEN '${start}' AND '${dt}'
|
|
|
+ ) t
|
|
|
+ WHERE t.rn = 1
|
|
|
+) o
|
|
|
+LEFT JOIN dim.dim_trd_card_group_ful_d cg
|
|
|
+ ON o.group_info_id = cg.group_info_id
|
|
|
+ AND cg.dt = '${dt}';
|