20260509_dim_usr_user_ful_d_init.sql 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. -- 作者:tianyu.chu
  2. -- 日期:2026-05-09
  3. -- 工单:(无)
  4. -- 目的:dim_usr_user_ful_d 初始化(kb/28 §1.3):扫 ods 历史分区 (dt < ${dt}) + ROW_NUMBER 取每 pk 最新版本,
  5. -- base_user LEFT JOIN cert_info 落 dim dt=${pdt} 单分区
  6. -- 状态:[待执行]
  7. -- 备注:首次上线 init 与 sche 同一天跑(sched=T),${dt}=T-1,${pdt}=T-2;
  8. -- init 灌 dim.dt=${pdt} 作为 sche 首次依赖的"昨日 dim";扫 ods 范围 dt < ${dt} (即 dt <= ${pdt});
  9. -- cert_info update_time 几乎全空,ORDER BY 用 COALESCE(update_time, create_time) 兜底;
  10. -- 跑一次后由 jobs/dim/usr/dim_usr_user_ful_d.sql 接管日常增量
  11. INSERT OVERWRITE TABLE dim.dim_usr_user_ful_d PARTITION (dt='${pdt}')
  12. SELECT
  13. bu.id AS user_id,
  14. bu.appid AS appid,
  15. bu.username AS username,
  16. bu.code AS code,
  17. ci.cert_sex AS sex_cert,
  18. ci.cert_birthday AS birthday_cert,
  19. ci.cert_province AS cert_province,
  20. ci.cert_city AS cert_city,
  21. CASE WHEN ci.user_id IS NOT NULL THEN TRUE ELSE FALSE END AS is_cert,
  22. bu.id_card AS id_card,
  23. bu.face_verify AS face_verify,
  24. bu.cancel_verify_num AS cancel_verify_num,
  25. bu.register_channel AS register_channel,
  26. bu.register_addr AS register_addr,
  27. bu.register_ip_addr AS register_ip_addr,
  28. bu.create_time AS reg_create_time,
  29. bu.login_addr AS login_addr,
  30. bu.login_ip_addr AS login_ip_addr,
  31. bu.level AS level,
  32. bu.member_level AS member_level,
  33. bu.member_name AS member_name,
  34. bu.growth_num AS growth_num,
  35. bu.current_month_growth AS current_month_growth,
  36. bu.member_keep_growth AS member_keep_growth,
  37. bu.member_init_flag AS member_init_flag,
  38. bu.point AS point,
  39. bu.consume_amount AS consume_amount_cny,
  40. bu.order_total_num AS order_total_num,
  41. bu.status AS status,
  42. bu.blacklist AS blacklist,
  43. bu.refuse_pick_up AS refuse_pick_up,
  44. bu.notify_flag AS notify_flag,
  45. bu.open_invoice AS open_invoice,
  46. bu.open_psd AS open_psd,
  47. bu.daily_limit AS daily_limit,
  48. bu.weekly_limit AS weekly_limit,
  49. bu.monthly_limit AS monthly_limit,
  50. bu.update_time AS last_update_time,
  51. bu.is_deleted AS is_deleted,
  52. CURRENT_TIMESTAMP() AS etl_time
  53. FROM (
  54. SELECT *
  55. FROM (
  56. SELECT *,
  57. ROW_NUMBER() OVER (
  58. PARTITION BY id
  59. ORDER BY COALESCE(update_time, create_time) DESC
  60. ) AS rn
  61. FROM ods.ods_usr_app_base_user_inc_d
  62. WHERE dt < '${dt}'
  63. ) t
  64. WHERE t.rn = 1
  65. ) bu
  66. LEFT JOIN (
  67. SELECT *
  68. FROM (
  69. SELECT *,
  70. ROW_NUMBER() OVER (
  71. PARTITION BY user_id
  72. ORDER BY COALESCE(update_time, create_time) DESC
  73. ) AS rn
  74. FROM ods.ods_usr_app_user_cert_info_inc_d
  75. WHERE dt < '${dt}'
  76. ) t
  77. WHERE t.rn = 1
  78. ) ci ON bu.id = ci.user_id;