20260723_ods_trd_card_group_info_reinit_rebucket.sql 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. -- 作者:tianyu.chu
  2. -- 日期:2026-07-23
  3. -- 工单:(无)
  4. -- 目的:拼团全量 re-init 重灌——读 tmp(dt=20260723 全表当前态),每单一行落其活动日 = GREATEST(create,update),
  5. -- 重灌 ods_inc 全史分区(至 0721)。业务会改 create、无"创建日"概念,取较晚者为最后活动日。
  6. -- 状态:[待执行]
  7. -- 备注:口径与 jobs/ods/trd/ods_trd_card_group_info_inc_d.sql 一致(GREATEST 活动日、单条);
  8. -- 上界 ≤ 0721:0722 交调度自愈(任务日 0723 处理 0722),无下界(全史);
  9. -- 拼团仅 ~50 万行,无需资源调优;lock 是保留字,SELECT 带反引号;
  10. -- dump 一单一行一活动日,(id) 天然不重,无需去重;
  11. -- 跑前先 DROP + 重建空表 ods.ods_trd_card_group_info_inc_d(外部表 DROP 不清 HDFS,另 hdfs rm);
  12. -- 跑完按 id 对 dump(活动日≤0721 的单数)验平后,tmp 中转表可 DROP。
  13. -- 跑法:python3 bin/spark-sql-starter.py -f manual/backfill/20260723_ods_trd_card_group_info_reinit_rebucket.sql
  14. SET hive.exec.dynamic.partition=true;
  15. SET hive.exec.dynamic.partition.mode=nonstrict;
  16. SET hive.exec.max.dynamic.partitions=5000;
  17. SET hive.exec.max.dynamic.partitions.pernode=5000;
  18. INSERT OVERWRITE TABLE ods.ods_trd_card_group_info_inc_d PARTITION (dt)
  19. SELECT
  20. CAST(id AS BIGINT) AS id,
  21. CAST(merchant_id AS BIGINT) AS merchant_id,
  22. appid AS appid,
  23. name AS name,
  24. code AS code,
  25. CAST(status AS BIGINT) AS status,
  26. specs AS specs,
  27. type AS type,
  28. random_type AS random_type,
  29. CAST(total_price AS DECIMAL(20,4)) AS total_price,
  30. CAST(copies AS BIGINT) AS copies,
  31. CAST(unit_price AS DECIMAL(20,4)) AS unit_price,
  32. CAST(sold_copies AS BIGINT) AS sold_copies,
  33. release_time AS release_time,
  34. cycle AS cycle,
  35. show_applet AS show_applet,
  36. title AS title,
  37. msg AS msg,
  38. remark AS remark,
  39. CAST(create_time AS TIMESTAMP) AS create_time,
  40. update_by AS update_by,
  41. CAST(update_time AS TIMESTAMP) AS update_time,
  42. CAST(order_quota_min AS BIGINT) AS order_quota_min,
  43. CAST(order_quota_max AS BIGINT) AS order_quota_max,
  44. CAST(user_quota_max AS BIGINT) AS user_quota_max,
  45. CAST(start_time AS TIMESTAMP) AS start_time,
  46. marketing_info AS marketing_info,
  47. reviewmsg AS reviewmsg,
  48. CAST(`lock` AS BOOLEAN) AS `lock`,
  49. commission_rate AS commission_rate,
  50. year AS year,
  51. sport AS sport,
  52. manufacturer AS manufacturer,
  53. sets AS sets,
  54. act AS act,
  55. config AS config,
  56. info_config AS info_config,
  57. CAST(total_num AS BIGINT) AS total_num,
  58. CAST(banner_end_time AS TIMESTAMP) AS banner_end_time,
  59. add_banner AS add_banner,
  60. CAST(finished_time AS TIMESTAMP) AS finished_time,
  61. display_name AS display_name,
  62. CAST(group_sets_no AS BIGINT) AS group_sets_no,
  63. CAST(close_payment_time AS TIMESTAMP) AS close_payment_time,
  64. CAST(confirm_send_time AS TIMESTAMP) AS confirm_send_time,
  65. CAST(close_payment_status AS BIGINT) AS close_payment_status,
  66. CAST(open_card AS BIGINT) AS open_card,
  67. close_payment_record AS close_payment_record,
  68. CAST(group_full_time AS TIMESTAMP) AS group_full_time,
  69. CAST(live_create_time AS TIMESTAMP) AS live_create_time,
  70. CAST(live_start_time AS TIMESTAMP) AS live_start_time,
  71. CAST(live_end_time AS TIMESTAMP) AS live_end_time,
  72. CAST(report_start_time AS TIMESTAMP) AS report_start_time,
  73. CAST(report_end_time AS TIMESTAMP) AS report_end_time,
  74. CAST(report_review_num AS BIGINT) AS report_review_num,
  75. CAST(report_review_first_time AS TIMESTAMP) AS report_review_first_time,
  76. CAST(report_review_end_time AS TIMESTAMP) AS report_review_end_time,
  77. CAST(review_hold_time AS TIMESTAMP) AS review_hold_time,
  78. CAST(review_approval_time AS TIMESTAMP) AS review_approval_time,
  79. CAST(review_num AS BIGINT) AS review_num,
  80. config_json AS config_json,
  81. CAST(free_flag AS BIGINT) AS free_flag,
  82. mer_name AS mer_name,
  83. change_type AS change_type,
  84. CAST(act_price AS DECIMAL(20,4)) AS act_price,
  85. act_config_json AS act_config_json,
  86. CAST(real_sold_num AS BIGINT) AS real_sold_num,
  87. CAST(weight AS BIGINT) AS weight,
  88. hot_type AS hot_type,
  89. CAST(team_first AS BIGINT) AS team_first,
  90. prop1 AS prop1,
  91. prop2 AS prop2,
  92. prop3 AS prop3,
  93. CAST(point_rate AS BIGINT) AS point_rate,
  94. CAST(point_max AS BIGINT) AS point_max,
  95. CAST(point_min AS BIGINT) AS point_min,
  96. CAST(list_id AS BIGINT) AS list_id,
  97. list_code AS list_code,
  98. CAST(mix_copies AS BIGINT) AS mix_copies,
  99. sub_type AS sub_type,
  100. act_point_type AS act_point_type,
  101. CAST(payment_method AS BIGINT) AS payment_method,
  102. CAST(payment_total_price AS DECIMAL(20,4)) AS payment_total_price,
  103. CAST(payment_commission AS DECIMAL(20,4)) AS payment_commission,
  104. CAST(payment_finished_price AS DECIMAL(20,4)) AS payment_finished_price,
  105. CAST(payment_remain_price AS DECIMAL(20,4)) AS payment_remain_price,
  106. CAST(payment_online_price AS DECIMAL(20,4)) AS payment_online_price,
  107. CAST(exclusive AS BIGINT) AS exclusive,
  108. CAST(has_bg AS BIGINT) AS has_bg,
  109. CAST(merchant_sort AS BIGINT) AS merchant_sort,
  110. CAST(del_flg AS BIGINT) AS del_flg,
  111. CAST(del_time AS TIMESTAMP) AS del_time,
  112. review_account AS review_account,
  113. CAST(act_id AS BIGINT) AS act_id,
  114. CAST(sold_end_time AS TIMESTAMP) AS sold_end_time,
  115. CAST(panini_list_id AS BIGINT) AS panini_list_id,
  116. hot_type_config AS hot_type_config,
  117. CAST(goods_type AS BIGINT) AS goods_type,
  118. CAST(report_flag AS BIGINT) AS report_flag,
  119. CAST(use_coupon AS BIGINT) AS use_coupon,
  120. CAST(user_level AS BIGINT) AS user_level,
  121. CAST(custom AS BIGINT) AS custom,
  122. CAST(gift_card_id AS BIGINT) AS gift_card_id,
  123. group_show_name AS group_show_name,
  124. CAST(min_card_num AS BIGINT) AS min_card_num,
  125. act_type AS act_type,
  126. waring_type AS waring_type,
  127. CAST(compensation_status AS BIGINT) AS compensation_status,
  128. point_type AS point_type,
  129. first_act_config AS first_act_config,
  130. gift_config AS gift_config,
  131. CAST(version AS BIGINT) AS version,
  132. extra_prop AS extra_prop,
  133. CAST(use_member_discount AS BIGINT) AS use_member_discount,
  134. CAST(merchant_open AS BIGINT) AS merchant_open,
  135. CASE WHEN del_flg = '1' THEN TRUE ELSE FALSE END AS is_deleted,
  136. adt AS dt
  137. FROM (
  138. SELECT *,
  139. DATE_FORMAT(GREATEST(create_time, NULLIF(update_time, '')), 'yyyyMMdd') AS adt -- 活动日 = GREATEST(create,update)
  140. FROM raw.tmp_trd_card_group_info
  141. WHERE dt = '20260723'
  142. ) t
  143. WHERE adt <= '20260721'
  144. DISTRIBUTE BY dt;