test_3.sql 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. -- =====================================================================
  2. -- 曝光回流链路 CUBE 聚合表 (基于 wide 宽表, 增加用户/品类维度 + 模型预估指标)
  3. -- 维度: user_type × hh_bucket × head_merge_leve2 × vid_merge_leve2 × vid_id (CUBE)
  4. -- 参考: de.sql + dwd_recsys_alg_exposure_agg_20260209
  5. -- =====================================================================
  6. -- -- DROP TABLE IF EXISTS loghubods.dwd_recsys_alg_exposure_agg_wide_20260209;
  7. -- CREATE TABLE IF NOT EXISTS loghubods.dwd_recsys_alg_exposure_agg_wide_20260209 (
  8. -- -- ==================== 维度列 ====================
  9. -- dt STRING COMMENT '日期'
  10. -- ,user_type STRING COMMENT '用户拉活量分层(R0&新用户/R1-50/R_180_330等,汇总为SUM)'
  11. -- ,hh_bucket STRING COMMENT '小时段(00-03/04-07/.../20-23,汇总为SUM)'
  12. -- ,head_merge_leve2 STRING COMMENT '进入内容品类(headvideoid品类,汇总为SUM)'
  13. -- ,vid_merge_leve2 STRING COMMENT '推荐内容品类(vid品类,TOP10曝光+其他,汇总为SUM)'
  14. -- ,vid_id STRING COMMENT '内容id(品类曝光TOP1+其他,汇总为SUM)'
  15. -- -- ==================== 基础流量 ====================
  16. -- ,exposure_cnt BIGINT COMMENT '曝光次数'
  17. -- ,exposure_uv BIGINT COMMENT '曝光人数(mid去重)'
  18. -- ,vid_cnt BIGINT COMMENT '视频个数(vid去重)'
  19. -- ,exposure_per_user DOUBLE COMMENT '人均曝光次数 = 曝光次数/曝光人数'
  20. -- -- ==================== 分享 ====================
  21. -- ,share_exposure_cnt BIGINT COMMENT '产生分享的曝光数'
  22. -- ,share_cnt BIGINT COMMENT '分享总次数'
  23. -- -- ==================== STR 指标 ====================
  24. -- ,str_real DOUBLE COMMENT 'STR实际 = is_return_noself/曝光次数'
  25. -- ,str_pred DOUBLE COMMENT 'STR预估 = SUM(str_pred)/曝光次数'
  26. -- ,str_copc DOUBLE COMMENT 'STR copc = str_real/str_pred'
  27. -- ,str_mae DOUBLE COMMENT 'STR MAE = AVG(ABS(str_pred - is_return_noself))'
  28. -- ,str_var DOUBLE COMMENT 'STR VAR = VARIANCE(str_pred - is_return_noself)'
  29. -- -- ==================== ROSN 指标 ====================
  30. -- ,rosn_real DOUBLE COMMENT 'ROSN实际 = return_n_uv_noself/is_return_noself'
  31. -- ,rosn_pred DOUBLE COMMENT 'ROSN预估 = SUM(rosn_pred)/is_return_noself'
  32. -- ,rosn_copc DOUBLE COMMENT 'ROSN copc = rosn_real/rosn_pred'
  33. -- ,rosn_pred_origin DOUBLE COMMENT 'ROSN原始预估均值 = AVG(rosn_pred_origin)'
  34. -- ,rosn_mae DOUBLE COMMENT 'ROSN MAE = AVG(ABS(rosn_pred - return_n_uv_noself)) WHERE is_return_noself=1'
  35. -- ,rosn_var DOUBLE COMMENT 'ROSN VAR = VARIANCE(rosn_pred - return_n_uv_noself) WHERE is_return_noself=1'
  36. -- -- ==================== ROVN 指标 ====================
  37. -- ,rovn DOUBLE COMMENT 'rovn实际 = return_n_uv_noself/曝光次数'
  38. -- ,rovn_pred DOUBLE COMMENT 'rovn预估 = AVG(str_pred*rosn_pred)'
  39. -- ,rovn_copc DOUBLE COMMENT 'rovn copc = rovn/rovn_pred'
  40. -- ,rovn_mae DOUBLE COMMENT 'rovn MAE = AVG(ABS(str_pred*rosn_pred - return_n_uv_noself/曝光次数))'
  41. -- ,rovn_var DOUBLE COMMENT 'rovn VAR = VARIANCE(str_pred*rosn_pred - return_n_uv_noself/曝光次数)'
  42. -- ,sortscore_avg DOUBLE COMMENT 'sortscore均值'
  43. -- -- ==================== B链 (分享→点击) ====================
  44. -- ,bn_exp BIGINT COMMENT 'B链全量: 回流session曝光数'
  45. -- ,bn_pv BIGINT COMMENT 'B链全量: 回流点击次数'
  46. -- ,bn_uv BIGINT COMMENT 'B链全量: 回流去重人数'
  47. -- ,b1_exp BIGINT COMMENT 'B链depth=1: 回流session曝光数'
  48. -- ,b1_pv BIGINT COMMENT 'B链depth=1: 回流点击次数'
  49. -- ,b1_uv BIGINT COMMENT 'B链depth=1: 回流去重人数'
  50. -- ,b2_exp BIGINT COMMENT 'B链depth=2: 回流session曝光数'
  51. -- ,b2_pv BIGINT COMMENT 'B链depth=2: 回流点击次数'
  52. -- ,b2_uv BIGINT COMMENT 'B链depth=2: 回流去重人数'
  53. -- ,b3_exp BIGINT COMMENT 'B链depth=3: 回流session曝光数'
  54. -- ,b3_pv BIGINT COMMENT 'B链depth=3: 回流点击次数'
  55. -- ,b3_uv BIGINT COMMENT 'B链depth=3: 回流去重人数'
  56. -- ,bn_rov DOUBLE COMMENT 'B链全量: rov = bn_uv/曝光次数'
  57. -- ,bn_ror DOUBLE COMMENT 'B链全量: ror = bn_uv/曝光人数'
  58. -- ,b1_rov DOUBLE COMMENT 'B链depth=1: rov = b1_uv/曝光次数'
  59. -- ,b1_ror DOUBLE COMMENT 'B链depth=1: ror = b1_uv/曝光人数'
  60. -- ,b2_rov DOUBLE COMMENT 'B链depth=2: rov = b2_uv/b1曝光数'
  61. -- ,b2_ror DOUBLE COMMENT 'B链depth=2: ror = b2_uv/b1人数'
  62. -- ,b3_rov DOUBLE COMMENT 'B链depth=3: rov = b3_uv/b2曝光数'
  63. -- ,b3_ror DOUBLE COMMENT 'B链depth=3: ror = b3_uv/b2人数'
  64. -- -- ==================== C链 (全量depth, 按hop) ====================
  65. -- ,cn_1_exp BIGINT COMMENT 'C链hop1: 回流session曝光数'
  66. -- ,cn_1_pv BIGINT COMMENT 'C链hop1: 回流点击次数'
  67. -- ,cn_1_uv BIGINT COMMENT 'C链hop1: 回流去重人数'
  68. -- ,cn_2_exp BIGINT COMMENT 'C链hop2: 回流session曝光数'
  69. -- ,cn_2_pv BIGINT COMMENT 'C链hop2: 回流点击次数'
  70. -- ,cn_2_uv BIGINT COMMENT 'C链hop2: 回流去重人数'
  71. -- ,cn_3_exp BIGINT COMMENT 'C链hop3: 回流session曝光数'
  72. -- ,cn_3_pv BIGINT COMMENT 'C链hop3: 回流点击次数'
  73. -- ,cn_3_uv BIGINT COMMENT 'C链hop3: 回流去重人数'
  74. -- ,cn_total_uv BIGINT COMMENT 'C链合计UV'
  75. -- ,cn_1_rov DOUBLE COMMENT 'C链hop1: rov = cn_1_uv/bn曝光数'
  76. -- ,cn_1_ror DOUBLE COMMENT 'C链hop1: ror = cn_1_uv/bn人数'
  77. -- ,cn_2_rov DOUBLE COMMENT 'C链hop2: rov = cn_2_uv/cn_1曝光数'
  78. -- ,cn_2_ror DOUBLE COMMENT 'C链hop2: ror = cn_2_uv/cn_1人数'
  79. -- ,cn_3_rov DOUBLE COMMENT 'C链hop3: rov = cn_3_uv/cn_2曝光数'
  80. -- ,cn_3_ror DOUBLE COMMENT 'C链hop3: ror = cn_3_uv/cn_2人数'
  81. -- ,cn_total_rov DOUBLE COMMENT 'C链合计: rov = cn_total_uv/bn曝光数'
  82. -- ,cn_total_ror DOUBLE COMMENT 'C链合计: ror = cn_total_uv/bn人数'
  83. -- ,c1_1_exp BIGINT COMMENT 'C链depth1-hop1: 回流session曝光数'
  84. -- ,c1_1_pv BIGINT COMMENT 'C链depth1-hop1: 回流点击次数'
  85. -- ,c1_1_uv BIGINT COMMENT 'C链depth1-hop1: 回流去重人数'
  86. -- ,c1_2_exp BIGINT COMMENT 'C链depth1-hop2: 回流session曝光数'
  87. -- ,c1_2_pv BIGINT COMMENT 'C链depth1-hop2: 回流点击次数'
  88. -- ,c1_2_uv BIGINT COMMENT 'C链depth1-hop2: 回流去重人数'
  89. -- ,c1_3_exp BIGINT COMMENT 'C链depth1-hop3: 回流session曝光数'
  90. -- ,c1_3_pv BIGINT COMMENT 'C链depth1-hop3: 回流点击次数'
  91. -- ,c1_3_uv BIGINT COMMENT 'C链depth1-hop3: 回流去重人数'
  92. -- ,c2_1_exp BIGINT COMMENT 'C链depth2-hop1: 回流session曝光数'
  93. -- ,c2_1_pv BIGINT COMMENT 'C链depth2-hop1: 回流点击次数'
  94. -- ,c2_1_uv BIGINT COMMENT 'C链depth2-hop1: 回流去重人数'
  95. -- ,c2_2_exp BIGINT COMMENT 'C链depth2-hop2: 回流session曝光数'
  96. -- ,c2_2_pv BIGINT COMMENT 'C链depth2-hop2: 回流点击次数'
  97. -- ,c2_2_uv BIGINT COMMENT 'C链depth2-hop2: 回流去重人数'
  98. -- ,c2_3_exp BIGINT COMMENT 'C链depth2-hop3: 回流session曝光数'
  99. -- ,c2_3_pv BIGINT COMMENT 'C链depth2-hop3: 回流点击次数'
  100. -- ,c2_3_uv BIGINT COMMENT 'C链depth2-hop3: 回流去重人数'
  101. -- ,c3_1_exp BIGINT COMMENT 'C链depth3-hop1: 回流session曝光数'
  102. -- ,c3_1_pv BIGINT COMMENT 'C链depth3-hop1: 回流点击次数'
  103. -- ,c3_1_uv BIGINT COMMENT 'C链depth3-hop1: 回流去重人数'
  104. -- ,c3_2_exp BIGINT COMMENT 'C链depth3-hop2: 回流session曝光数'
  105. -- ,c3_2_pv BIGINT COMMENT 'C链depth3-hop2: 回流点击次数'
  106. -- ,c3_2_uv BIGINT COMMENT 'C链depth3-hop2: 回流去重人数'
  107. -- ,c3_3_exp BIGINT COMMENT 'C链depth3-hop3: 回流session曝光数'
  108. -- ,c3_3_pv BIGINT COMMENT 'C链depth3-hop3: 回流点击次数'
  109. -- ,c3_3_uv BIGINT COMMENT 'C链depth3-hop3: 回流去重人数'
  110. -- ,c1_1_rov DOUBLE COMMENT 'C链d1-hop1: rov = c1_1_uv/bn曝光数'
  111. -- ,c1_1_ror DOUBLE COMMENT 'C链d1-hop1: ror = c1_1_uv/bn人数'
  112. -- ,c2_1_rov DOUBLE COMMENT 'C链d2-hop1: rov = c2_1_uv/c1_1曝光数'
  113. -- ,c2_1_ror DOUBLE COMMENT 'C链d2-hop1: ror = c2_1_uv/c1_1人数'
  114. -- ,c3_1_rov DOUBLE COMMENT 'C链d3-hop1: rov = c3_1_uv/c2_1曝光数'
  115. -- ,c3_1_ror DOUBLE COMMENT 'C链d3-hop1: ror = c3_1_uv/c2_1人数'
  116. -- ,c1_2_rov DOUBLE COMMENT 'C链d1-hop2: rov = c1_2_uv/cn_1曝光数'
  117. -- ,c1_2_ror DOUBLE COMMENT 'C链d1-hop2: ror = c1_2_uv/cn_1人数'
  118. -- ,c2_2_rov DOUBLE COMMENT 'C链d2-hop2: rov = c2_2_uv/c1_2曝光数'
  119. -- ,c2_2_ror DOUBLE COMMENT 'C链d2-hop2: ror = c2_2_uv/c1_2人数'
  120. -- ,c3_2_rov DOUBLE COMMENT 'C链d3-hop2: rov = c3_2_uv/c2_2曝光数'
  121. -- ,c3_2_ror DOUBLE COMMENT 'C链d3-hop2: ror = c3_2_uv/c2_2人数'
  122. -- ,c1_3_rov DOUBLE COMMENT 'C链d1-hop3: rov = c1_3_uv/cn_2曝光数'
  123. -- ,c1_3_ror DOUBLE COMMENT 'C链d1-hop3: ror = c1_3_uv/cn_2人数'
  124. -- ,c2_3_rov DOUBLE COMMENT 'C链d2-hop3: rov = c2_3_uv/c1_3曝光数'
  125. -- ,c2_3_ror DOUBLE COMMENT 'C链d2-hop3: ror = c2_3_uv/c1_3人数'
  126. -- ,c3_3_rov DOUBLE COMMENT 'C链d3-hop3: rov = c3_3_uv/c2_3曝光数'
  127. -- ,c3_3_ror DOUBLE COMMENT 'C链d3-hop3: ror = c3_3_uv/c2_3人数'
  128. -- -- ==================== D链 (session内后续曝光传播) ====================
  129. -- ,d0 BIGINT COMMENT 'D链初始成本: session内后续曝光数'
  130. -- ,dn_1_exp BIGINT COMMENT 'D链hop1: 回流session曝光数'
  131. -- ,dn_1_pv BIGINT COMMENT 'D链hop1: 回流点击次数'
  132. -- ,dn_1_uv BIGINT COMMENT 'D链hop1: 回流去重人数'
  133. -- ,dn_2_exp BIGINT COMMENT 'D链hop2: 回流session曝光数'
  134. -- ,dn_2_pv BIGINT COMMENT 'D链hop2: 回流点击次数'
  135. -- ,dn_2_uv BIGINT COMMENT 'D链hop2: 回流去重人数'
  136. -- ,dn_3_exp BIGINT COMMENT 'D链hop3: 回流session曝光数'
  137. -- ,dn_3_pv BIGINT COMMENT 'D链hop3: 回流点击次数'
  138. -- ,dn_3_uv BIGINT COMMENT 'D链hop3: 回流去重人数'
  139. -- ,dn_total_uv BIGINT COMMENT 'D链合计UV'
  140. -- ,dn_1_rov DOUBLE COMMENT 'D链hop1: rov = dn_1_uv/d0初始曝光数'
  141. -- ,dn_1_ror DOUBLE COMMENT 'D链hop1: ror = dn_1_uv/曝光人数'
  142. -- ,dn_2_rov DOUBLE COMMENT 'D链hop2: rov = dn_2_uv/dn_1曝光数'
  143. -- ,dn_2_ror DOUBLE COMMENT 'D链hop2: ror = dn_2_uv/dn_1人数'
  144. -- ,dn_3_rov DOUBLE COMMENT 'D链hop3: rov = dn_3_uv/dn_2曝光数'
  145. -- ,dn_3_ror DOUBLE COMMENT 'D链hop3: ror = dn_3_uv/dn_2人数'
  146. -- ,dn_total_rov DOUBLE COMMENT 'D链合计: rov = dn_total_uv/d0初始曝光数'
  147. -- ,dn_total_ror DOUBLE COMMENT 'D链合计: ror = dn_total_uv/曝光人数'
  148. -- ,d1_1_exp BIGINT COMMENT 'D链depth1-hop1: 回流session曝光数'
  149. -- ,d1_1_pv BIGINT COMMENT 'D链depth1-hop1: 回流点击次数'
  150. -- ,d1_1_uv BIGINT COMMENT 'D链depth1-hop1: 回流去重人数'
  151. -- ,d1_2_exp BIGINT COMMENT 'D链depth1-hop2: 回流session曝光数'
  152. -- ,d1_2_pv BIGINT COMMENT 'D链depth1-hop2: 回流点击次数'
  153. -- ,d1_2_uv BIGINT COMMENT 'D链depth1-hop2: 回流去重人数'
  154. -- ,d1_3_exp BIGINT COMMENT 'D链depth1-hop3: 回流session曝光数'
  155. -- ,d1_3_pv BIGINT COMMENT 'D链depth1-hop3: 回流点击次数'
  156. -- ,d1_3_uv BIGINT COMMENT 'D链depth1-hop3: 回流去重人数'
  157. -- ,d2_1_exp BIGINT COMMENT 'D链depth2-hop1: 回流session曝光数'
  158. -- ,d2_1_pv BIGINT COMMENT 'D链depth2-hop1: 回流点击次数'
  159. -- ,d2_1_uv BIGINT COMMENT 'D链depth2-hop1: 回流去重人数'
  160. -- ,d2_2_exp BIGINT COMMENT 'D链depth2-hop2: 回流session曝光数'
  161. -- ,d2_2_pv BIGINT COMMENT 'D链depth2-hop2: 回流点击次数'
  162. -- ,d2_2_uv BIGINT COMMENT 'D链depth2-hop2: 回流去重人数'
  163. -- ,d2_3_exp BIGINT COMMENT 'D链depth2-hop3: 回流session曝光数'
  164. -- ,d2_3_pv BIGINT COMMENT 'D链depth2-hop3: 回流点击次数'
  165. -- ,d2_3_uv BIGINT COMMENT 'D链depth2-hop3: 回流去重人数'
  166. -- ,d3_1_exp BIGINT COMMENT 'D链depth3-hop1: 回流session曝光数'
  167. -- ,d3_1_pv BIGINT COMMENT 'D链depth3-hop1: 回流点击次数'
  168. -- ,d3_1_uv BIGINT COMMENT 'D链depth3-hop1: 回流去重人数'
  169. -- ,d3_2_exp BIGINT COMMENT 'D链depth3-hop2: 回流session曝光数'
  170. -- ,d3_2_pv BIGINT COMMENT 'D链depth3-hop2: 回流点击次数'
  171. -- ,d3_2_uv BIGINT COMMENT 'D链depth3-hop2: 回流去重人数'
  172. -- ,d3_3_exp BIGINT COMMENT 'D链depth3-hop3: 回流session曝光数'
  173. -- ,d3_3_pv BIGINT COMMENT 'D链depth3-hop3: 回流点击次数'
  174. -- ,d3_3_uv BIGINT COMMENT 'D链depth3-hop3: 回流去重人数'
  175. -- ,d1_1_rov DOUBLE COMMENT 'D链d1-hop1: rov = d1_1_uv/d0初始曝光数'
  176. -- ,d1_1_ror DOUBLE COMMENT 'D链d1-hop1: ror = d1_1_uv/曝光人数'
  177. -- ,d2_1_rov DOUBLE COMMENT 'D链d2-hop1: rov = d2_1_uv/d1_1曝光数'
  178. -- ,d2_1_ror DOUBLE COMMENT 'D链d2-hop1: ror = d2_1_uv/d1_1人数'
  179. -- ,d3_1_rov DOUBLE COMMENT 'D链d3-hop1: rov = d3_1_uv/d2_1曝光数'
  180. -- ,d3_1_ror DOUBLE COMMENT 'D链d3-hop1: ror = d3_1_uv/d2_1人数'
  181. -- ,d1_2_rov DOUBLE COMMENT 'D链d1-hop2: rov = d1_2_uv/dn_1曝光数'
  182. -- ,d1_2_ror DOUBLE COMMENT 'D链d1-hop2: ror = d1_2_uv/dn_1人数'
  183. -- ,d2_2_rov DOUBLE COMMENT 'D链d2-hop2: rov = d2_2_uv/d1_2曝光数'
  184. -- ,d2_2_ror DOUBLE COMMENT 'D链d2-hop2: ror = d2_2_uv/d1_2人数'
  185. -- ,d3_2_rov DOUBLE COMMENT 'D链d3-hop2: rov = d3_2_uv/d2_2曝光数'
  186. -- ,d3_2_ror DOUBLE COMMENT 'D链d3-hop2: ror = d3_2_uv/d2_2人数'
  187. -- ,d1_3_rov DOUBLE COMMENT 'D链d1-hop3: rov = d1_3_uv/dn_2曝光数'
  188. -- ,d1_3_ror DOUBLE COMMENT 'D链d1-hop3: ror = d1_3_uv/dn_2人数'
  189. -- ,d2_3_rov DOUBLE COMMENT 'D链d2-hop3: rov = d2_3_uv/d1_3曝光数'
  190. -- ,d2_3_ror DOUBLE COMMENT 'D链d2-hop3: ror = d2_3_uv/d1_3人数'
  191. -- ,d3_3_rov DOUBLE COMMENT 'D链d3-hop3: rov = d3_3_uv/d2_3曝光数'
  192. -- ,d3_3_ror DOUBLE COMMENT 'D链d3-hop3: ror = d3_3_uv/d2_3人数'
  193. -- -- ==================== 全链路 ====================
  194. -- ,all_return_n_uv BIGINT COMMENT '全链路拉回UV = B + C + D'
  195. -- ,all_rovn DOUBLE COMMENT '全链路拉回率 = all_return_n_uv/曝光次数'
  196. -- ,all_rov DOUBLE COMMENT '全链路: rov = all_return_n_uv/曝光次数'
  197. -- ,all_ror DOUBLE COMMENT '全链路: ror = all_return_n_uv/曝光人数'
  198. -- )
  199. -- COMMENT '曝光回流链路CUBE聚合-宽表版 (5维度: 用户分层/小时段/进入品类TOP1/推荐品类TOP10/内容idTOP1)'
  200. -- ;
  201. WITH
  202. -- 用户拉活量分层
  203. t_user_type AS (
  204. SELECT DISTINCT type, openid
  205. FROM loghubods.mid_share_return_people_1year
  206. WHERE dt = TO_CHAR(DATEADD(TO_DATE('${dt}','YYYYMMDD'),-1,'dd'),'YYYYMMDD')
  207. AND type IS NOT NULL
  208. AND type != 'S_ALL'
  209. AND type NOT REGEXP 'R50'
  210. )
  211. -- 模型预估分数
  212. ,t_score AS (
  213. SELECT apptype
  214. ,videoid
  215. ,recommendtraceid
  216. ,scoresmap
  217. ,sortscore
  218. FROM (
  219. SELECT apptype
  220. ,videoid
  221. ,recommendtraceid
  222. ,scoresmap
  223. ,sortscore
  224. ,ROW_NUMBER() OVER (PARTITION BY apptype,videoid,recommendtraceid) AS rn
  225. FROM loghubods.statistics_log_hour
  226. WHERE dt LIKE '${dt}%'
  227. AND scoresmap IS NOT NULL
  228. )
  229. WHERE rn = 1
  230. )
  231. -- TOP1 进入内容品类(场): 按回流人数取 TOP1
  232. ,t_top_head_cate AS (
  233. SELECT vt.merge_leve2
  234. FROM loghubods.dwd_recsys_alg_exposure_base_20260209 base
  235. JOIN loghubods.video_merge_tag vt ON base.headvideoid = vt.videoid
  236. WHERE base.dt = '${dt}'
  237. AND vt.merge_leve2 IS NOT NULL
  238. GROUP BY vt.merge_leve2
  239. ORDER BY SUM(CAST(is_return_noself AS BIGINT)) DESC
  240. LIMIT 1
  241. )
  242. -- TOP10 推荐内容品类(货): 按曝光次数取 TOP10
  243. ,t_top_vid_cate AS (
  244. SELECT vt.merge_leve2
  245. FROM loghubods.dwd_recsys_alg_exposure_base_20260209 base
  246. JOIN loghubods.video_merge_tag vt ON base.vid = vt.videoid
  247. WHERE base.dt = '${dt}'
  248. AND vt.merge_leve2 IS NOT NULL
  249. GROUP BY vt.merge_leve2
  250. ORDER BY COUNT(1) DESC
  251. LIMIT 10
  252. )
  253. -- TOP1 内容id(货): 每品类按曝光次数取 TOP1 (曝光>10w)
  254. ,t_top_vid AS (
  255. SELECT merge_leve2, vid
  256. FROM (
  257. SELECT vt.merge_leve2
  258. ,base.vid
  259. ,COUNT(1) AS exp_cnt
  260. ,ROW_NUMBER() OVER (PARTITION BY vt.merge_leve2 ORDER BY COUNT(1) DESC) AS rk
  261. FROM loghubods.dwd_recsys_alg_exposure_base_20260209 base
  262. JOIN loghubods.video_merge_tag vt ON base.vid = vt.videoid
  263. WHERE base.dt = '${dt}'
  264. AND vt.merge_leve2 IS NOT NULL
  265. GROUP BY vt.merge_leve2, base.vid
  266. HAVING exp_cnt > 100000
  267. )
  268. WHERE rk <= 1
  269. )
  270. -- 宽表
  271. ,t_wide AS (
  272. SELECT base.*
  273. ,CASE WHEN e.type IS NULL OR e.type = 'R_0' THEN 'R0&新用户'
  274. WHEN e.type IN ('R_1','R_2_10','R_10_50') THEN 'R1-50'
  275. WHEN e.type IN ('R_50_100','R_100_180','R_180_330') THEN 'R_180_330'
  276. ELSE e.type
  277. END AS user_type
  278. ,CASE WHEN th.merge_leve2 IS NOT NULL THEN vt_head.merge_leve2 ELSE '其他' END AS head_merge_leve2
  279. ,CASE WHEN tv.merge_leve2 IS NOT NULL THEN vt_vid.merge_leve2 ELSE '其他' END AS vid_merge_leve2
  280. ,CASE WHEN ti.vid IS NOT NULL THEN base.vid ELSE '其他' END AS vid_id
  281. ,CAST(GET_JSON_OBJECT(e1.scoresmap,'$.fmRov') AS DOUBLE) AS str_pred
  282. ,1.22*POW(CAST(GET_JSON_OBJECT(e1.scoresmap,'$.NorXGBScore') AS DOUBLE),1.15) AS rosn_pred
  283. ,CAST(GET_JSON_OBJECT(e1.scoresmap,'$.hasReturnRovScore') AS DOUBLE) AS rosn_pred_origin
  284. ,e1.sortscore
  285. ,CASE
  286. WHEN CAST(hh AS INT) BETWEEN 0 AND 3 THEN '00-03'
  287. WHEN CAST(hh AS INT) BETWEEN 4 AND 7 THEN '04-07'
  288. WHEN CAST(hh AS INT) BETWEEN 8 AND 11 THEN '08-11'
  289. WHEN CAST(hh AS INT) BETWEEN 12 AND 15 THEN '12-15'
  290. WHEN CAST(hh AS INT) BETWEEN 16 AND 19 THEN '16-19'
  291. WHEN CAST(hh AS INT) BETWEEN 20 AND 23 THEN '20-23'
  292. ELSE '-'
  293. END AS hh_bucket
  294. FROM loghubods.dwd_recsys_alg_exposure_base_20260209 base
  295. LEFT JOIN t_user_type e
  296. ON SUBSTRING_INDEX(base.mid,'weixin_openid_',-1) = e.openid
  297. LEFT JOIN loghubods.video_merge_tag vt_head
  298. ON base.headvideoid = vt_head.videoid
  299. LEFT JOIN loghubods.video_merge_tag vt_vid
  300. ON base.vid = vt_vid.videoid
  301. LEFT JOIN t_score e1
  302. ON base.apptype = e1.apptype
  303. AND base.vid = e1.videoid
  304. AND base.recomtraceid = e1.recommendtraceid
  305. LEFT JOIN t_top_head_cate th
  306. ON vt_head.merge_leve2 = th.merge_leve2
  307. LEFT JOIN t_top_vid_cate tv
  308. ON vt_vid.merge_leve2 = tv.merge_leve2
  309. LEFT JOIN t_top_vid ti
  310. ON base.vid = ti.vid
  311. WHERE base.dt = '${dt}'
  312. )
  313. SELECT
  314. -- ==================== 维度列 ====================
  315. '${dt}' AS dt
  316. ,CASE WHEN GROUPING(user_type) = 1 THEN 'SUM' ELSE NVL(user_type, 'SUM') END AS user_type
  317. ,CASE WHEN GROUPING(hh_bucket) = 1 THEN 'SUM' ELSE NVL(hh_bucket, 'SUM') END AS hh_bucket
  318. ,CASE WHEN GROUPING(head_merge_leve2) = 1 THEN 'SUM' ELSE NVL(head_merge_leve2, 'SUM') END AS head_merge_leve2
  319. ,CASE WHEN GROUPING(vid_merge_leve2) = 1 THEN 'SUM' ELSE NVL(vid_merge_leve2, 'SUM') END AS vid_merge_leve2
  320. ,CASE WHEN GROUPING(vid_id) = 1 THEN 'SUM' ELSE NVL(vid_id, 'SUM') END AS vid_id
  321. -- ==================== 基础流量 ====================
  322. ,COUNT(1) AS exposure_cnt
  323. ,COUNT(DISTINCT mid) AS exposure_uv
  324. ,COUNT(DISTINCT vid) AS vid_cnt
  325. ,ROUND(COUNT(1) / COUNT(DISTINCT mid), 4) AS exposure_per_user
  326. -- ==================== 分享 ====================
  327. ,SUM(CAST(is_share AS BIGINT)) AS share_exposure_cnt
  328. ,SUM(CAST(share_cnt AS BIGINT)) AS share_cnt
  329. -- ==================== STR 指标 ====================
  330. ,ROUND(COALESCE(SUM(CAST(is_return_noself AS BIGINT)) / NULLIF(COUNT(1), 0), 0), 6) AS str_real
  331. ,ROUND(COALESCE(SUM(str_pred) / NULLIF(COUNT(1), 0), 0), 6) AS str_pred
  332. ,ROUND(
  333. (SUM(CAST(is_return_noself AS BIGINT)) / NULLIF(COUNT(1), 0))
  334. / NULLIF(SUM(str_pred) / NULLIF(COUNT(1), 0), 0)
  335. , 4) AS str_copc
  336. ,ROUND(AVG(ABS(str_pred - CAST(is_return_noself AS BIGINT))), 6) AS str_mae
  337. ,ROUND(VARIANCE(str_pred - CAST(is_return_noself AS BIGINT)), 6) AS str_var
  338. -- ==================== ROSN 指标 ====================
  339. ,ROUND(COALESCE(
  340. SUM(CAST(return_n_uv_noself AS BIGINT)) / NULLIF(SUM(CAST(is_return_noself AS BIGINT)), 0)
  341. , 0), 6) AS rosn_real
  342. ,ROUND(COALESCE(SUM(rosn_pred) / NULLIF(SUM(CAST(is_return_noself AS BIGINT)), 0), 0), 6) AS rosn_pred
  343. ,ROUND(
  344. (SUM(CAST(return_n_uv_noself AS BIGINT)) / NULLIF(SUM(CAST(is_return_noself AS BIGINT)), 0))
  345. / NULLIF(SUM(rosn_pred) / NULLIF(SUM(CAST(is_return_noself AS BIGINT)), 0), 0)
  346. , 4) AS rosn_copc
  347. ,ROUND(AVG(rosn_pred_origin), 6) AS rosn_pred_origin
  348. ,ROUND(AVG(
  349. CASE WHEN CAST(is_return_noself AS BIGINT) = 1
  350. THEN ABS(rosn_pred - CAST(return_n_uv_noself AS BIGINT))
  351. END
  352. ), 6) AS rosn_mae
  353. ,ROUND(VARIANCE(
  354. CASE WHEN CAST(is_return_noself AS BIGINT) = 1
  355. THEN rosn_pred - CAST(return_n_uv_noself AS BIGINT)
  356. END
  357. ), 6) AS rosn_var
  358. -- ==================== ROVN 指标 ====================
  359. ,ROUND(COALESCE(SUM(CAST(return_n_uv_noself AS BIGINT)) / NULLIF(COUNT(1), 0), 0), 6) AS rovn
  360. ,ROUND(AVG(str_pred * rosn_pred), 6) AS rovn_pred
  361. ,ROUND(
  362. (SUM(CAST(return_n_uv_noself AS BIGINT)) / NULLIF(COUNT(1), 0))
  363. / NULLIF(AVG(str_pred * rosn_pred), 0)
  364. , 4) AS rovn_copc
  365. ,ROUND(AVG(ABS(str_pred * rosn_pred - CAST(return_n_uv_noself AS BIGINT))), 6) AS rovn_mae
  366. ,ROUND(VARIANCE(str_pred * rosn_pred - CAST(return_n_uv_noself AS BIGINT)), 6) AS rovn_var
  367. ,ROUND(AVG(CAST(sortscore AS DOUBLE)), 6) AS sortscore_avg
  368. -- ==================== B链 ====================
  369. ,SUM(CAST(bn_exp AS BIGINT)) AS bn_exp
  370. ,SUM(CAST(bn_pv AS BIGINT)) AS bn_pv
  371. ,SUM(CAST(bn_uv AS BIGINT)) AS bn_uv
  372. ,SUM(CAST(b1_exp AS BIGINT)) AS b1_exp
  373. ,SUM(CAST(b1_pv AS BIGINT)) AS b1_pv
  374. ,SUM(CAST(b1_uv AS BIGINT)) AS b1_uv
  375. ,SUM(CAST(b2_exp AS BIGINT)) AS b2_exp
  376. ,SUM(CAST(b2_pv AS BIGINT)) AS b2_pv
  377. ,SUM(CAST(b2_uv AS BIGINT)) AS b2_uv
  378. ,SUM(CAST(b3_exp AS BIGINT)) AS b3_exp
  379. ,SUM(CAST(b3_pv AS BIGINT)) AS b3_pv
  380. ,SUM(CAST(b3_uv AS BIGINT)) AS b3_uv
  381. ,ROUND(COALESCE(SUM(CAST(bn_uv AS BIGINT)) / NULLIF(CAST(COUNT(1) AS DOUBLE), 0), 0), 6) AS bn_rov
  382. ,ROUND(COALESCE(SUM(CAST(bn_uv AS BIGINT)) / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0), 0), 6) AS bn_ror
  383. ,ROUND(COALESCE(SUM(CAST(b1_uv AS BIGINT)) / NULLIF(CAST(COUNT(1) AS DOUBLE), 0), 0), 6) AS b1_rov
  384. ,ROUND(COALESCE(SUM(CAST(b1_uv AS BIGINT)) / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0), 0), 6) AS b1_ror
  385. ,ROUND(COALESCE(SUM(CAST(b2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(b1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS b2_rov
  386. ,ROUND(COALESCE(SUM(CAST(b2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(b1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS b2_ror
  387. ,ROUND(COALESCE(SUM(CAST(b3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(b2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS b3_rov
  388. ,ROUND(COALESCE(SUM(CAST(b3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(b2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS b3_ror
  389. -- ==================== C链 (全量depth, 按hop) ====================
  390. ,SUM(CAST(cn_1_exp AS BIGINT)) AS cn_1_exp
  391. ,SUM(CAST(cn_1_pv AS BIGINT)) AS cn_1_pv
  392. ,SUM(CAST(cn_1_uv AS BIGINT)) AS cn_1_uv
  393. ,SUM(CAST(cn_2_exp AS BIGINT)) AS cn_2_exp
  394. ,SUM(CAST(cn_2_pv AS BIGINT)) AS cn_2_pv
  395. ,SUM(CAST(cn_2_uv AS BIGINT)) AS cn_2_uv
  396. ,SUM(CAST(cn_3_exp AS BIGINT)) AS cn_3_exp
  397. ,SUM(CAST(cn_3_pv AS BIGINT)) AS cn_3_pv
  398. ,SUM(CAST(cn_3_uv AS BIGINT)) AS cn_3_uv
  399. ,SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT)) AS cn_total_uv
  400. ,ROUND(COALESCE(SUM(CAST(cn_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(bn_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_1_rov
  401. ,ROUND(COALESCE(SUM(CAST(cn_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(bn_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_1_ror
  402. ,ROUND(COALESCE(SUM(CAST(cn_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_2_rov
  403. ,ROUND(COALESCE(SUM(CAST(cn_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_2_ror
  404. ,ROUND(COALESCE(SUM(CAST(cn_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_3_rov
  405. ,ROUND(COALESCE(SUM(CAST(cn_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS cn_3_ror
  406. ,ROUND(COALESCE(
  407. (SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT)))
  408. / NULLIF(CAST(SUM(CAST(bn_exp AS BIGINT)) AS DOUBLE), 0)
  409. , 0), 6) AS cn_total_rov
  410. ,ROUND(COALESCE(
  411. (SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT)))
  412. / NULLIF(CAST(SUM(CAST(bn_uv AS BIGINT)) AS DOUBLE), 0)
  413. , 0), 6) AS cn_total_ror
  414. -- ==================== C链 (按depth拆分) ====================
  415. ,SUM(CAST(c1_1_exp AS BIGINT)) AS c1_1_exp
  416. ,SUM(CAST(c1_1_pv AS BIGINT)) AS c1_1_pv
  417. ,SUM(CAST(c1_1_uv AS BIGINT)) AS c1_1_uv
  418. ,SUM(CAST(c1_2_exp AS BIGINT)) AS c1_2_exp
  419. ,SUM(CAST(c1_2_pv AS BIGINT)) AS c1_2_pv
  420. ,SUM(CAST(c1_2_uv AS BIGINT)) AS c1_2_uv
  421. ,SUM(CAST(c1_3_exp AS BIGINT)) AS c1_3_exp
  422. ,SUM(CAST(c1_3_pv AS BIGINT)) AS c1_3_pv
  423. ,SUM(CAST(c1_3_uv AS BIGINT)) AS c1_3_uv
  424. ,SUM(CAST(c2_1_exp AS BIGINT)) AS c2_1_exp
  425. ,SUM(CAST(c2_1_pv AS BIGINT)) AS c2_1_pv
  426. ,SUM(CAST(c2_1_uv AS BIGINT)) AS c2_1_uv
  427. ,SUM(CAST(c2_2_exp AS BIGINT)) AS c2_2_exp
  428. ,SUM(CAST(c2_2_pv AS BIGINT)) AS c2_2_pv
  429. ,SUM(CAST(c2_2_uv AS BIGINT)) AS c2_2_uv
  430. ,SUM(CAST(c2_3_exp AS BIGINT)) AS c2_3_exp
  431. ,SUM(CAST(c2_3_pv AS BIGINT)) AS c2_3_pv
  432. ,SUM(CAST(c2_3_uv AS BIGINT)) AS c2_3_uv
  433. ,SUM(CAST(c3_1_exp AS BIGINT)) AS c3_1_exp
  434. ,SUM(CAST(c3_1_pv AS BIGINT)) AS c3_1_pv
  435. ,SUM(CAST(c3_1_uv AS BIGINT)) AS c3_1_uv
  436. ,SUM(CAST(c3_2_exp AS BIGINT)) AS c3_2_exp
  437. ,SUM(CAST(c3_2_pv AS BIGINT)) AS c3_2_pv
  438. ,SUM(CAST(c3_2_uv AS BIGINT)) AS c3_2_uv
  439. ,SUM(CAST(c3_3_exp AS BIGINT)) AS c3_3_exp
  440. ,SUM(CAST(c3_3_pv AS BIGINT)) AS c3_3_pv
  441. ,SUM(CAST(c3_3_uv AS BIGINT)) AS c3_3_uv
  442. -- C链depth拆分 hop1 rov/ror
  443. ,ROUND(COALESCE(SUM(CAST(c1_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(bn_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_1_rov
  444. ,ROUND(COALESCE(SUM(CAST(c1_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(bn_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_1_ror
  445. ,ROUND(COALESCE(SUM(CAST(c2_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_1_rov
  446. ,ROUND(COALESCE(SUM(CAST(c2_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_1_ror
  447. ,ROUND(COALESCE(SUM(CAST(c3_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_1_rov
  448. ,ROUND(COALESCE(SUM(CAST(c3_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_1_ror
  449. -- C链depth拆分 hop2 rov/ror
  450. ,ROUND(COALESCE(SUM(CAST(c1_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_2_rov
  451. ,ROUND(COALESCE(SUM(CAST(c1_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_2_ror
  452. ,ROUND(COALESCE(SUM(CAST(c2_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_2_rov
  453. ,ROUND(COALESCE(SUM(CAST(c2_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_2_ror
  454. ,ROUND(COALESCE(SUM(CAST(c3_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_2_rov
  455. ,ROUND(COALESCE(SUM(CAST(c3_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_2_ror
  456. -- C链depth拆分 hop3 rov/ror
  457. ,ROUND(COALESCE(SUM(CAST(c1_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_3_rov
  458. ,ROUND(COALESCE(SUM(CAST(c1_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(cn_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c1_3_ror
  459. ,ROUND(COALESCE(SUM(CAST(c2_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_3_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_3_rov
  460. ,ROUND(COALESCE(SUM(CAST(c2_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c1_3_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c2_3_ror
  461. ,ROUND(COALESCE(SUM(CAST(c3_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_3_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_3_rov
  462. ,ROUND(COALESCE(SUM(CAST(c3_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(c2_3_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS c3_3_ror
  463. -- ==================== D链 (全量depth, 按hop) ====================
  464. ,SUM(CAST(d0 AS BIGINT)) AS d0
  465. ,SUM(CAST(dn_1_exp AS BIGINT)) AS dn_1_exp
  466. ,SUM(CAST(dn_1_pv AS BIGINT)) AS dn_1_pv
  467. ,SUM(CAST(dn_1_uv AS BIGINT)) AS dn_1_uv
  468. ,SUM(CAST(dn_2_exp AS BIGINT)) AS dn_2_exp
  469. ,SUM(CAST(dn_2_pv AS BIGINT)) AS dn_2_pv
  470. ,SUM(CAST(dn_2_uv AS BIGINT)) AS dn_2_uv
  471. ,SUM(CAST(dn_3_exp AS BIGINT)) AS dn_3_exp
  472. ,SUM(CAST(dn_3_pv AS BIGINT)) AS dn_3_pv
  473. ,SUM(CAST(dn_3_uv AS BIGINT)) AS dn_3_uv
  474. ,SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT)) AS dn_total_uv
  475. ,ROUND(COALESCE(SUM(CAST(dn_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d0 AS BIGINT)) AS DOUBLE), 0), 0), 6) AS dn_1_rov
  476. ,ROUND(COALESCE(SUM(CAST(dn_1_uv AS BIGINT)) / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0), 0), 6) AS dn_1_ror
  477. ,ROUND(COALESCE(SUM(CAST(dn_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS dn_2_rov
  478. ,ROUND(COALESCE(SUM(CAST(dn_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS dn_2_ror
  479. ,ROUND(COALESCE(SUM(CAST(dn_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS dn_3_rov
  480. ,ROUND(COALESCE(SUM(CAST(dn_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS dn_3_ror
  481. ,ROUND(COALESCE(
  482. (SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT)))
  483. / NULLIF(CAST(SUM(CAST(d0 AS BIGINT)) AS DOUBLE), 0)
  484. , 0), 6) AS dn_total_rov
  485. ,ROUND(COALESCE(
  486. (SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT)))
  487. / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0)
  488. , 0), 6) AS dn_total_ror
  489. -- ==================== D链 (按depth拆分) ====================
  490. ,SUM(CAST(d1_1_exp AS BIGINT)) AS d1_1_exp
  491. ,SUM(CAST(d1_1_pv AS BIGINT)) AS d1_1_pv
  492. ,SUM(CAST(d1_1_uv AS BIGINT)) AS d1_1_uv
  493. ,SUM(CAST(d1_2_exp AS BIGINT)) AS d1_2_exp
  494. ,SUM(CAST(d1_2_pv AS BIGINT)) AS d1_2_pv
  495. ,SUM(CAST(d1_2_uv AS BIGINT)) AS d1_2_uv
  496. ,SUM(CAST(d1_3_exp AS BIGINT)) AS d1_3_exp
  497. ,SUM(CAST(d1_3_pv AS BIGINT)) AS d1_3_pv
  498. ,SUM(CAST(d1_3_uv AS BIGINT)) AS d1_3_uv
  499. ,SUM(CAST(d2_1_exp AS BIGINT)) AS d2_1_exp
  500. ,SUM(CAST(d2_1_pv AS BIGINT)) AS d2_1_pv
  501. ,SUM(CAST(d2_1_uv AS BIGINT)) AS d2_1_uv
  502. ,SUM(CAST(d2_2_exp AS BIGINT)) AS d2_2_exp
  503. ,SUM(CAST(d2_2_pv AS BIGINT)) AS d2_2_pv
  504. ,SUM(CAST(d2_2_uv AS BIGINT)) AS d2_2_uv
  505. ,SUM(CAST(d2_3_exp AS BIGINT)) AS d2_3_exp
  506. ,SUM(CAST(d2_3_pv AS BIGINT)) AS d2_3_pv
  507. ,SUM(CAST(d2_3_uv AS BIGINT)) AS d2_3_uv
  508. ,SUM(CAST(d3_1_exp AS BIGINT)) AS d3_1_exp
  509. ,SUM(CAST(d3_1_pv AS BIGINT)) AS d3_1_pv
  510. ,SUM(CAST(d3_1_uv AS BIGINT)) AS d3_1_uv
  511. ,SUM(CAST(d3_2_exp AS BIGINT)) AS d3_2_exp
  512. ,SUM(CAST(d3_2_pv AS BIGINT)) AS d3_2_pv
  513. ,SUM(CAST(d3_2_uv AS BIGINT)) AS d3_2_uv
  514. ,SUM(CAST(d3_3_exp AS BIGINT)) AS d3_3_exp
  515. ,SUM(CAST(d3_3_pv AS BIGINT)) AS d3_3_pv
  516. ,SUM(CAST(d3_3_uv AS BIGINT)) AS d3_3_uv
  517. -- D链depth拆分 hop1 rov/ror
  518. ,ROUND(COALESCE(SUM(CAST(d1_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d0 AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d1_1_rov
  519. ,ROUND(COALESCE(SUM(CAST(d1_1_uv AS BIGINT)) / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0), 0), 6) AS d1_1_ror
  520. ,ROUND(COALESCE(SUM(CAST(d2_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_1_rov
  521. ,ROUND(COALESCE(SUM(CAST(d2_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_1_ror
  522. ,ROUND(COALESCE(SUM(CAST(d3_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_1_rov
  523. ,ROUND(COALESCE(SUM(CAST(d3_1_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_1_ror
  524. -- D链depth拆分 hop2 rov/ror
  525. ,ROUND(COALESCE(SUM(CAST(d1_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_1_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d1_2_rov
  526. ,ROUND(COALESCE(SUM(CAST(d1_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_1_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d1_2_ror
  527. ,ROUND(COALESCE(SUM(CAST(d2_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_2_rov
  528. ,ROUND(COALESCE(SUM(CAST(d2_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_2_ror
  529. ,ROUND(COALESCE(SUM(CAST(d3_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_2_rov
  530. ,ROUND(COALESCE(SUM(CAST(d3_2_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_2_ror
  531. -- D链depth拆分 hop3 rov/ror
  532. ,ROUND(COALESCE(SUM(CAST(d1_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_2_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d1_3_rov
  533. ,ROUND(COALESCE(SUM(CAST(d1_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(dn_2_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d1_3_ror
  534. ,ROUND(COALESCE(SUM(CAST(d2_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_3_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_3_rov
  535. ,ROUND(COALESCE(SUM(CAST(d2_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d1_3_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d2_3_ror
  536. ,ROUND(COALESCE(SUM(CAST(d3_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_3_exp AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_3_rov
  537. ,ROUND(COALESCE(SUM(CAST(d3_3_uv AS BIGINT)) / NULLIF(CAST(SUM(CAST(d2_3_uv AS BIGINT)) AS DOUBLE), 0), 0), 6) AS d3_3_ror
  538. -- ==================== 全链路 ====================
  539. ,SUM(CAST(return_n_uv_noself AS BIGINT))
  540. + SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT))
  541. + SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT))
  542. AS all_return_n_uv
  543. ,ROUND(COALESCE(
  544. ( SUM(CAST(return_n_uv_noself AS BIGINT))
  545. + SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT))
  546. + SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT))
  547. ) / NULLIF(COUNT(1), 0)
  548. , 0), 6) AS all_rovn
  549. ,ROUND(COALESCE(
  550. ( SUM(CAST(return_n_uv_noself AS BIGINT))
  551. + SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT))
  552. + SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT))
  553. ) / NULLIF(CAST(COUNT(1) AS DOUBLE), 0)
  554. , 0), 6) AS all_rov
  555. ,ROUND(COALESCE(
  556. ( SUM(CAST(return_n_uv_noself AS BIGINT))
  557. + SUM(CAST(cn_1_uv AS BIGINT)) + SUM(CAST(cn_2_uv AS BIGINT)) + SUM(CAST(cn_3_uv AS BIGINT))
  558. + SUM(CAST(dn_1_uv AS BIGINT)) + SUM(CAST(dn_2_uv AS BIGINT)) + SUM(CAST(dn_3_uv AS BIGINT))
  559. ) / NULLIF(CAST(COUNT(DISTINCT mid) AS DOUBLE), 0)
  560. , 0), 6) AS all_ror
  561. -- =====================================================================
  562. -- FROM + GROUP BY CUBE
  563. -- =====================================================================
  564. FROM t_wide
  565. GROUP BY CUBE(
  566. user_type
  567. ,hh_bucket
  568. ,head_merge_leve2
  569. ,vid_merge_leve2
  570. ,vid_id
  571. )
  572. ORDER BY exposure_cnt DESC
  573. ;