20260509_dim_usr_user_ful_d_init.sql 3.6 KB

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