tmp.sql 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. set odps.sql.select.output.showcolumntype=true;
  2. WITH t_raw AS
  3. (
  4. SELECT *
  5. ,REPLACE(GET_JSON_OBJECT(extend_alg,'$.scoresMap'),"\\","") AS scoresmap
  6. ,CASE WHEN page IN ("回流后沉浸页&内页feed","详情后沉浸页","首页feed","详情页") THEN "推荐"
  7. WHEN page IN ("回流页","其他") THEN "非推荐"
  8. ELSE "其他"
  9. END AS page_type
  10. FROM loghubods.dwd_recsys_alg_sample_all_20250212
  11. WHERE dt = '20260517'
  12. AND abcode IN ("ab0","ab1","ab2","ab3","ab4","ab5","ab6","ab7","ab8","ab9")
  13. AND abcode NOT IN ("ab100")
  14. AND extend_alg IS NOT NULL
  15. AND GET_JSON_OBJECT(extend_alg,'$.scoresMap') IS NOT NULL
  16. )
  17. ,t_base AS
  18. (
  19. SELECT dt
  20. ,CASE WHEN apptype IN ("0") THEN "0"
  21. WHEN apptype IN ("4") THEN "4"
  22. ELSE "其他"
  23. END AS apptype
  24. ,page_type
  25. ,page
  26. ,mid
  27. ,vid
  28. ,share_cnt
  29. ,is_return_noself
  30. ,return_n_uv
  31. ,return_n_uv_noself
  32. ,CAST(GET_JSON_OBJECT(scoresmap,'$.fmRov') AS DOUBLE) AS a_str_pred
  33. ,1.22 * pow(CAST(GET_JSON_OBJECT(scoresmap,'$.NorXGBScore') AS DOUBLE), 1.15) AS bn_ros_pred
  34. ,GET_JSON_OBJECT(v1_feature,'$.title') AS vid_title
  35. ,CAST(GET_JSON_OBJECT(extend_alg,'$.sortScore') AS DOUBLE) AS sortScore
  36. ,CAST(GET_JSON_OBJECT(extend_alg,'$.rovScore') AS DOUBLE) AS rovScore
  37. ,GET_JSON_OBJECT(extend_alg,'$.pushFrom') AS pushFrom
  38. ,CAST(GET_JSON_OBJECT(extend_alg,'$.scoreRos') AS DOUBLE) AS scoreRos
  39. ,CAST(GET_JSON_OBJECT(extend_alg,'$.scoreStr') AS DOUBLE) AS scoreStr
  40. ,CAST(GET_JSON_OBJECT(extend_alg,'$.pushfromrank') AS BIGINT) AS pushfromrank
  41. ,CAST(GET_JSON_OBJECT(b1_feature,'$.exp_168h') AS DOUBLE) AS b1_exp_168h
  42. ,CAST(GET_JSON_OBJECT(b1_feature,'$.return_1_uv_1h') AS DOUBLE)
  43. / NULLIF(CAST(GET_JSON_OBJECT(b1_feature,'$.exp_1h') AS DOUBLE), 0) AS b1_rovn_1h
  44. ,CAST(GET_JSON_OBJECT(b1_feature,'$.return_1_uv_24h') AS DOUBLE)
  45. / NULLIF(CAST(GET_JSON_OBJECT(b1_feature,'$.exp_24h') AS DOUBLE), 0) AS b1_rovn_24h
  46. ,CAST(GET_JSON_OBJECT(b1_feature,'$.rovn_168h') AS DOUBLE) AS b1_rovn_168h
  47. ,CAST(GET_JSON_OBJECT(b1_feature,'$.is_share_168h') AS DOUBLE)
  48. / NULLIF(CAST(GET_JSON_OBJECT(b1_feature,'$.exp_168h') AS DOUBLE), 0) AS b1_str_168h
  49. ,CAST(GET_JSON_OBJECT(b1_feature,'$.return_1_uv_72h') AS DOUBLE)
  50. / NULLIF(CAST(GET_JSON_OBJECT(b1_feature,'$.exp_72h') AS DOUBLE), 0) AS b1_rovn_72h
  51. ,CAST(GET_JSON_OBJECT(b1_feature,'$.is_share_24h') AS DOUBLE)
  52. / NULLIF(CAST(GET_JSON_OBJECT(b1_feature,'$.exp_24h') AS DOUBLE), 0) AS b1_str_24h
  53. ,CAST(GET_JSON_OBJECT(b1_feature,'$.str_one_1h') AS DOUBLE) AS b1_str_one_1h
  54. ,CAST(GET_JSON_OBJECT(b1_feature,'$.share_cnt_168h') AS DOUBLE) AS b1_share_cnt_168h
  55. ,CAST(GET_JSON_OBJECT(b2_feature,'$.return_n_uv_168h') AS DOUBLE)
  56. / NULLIF(CAST(GET_JSON_OBJECT(b2_feature,'$.exp_168h') AS DOUBLE), 0) AS b2_rovn_168h
  57. ,CAST(GET_JSON_OBJECT(b2_feature,'$.exp_168h') AS DOUBLE) AS b2_exp_168h
  58. ,CAST(GET_JSON_OBJECT(b2_feature,'$.return_n_uv_1h') AS DOUBLE)
  59. / NULLIF(CAST(GET_JSON_OBJECT(b2_feature,'$.exp_1h') AS DOUBLE), 0) AS b2_rovn_1h
  60. ,CAST(GET_JSON_OBJECT(b2_feature,'$.return_n_uv_24h') AS DOUBLE)
  61. / NULLIF(CAST(GET_JSON_OBJECT(b2_feature,'$.exp_24h') AS DOUBLE), 0) AS b2_rovn_24h
  62. ,CAST(GET_JSON_OBJECT(b2_feature,'$.is_share_168h') AS DOUBLE)
  63. / NULLIF(CAST(GET_JSON_OBJECT(b2_feature,'$.exp_168h') AS DOUBLE), 0) AS b2_str_168h
  64. ,CAST(GET_JSON_OBJECT(b2_feature,'$.new_exposure_cnt_168h') AS DOUBLE) AS b2_new_exp_168h
  65. ,CAST(GET_JSON_OBJECT(b3_feature,'$.return_n_uv_168h') AS DOUBLE)
  66. / NULLIF(CAST(GET_JSON_OBJECT(b3_feature,'$.exp_168h') AS DOUBLE), 0) AS b3_rovn_168h
  67. ,CAST(GET_JSON_OBJECT(b3_feature,'$.exp_168h') AS DOUBLE) AS b3_exp_168h
  68. ,CAST(GET_JSON_OBJECT(b12_feature,'$.return_n_uv_30d') AS DOUBLE)
  69. / NULLIF(CAST(GET_JSON_OBJECT(b12_feature,'$.exp_30d') AS DOUBLE), 0) AS b12_rovn_30d
  70. ,CAST(GET_JSON_OBJECT(b12_feature,'$.exp_30d') AS DOUBLE) AS b12_exp_30d
  71. ,CAST(GET_JSON_OBJECT(b12_feature,'$.return_n_uv_7d') AS DOUBLE)
  72. / NULLIF(CAST(GET_JSON_OBJECT(b12_feature,'$.exp_7d') AS DOUBLE), 0) AS b12_rovn_7d
  73. ,CAST(GET_JSON_OBJECT(b12_feature,'$.return_n_uv_60d') AS DOUBLE)
  74. / NULLIF(CAST(GET_JSON_OBJECT(b12_feature,'$.exp_60d') AS DOUBLE), 0) AS b12_rovn_60d
  75. ,CAST(GET_JSON_OBJECT(b12_feature,'$.is_share_30d') AS DOUBLE)
  76. / NULLIF(CAST(GET_JSON_OBJECT(b12_feature,'$.exp_30d') AS DOUBLE), 0) AS b12_str_30d
  77. ,CAST(GET_JSON_OBJECT(b12_feature,'$.exp_60d') AS DOUBLE) AS b12_exp_60d
  78. ,CAST(GET_JSON_OBJECT(c1_feature,'$.rovn_168h') AS DOUBLE) AS c1_rovn_168h
  79. ,CAST(GET_JSON_OBJECT(c1_feature,'$.exp_168h') AS DOUBLE) AS c1_exp_168h
  80. ,CAST(GET_JSON_OBJECT(c1_feature,'$.is_share_168h') AS DOUBLE)
  81. / NULLIF(CAST(GET_JSON_OBJECT(c1_feature,'$.exp_168h') AS DOUBLE), 0) AS c1_str_168h
  82. ,CAST(GET_JSON_OBJECT(c1_feature,'$.return_1_uv_24h') AS DOUBLE)
  83. / NULLIF(CAST(GET_JSON_OBJECT(c1_feature,'$.exp_24h') AS DOUBLE), 0) AS c1_rovn_24h
  84. ,CAST(GET_JSON_OBJECT(c1_feature,'$.click_168h') AS DOUBLE) AS c1_click_168h
  85. ,CAST(GET_JSON_OBJECT(b8_feature,'$.return_n_uv_168h') AS DOUBLE)
  86. / NULLIF(CAST(GET_JSON_OBJECT(b8_feature,'$.exp_168h') AS DOUBLE), 0) AS b8_rovn_168h
  87. ,CAST(GET_JSON_OBJECT(b8_feature,'$.exp_168h') AS DOUBLE) AS b8_exp_168h
  88. ,CAST(GET_JSON_OBJECT(b9_feature,'$.return_n_uv_168h') AS DOUBLE)
  89. / NULLIF(CAST(GET_JSON_OBJECT(b9_feature,'$.exp_168h') AS DOUBLE), 0) AS b9_rovn_168h
  90. ,CAST(GET_JSON_OBJECT(b9_feature,'$.exp_168h') AS DOUBLE) AS b9_exp_168h
  91. ,CAST(GET_JSON_OBJECT(b10_feature,'$.return_n_uv_168h') AS DOUBLE)
  92. / NULLIF(CAST(GET_JSON_OBJECT(b10_feature,'$.exp_168h') AS DOUBLE), 0) AS b10_rovn_168h
  93. ,CAST(GET_JSON_OBJECT(b10_feature,'$.exp_168h') AS DOUBLE) AS b10_exp_168h
  94. ,CAST(GET_JSON_OBJECT(d3_feature,'$.rovn') AS DOUBLE) AS d3_rovn
  95. ,CAST(GET_JSON_OBJECT(d3_feature,'$.exp') AS DOUBLE) AS d3_exp
  96. ,GET_JSON_OBJECT(v1_feature,'$.channel') AS channel
  97. ,GET_JSON_OBJECT(v1_feature,'$.merge_first_level_cate') AS merge_cate1
  98. ,CAST(GET_JSON_OBJECT(v1_feature,'$.total_time') AS DOUBLE) AS total_time
  99. ,GET_JSON_OBJECT(v1_feature,'$.merge_second_level_cate') AS merge_cate2
  100. ,GET_JSON_OBJECT(v1_feature,'$.vid_source') AS vid_source
  101. ,GET_JSON_OBJECT(v1_feature,'$.is_fes') AS is_fes
  102. ,GET_JSON_OBJECT(v1_feature,'$.attribute_province') AS attribute_province
  103. ,CAST(GET_JSON_OBJECT(extend, '$.extParams.sequence') AS BIGINT) AS seq_position
  104. FROM t_raw
  105. )
  106. ,t_valid AS
  107. (
  108. SELECT *
  109. FROM t_base
  110. WHERE a_str_pred IS NOT NULL
  111. AND bn_ros_pred IS NOT NULL
  112. )
  113. ,t_pushfrom_ranked AS
  114. (
  115. SELECT dt
  116. ,COALESCE(apptype, 'all') AS apptype
  117. ,COALESCE(page_type, 'all') AS page_type
  118. ,COALESCE(page, 'all') AS page
  119. ,vid
  120. ,pushFrom
  121. ,COUNT(1) AS pf_cnt
  122. ,ROW_NUMBER() OVER (
  123. PARTITION BY dt, COALESCE(apptype,'all'), COALESCE(page_type,'all'), COALESCE(page,'all'), vid
  124. ORDER BY COUNT(1) DESC
  125. ) AS pf_rank
  126. FROM t_valid
  127. GROUP BY dt, apptype, page_type, page, vid, pushFrom
  128. GROUPING SETS (
  129. (dt, apptype, page_type, page, vid, pushFrom),
  130. (dt, apptype, page_type, vid, pushFrom),
  131. (dt, apptype, page, vid, pushFrom),
  132. (dt, page_type, page, vid, pushFrom),
  133. (dt, apptype, vid, pushFrom),
  134. (dt, page_type, vid, pushFrom),
  135. (dt, page, vid, pushFrom),
  136. (dt, vid, pushFrom)
  137. )
  138. )
  139. ,t_pushfrom_mode AS
  140. (
  141. SELECT dt, apptype, page_type, page, vid, pushFrom AS top_pushFrom
  142. FROM t_pushfrom_ranked
  143. WHERE pf_rank = 1
  144. )
  145. ,t_vid_agg_base AS
  146. (
  147. SELECT dt
  148. ,COALESCE(apptype, 'all') AS apptype
  149. ,COALESCE(page_type, 'all') AS page_type
  150. ,COALESCE(page, 'all') AS page
  151. ,vid
  152. ,MAX(vid_title) AS vid_title
  153. ,COUNT(1) AS exp_cnt
  154. ,COALESCE(SUM(share_cnt),0) AS share_cnt
  155. ,COALESCE(SUM(return_n_uv),0) AS return_cnt
  156. ,SUM(is_return_noself) AS is_return_noself_cnt
  157. ,SUM(return_n_uv_noself) AS return_noself_sum
  158. ,SUM(a_str_pred) AS a_strx_pred_sum
  159. ,SUM(CASE WHEN is_return_noself = 1 THEN bn_ros_pred END) AS bn_rosx_pred_wsum
  160. ,SUM(CASE WHEN is_return_noself = 1 THEN 1 END) AS bn_rosx_pred_cnt
  161. ,SUM(a_str_pred * bn_ros_pred) AS bn_rovx_pred_sum
  162. ,round(COALESCE(SUM(share_cnt) / COUNT(1),0),6) AS a_str
  163. ,round(COALESCE(SUM(return_n_uv) / SUM(share_cnt),0),6) AS bn_ros
  164. ,round(COALESCE(SUM(return_n_uv) / COUNT(1),0),6) AS bn_rov
  165. ,round(COALESCE(SUM(is_return_noself) / COUNT(1),0),6) AS a_strx
  166. ,round(COALESCE(SUM(return_n_uv_noself) / NULLIF(SUM(is_return_noself),0),0),6) AS bn_rosx
  167. ,round(COALESCE(SUM(return_n_uv_noself) / COUNT(1),0),6) AS bn_rovx
  168. ,round(AVG(a_str_pred),6) AS a_strx_pred
  169. ,round(AVG(CASE WHEN is_return_noself = 1 THEN bn_ros_pred END),6) AS bn_rosx_pred
  170. ,round(AVG(a_str_pred * bn_ros_pred),6) AS bn_rovx_pred
  171. ,round((SUM(is_return_noself) / COUNT(1)) / NULLIF(SUM(a_str_pred) / COUNT(1), 0), 4) AS a_strx_copc
  172. ,round(AVG(CASE WHEN is_return_noself = 1 THEN return_n_uv_noself END) / NULLIF(AVG(CASE WHEN is_return_noself = 1 THEN bn_ros_pred END), 0), 4) AS bn_rosx_copc
  173. ,round((SUM(return_n_uv_noself) / COUNT(1)) / NULLIF(AVG(a_str_pred * bn_ros_pred), 0), 4) AS bn_rovx_copc
  174. ,round(AVG(sortScore),4) AS avg_sortScore
  175. ,round(AVG(rovScore),4) AS avg_rovScore
  176. ,SUM(sortScore) AS sortScore_sum
  177. ,SUM(rovScore) AS rovScore_sum
  178. ,round(AVG(scoreRos),4) AS avg_scoreRos
  179. ,SUM(scoreRos) AS scoreRos_sum
  180. ,round(AVG(scoreStr),4) AS avg_scoreStr
  181. ,SUM(scoreStr) AS scoreStr_sum
  182. ,round(AVG(pushfromrank),1) AS avg_pushfromrank
  183. ,SUM(pushfromrank) AS pushfromrank_sum
  184. ,round(AVG(b1_exp_168h),0) AS b1_exp_168h
  185. ,SUM(b1_exp_168h) AS b1_exp_168h_sum
  186. ,round(AVG(b1_rovn_1h),6) AS b1_rovn_1h
  187. ,SUM(b1_rovn_1h) AS b1_rovn_1h_sum
  188. ,round(AVG(b1_rovn_24h),6) AS b1_rovn_24h
  189. ,SUM(b1_rovn_24h) AS b1_rovn_24h_sum
  190. ,round(AVG(b1_rovn_168h),6) AS b1_rovn_168h
  191. ,SUM(b1_rovn_168h) AS b1_rovn_168h_sum
  192. ,round(AVG(b1_str_168h),6) AS b1_str_168h
  193. ,SUM(b1_str_168h) AS b1_str_168h_sum
  194. ,round(AVG(b1_rovn_72h),6) AS b1_rovn_72h
  195. ,SUM(b1_rovn_72h) AS b1_rovn_72h_sum
  196. ,round(AVG(b1_str_24h),6) AS b1_str_24h
  197. ,SUM(b1_str_24h) AS b1_str_24h_sum
  198. ,round(AVG(b1_str_one_1h),6) AS b1_str_one_1h
  199. ,SUM(b1_str_one_1h) AS b1_str_one_1h_sum
  200. ,round(AVG(b1_share_cnt_168h),0) AS b1_share_cnt_168h
  201. ,SUM(b1_share_cnt_168h) AS b1_share_cnt_168h_sum
  202. ,round(AVG(b2_rovn_168h),6) AS b2_rovn_168h
  203. ,SUM(b2_rovn_168h) AS b2_rovn_168h_sum
  204. ,round(AVG(b2_exp_168h),0) AS b2_exp_168h
  205. ,SUM(b2_exp_168h) AS b2_exp_168h_sum
  206. ,round(AVG(b2_rovn_1h),6) AS b2_rovn_1h
  207. ,SUM(b2_rovn_1h) AS b2_rovn_1h_sum
  208. ,round(AVG(b2_rovn_24h),6) AS b2_rovn_24h
  209. ,SUM(b2_rovn_24h) AS b2_rovn_24h_sum
  210. ,round(AVG(b2_str_168h),6) AS b2_str_168h
  211. ,SUM(b2_str_168h) AS b2_str_168h_sum
  212. ,round(AVG(b2_new_exp_168h),0) AS b2_new_exp_168h
  213. ,SUM(b2_new_exp_168h) AS b2_new_exp_168h_sum
  214. ,round(AVG(b3_rovn_168h),6) AS b3_rovn_168h
  215. ,SUM(b3_rovn_168h) AS b3_rovn_168h_sum
  216. ,round(AVG(b3_exp_168h),0) AS b3_exp_168h
  217. ,SUM(b3_exp_168h) AS b3_exp_168h_sum
  218. ,round(AVG(b12_rovn_30d),6) AS b12_rovn_30d
  219. ,SUM(b12_rovn_30d) AS b12_rovn_30d_sum
  220. ,round(AVG(b12_exp_30d),0) AS b12_exp_30d
  221. ,SUM(b12_exp_30d) AS b12_exp_30d_sum
  222. ,round(AVG(b12_rovn_7d),6) AS b12_rovn_7d
  223. ,SUM(b12_rovn_7d) AS b12_rovn_7d_sum
  224. ,round(AVG(b12_rovn_60d),6) AS b12_rovn_60d
  225. ,SUM(b12_rovn_60d) AS b12_rovn_60d_sum
  226. ,round(AVG(b12_str_30d),6) AS b12_str_30d
  227. ,SUM(b12_str_30d) AS b12_str_30d_sum
  228. ,round(AVG(b12_exp_60d),0) AS b12_exp_60d
  229. ,SUM(b12_exp_60d) AS b12_exp_60d_sum
  230. ,round(AVG(c1_rovn_168h),6) AS avg_c1_rovn_168h
  231. ,SUM(c1_rovn_168h) AS c1_rovn_168h_sum
  232. ,round(AVG(c1_exp_168h),0) AS avg_c1_exp_168h
  233. ,SUM(c1_exp_168h) AS c1_exp_168h_sum
  234. ,round(AVG(c1_str_168h),6) AS avg_c1_str_168h
  235. ,SUM(c1_str_168h) AS c1_str_168h_sum
  236. ,round(AVG(c1_rovn_24h),6) AS avg_c1_rovn_24h
  237. ,SUM(c1_rovn_24h) AS c1_rovn_24h_sum
  238. ,round(AVG(c1_click_168h),0) AS avg_c1_click_168h
  239. ,SUM(c1_click_168h) AS c1_click_168h_sum
  240. ,round(AVG(b8_rovn_168h),6) AS b8_rovn_168h
  241. ,SUM(b8_rovn_168h) AS b8_rovn_168h_sum
  242. ,round(AVG(b8_exp_168h),0) AS b8_exp_168h
  243. ,SUM(b8_exp_168h) AS b8_exp_168h_sum
  244. ,round(AVG(b9_rovn_168h),6) AS b9_rovn_168h
  245. ,SUM(b9_rovn_168h) AS b9_rovn_168h_sum
  246. ,round(AVG(b9_exp_168h),0) AS b9_exp_168h
  247. ,SUM(b9_exp_168h) AS b9_exp_168h_sum
  248. ,round(AVG(b10_rovn_168h),6) AS b10_rovn_168h
  249. ,SUM(b10_rovn_168h) AS b10_rovn_168h_sum
  250. ,round(AVG(b10_exp_168h),0) AS b10_exp_168h
  251. ,SUM(b10_exp_168h) AS b10_exp_168h_sum
  252. ,round(AVG(d3_rovn),6) AS d3_rovn
  253. ,SUM(d3_rovn) AS d3_rovn_sum
  254. ,round(AVG(d3_exp),0) AS d3_exp
  255. ,SUM(d3_exp) AS d3_exp_sum
  256. ,MAX(channel) AS channel
  257. ,MAX(merge_cate1) AS merge_cate1
  258. ,round(AVG(total_time),0) AS total_time
  259. ,SUM(total_time) AS total_time_sum
  260. ,MAX(merge_cate2) AS merge_cate2
  261. ,MAX(vid_source) AS vid_source
  262. ,MAX(is_fes) AS is_fes
  263. ,MAX(attribute_province) AS attribute_province
  264. ,round(AVG(seq_position),1) AS avg_seq_position
  265. ,SUM(seq_position) AS seq_position_sum
  266. FROM t_valid
  267. GROUP BY dt, apptype, page_type, page, vid
  268. GROUPING SETS (
  269. (dt, apptype, page_type, page, vid),
  270. (dt, apptype, page_type, vid),
  271. (dt, apptype, page, vid),
  272. (dt, page_type, page, vid),
  273. (dt, apptype, vid),
  274. (dt, page_type, vid),
  275. (dt, page, vid),
  276. (dt, vid)
  277. )
  278. )
  279. ,t_vid_agg AS
  280. (
  281. SELECT a.*
  282. ,b.top_pushFrom
  283. FROM t_vid_agg_base a
  284. LEFT JOIN t_pushfrom_mode b
  285. ON a.dt = b.dt
  286. AND a.apptype = b.apptype
  287. AND a.page_type = b.page_type
  288. AND a.page = b.page
  289. AND a.vid = b.vid
  290. )
  291. ,t_ranked AS
  292. (
  293. SELECT *
  294. ,ROW_NUMBER() OVER (PARTITION BY dt, apptype, page_type, page ORDER BY exp_cnt DESC) AS exp_rank
  295. FROM t_vid_agg
  296. )
  297. ,t_top20 AS
  298. (
  299. SELECT *
  300. ,ROW_NUMBER() OVER (PARTITION BY dt, apptype, page_type, page ORDER BY bn_rov DESC) AS bn_rovn_rank
  301. ,ROW_NUMBER() OVER (PARTITION BY dt, apptype, page_type, page ORDER BY avg_seq_position ASC) AS seq_rank
  302. ,ROW_NUMBER() OVER (PARTITION BY dt, apptype, page_type, page ORDER BY avg_sortScore DESC) AS score_rank
  303. FROM t_ranked
  304. WHERE exp_rank <= 20
  305. )
  306. ,t_other_summary AS
  307. (
  308. SELECT dt, apptype, page_type, page
  309. ,'其他' AS vid
  310. ,CAST(NULL AS STRING) AS vid_title
  311. ,CAST(NULL AS BIGINT) AS exp_rank
  312. ,CAST(NULL AS BIGINT) AS bn_rovn_rank
  313. ,CAST(NULL AS BIGINT) AS seq_rank
  314. ,CAST(NULL AS BIGINT) AS score_rank
  315. ,SUM(exp_cnt) AS exp_cnt
  316. ,SUM(share_cnt) AS share_cnt
  317. ,SUM(return_cnt) AS return_cnt
  318. ,round(SUM(share_cnt) * 1.0 / NULLIF(SUM(exp_cnt), 0), 6) AS a_str
  319. ,round(SUM(return_cnt) * 1.0 / NULLIF(SUM(share_cnt), 0), 6) AS bn_ros
  320. ,round(SUM(return_cnt) * 1.0 / NULLIF(SUM(exp_cnt), 0), 6) AS bn_rov
  321. ,round(SUM(is_return_noself_cnt) * 1.0 / NULLIF(SUM(exp_cnt), 0), 6) AS a_strx
  322. ,round(SUM(return_noself_sum) * 1.0 / NULLIF(SUM(is_return_noself_cnt), 0), 6) AS bn_rosx
  323. ,round(SUM(return_noself_sum) * 1.0 / NULLIF(SUM(exp_cnt), 0), 6) AS bn_rovx
  324. ,round(SUM(a_strx_pred_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS a_strx_pred
  325. ,round(SUM(bn_rosx_pred_wsum) / NULLIF(SUM(bn_rosx_pred_cnt), 0), 6) AS bn_rosx_pred
  326. ,round(SUM(bn_rovx_pred_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS bn_rovx_pred
  327. ,round(SUM(is_return_noself_cnt) * 1.0 / NULLIF(SUM(a_strx_pred_sum), 0), 4) AS a_strx_copc
  328. ,round((SUM(return_noself_sum) * 1.0 / NULLIF(SUM(is_return_noself_cnt), 0)) / NULLIF(SUM(bn_rosx_pred_wsum) / NULLIF(SUM(bn_rosx_pred_cnt), 0), 0), 4) AS bn_rosx_copc
  329. ,round(SUM(return_noself_sum) * 1.0 / NULLIF(SUM(bn_rovx_pred_sum), 0), 4) AS bn_rovx_copc
  330. ,round(SUM(sortScore_sum) / NULLIF(SUM(exp_cnt), 0), 4) AS avg_sortScore
  331. ,round(SUM(rovScore_sum) / NULLIF(SUM(exp_cnt), 0), 4) AS avg_rovScore
  332. ,CAST(NULL AS STRING) AS top_pushFrom
  333. ,round(SUM(seq_position_sum) / NULLIF(SUM(exp_cnt), 0), 1) AS avg_seq_position
  334. ,round(SUM(scoreRos_sum) / NULLIF(SUM(exp_cnt), 0), 4) AS avg_scoreRos
  335. ,round(SUM(scoreStr_sum) / NULLIF(SUM(exp_cnt), 0), 4) AS avg_scoreStr
  336. ,round(SUM(pushfromrank_sum) / NULLIF(SUM(exp_cnt), 0), 1) AS avg_pushfromrank
  337. ,round(SUM(b1_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b1_exp_168h
  338. ,round(SUM(b1_rovn_1h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_rovn_1h
  339. ,round(SUM(b1_rovn_24h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_rovn_24h
  340. ,round(SUM(b1_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_rovn_168h
  341. ,round(SUM(b1_str_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_str_168h
  342. ,round(SUM(b1_rovn_72h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_rovn_72h
  343. ,round(SUM(b1_str_24h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_str_24h
  344. ,round(SUM(b1_str_one_1h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b1_str_one_1h
  345. ,round(SUM(b1_share_cnt_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b1_share_cnt_168h
  346. ,round(SUM(b2_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b2_rovn_168h
  347. ,round(SUM(b2_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b2_exp_168h
  348. ,round(SUM(b2_rovn_1h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b2_rovn_1h
  349. ,round(SUM(b2_rovn_24h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b2_rovn_24h
  350. ,round(SUM(b2_str_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b2_str_168h
  351. ,round(SUM(b2_new_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b2_new_exp_168h
  352. ,round(SUM(b3_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b3_rovn_168h
  353. ,round(SUM(b3_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b3_exp_168h
  354. ,round(SUM(b12_rovn_30d_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b12_rovn_30d
  355. ,round(SUM(b12_exp_30d_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b12_exp_30d
  356. ,round(SUM(b12_rovn_7d_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b12_rovn_7d
  357. ,round(SUM(b12_rovn_60d_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b12_rovn_60d
  358. ,round(SUM(b12_str_30d_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b12_str_30d
  359. ,round(SUM(b12_exp_60d_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b12_exp_60d
  360. ,round(SUM(c1_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS avg_c1_rovn_168h
  361. ,round(SUM(c1_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS avg_c1_exp_168h
  362. ,round(SUM(c1_str_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS avg_c1_str_168h
  363. ,round(SUM(c1_rovn_24h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS avg_c1_rovn_24h
  364. ,round(SUM(c1_click_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS avg_c1_click_168h
  365. ,round(SUM(b8_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b8_rovn_168h
  366. ,round(SUM(b8_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b8_exp_168h
  367. ,round(SUM(b9_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b9_rovn_168h
  368. ,round(SUM(b9_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b9_exp_168h
  369. ,round(SUM(b10_rovn_168h_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS b10_rovn_168h
  370. ,round(SUM(b10_exp_168h_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS b10_exp_168h
  371. ,round(SUM(d3_rovn_sum) / NULLIF(SUM(exp_cnt), 0), 6) AS d3_rovn
  372. ,round(SUM(d3_exp_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS d3_exp
  373. ,CAST(NULL AS STRING) AS channel
  374. ,CAST(NULL AS STRING) AS merge_cate1
  375. ,round(SUM(total_time_sum) / NULLIF(SUM(exp_cnt), 0), 0) AS total_time
  376. ,CAST(NULL AS STRING) AS merge_cate2
  377. ,CAST(NULL AS STRING) AS vid_source
  378. ,CAST(NULL AS STRING) AS is_fes
  379. ,CAST(NULL AS STRING) AS attribute_province
  380. FROM t_ranked
  381. WHERE exp_rank > 20
  382. GROUP BY dt, apptype, page_type, page
  383. )
  384. ,t_all_summary AS
  385. (
  386. SELECT dt
  387. ,COALESCE(apptype, 'all') AS apptype
  388. ,COALESCE(page_type, 'all') AS page_type
  389. ,COALESCE(page, 'all') AS page
  390. ,'all' AS vid
  391. ,CAST(NULL AS STRING) AS vid_title
  392. ,CAST(NULL AS BIGINT) AS exp_rank
  393. ,CAST(NULL AS BIGINT) AS bn_rovn_rank
  394. ,CAST(NULL AS BIGINT) AS seq_rank
  395. ,CAST(NULL AS BIGINT) AS score_rank
  396. ,COUNT(1) AS exp_cnt
  397. ,COALESCE(SUM(share_cnt),0) AS share_cnt
  398. ,COALESCE(SUM(return_n_uv),0) AS return_cnt
  399. ,round(COALESCE(SUM(share_cnt) / COUNT(1),0),6) AS a_str
  400. ,round(COALESCE(SUM(return_n_uv) / SUM(share_cnt),0),6) AS bn_ros
  401. ,round(COALESCE(SUM(return_n_uv) / COUNT(1),0),6) AS bn_rov
  402. ,round(COALESCE(SUM(is_return_noself) / COUNT(1),0),6) AS a_strx
  403. ,round(COALESCE(SUM(return_n_uv_noself) / NULLIF(SUM(is_return_noself),0),0),6) AS bn_rosx
  404. ,round(COALESCE(SUM(return_n_uv_noself) / COUNT(1),0),6) AS bn_rovx
  405. ,round(AVG(a_str_pred),6) AS a_strx_pred
  406. ,round(AVG(CASE WHEN is_return_noself = 1 THEN bn_ros_pred END),6) AS bn_rosx_pred
  407. ,round(AVG(a_str_pred * bn_ros_pred),6) AS bn_rovx_pred
  408. ,round((SUM(is_return_noself) / COUNT(1)) / NULLIF(SUM(a_str_pred) / COUNT(1), 0), 4) AS a_strx_copc
  409. ,round(AVG(CASE WHEN is_return_noself = 1 THEN return_n_uv_noself END) / NULLIF(AVG(CASE WHEN is_return_noself = 1 THEN bn_ros_pred END), 0), 4) AS bn_rosx_copc
  410. ,round((SUM(return_n_uv_noself) / COUNT(1)) / NULLIF(AVG(a_str_pred * bn_ros_pred), 0), 4) AS bn_rovx_copc
  411. ,round(AVG(sortScore),4) AS avg_sortScore
  412. ,round(AVG(rovScore),4) AS avg_rovScore
  413. ,CAST(NULL AS STRING) AS top_pushFrom
  414. ,round(AVG(seq_position),1) AS avg_seq_position
  415. ,round(AVG(scoreRos),4) AS avg_scoreRos
  416. ,round(AVG(scoreStr),4) AS avg_scoreStr
  417. ,round(AVG(pushfromrank),1) AS avg_pushfromrank
  418. ,round(AVG(b1_exp_168h),0) AS b1_exp_168h
  419. ,round(AVG(b1_rovn_1h),6) AS b1_rovn_1h
  420. ,round(AVG(b1_rovn_24h),6) AS b1_rovn_24h
  421. ,round(AVG(b1_rovn_168h),6) AS b1_rovn_168h
  422. ,round(AVG(b1_str_168h),6) AS b1_str_168h
  423. ,round(AVG(b1_rovn_72h),6) AS b1_rovn_72h
  424. ,round(AVG(b1_str_24h),6) AS b1_str_24h
  425. ,round(AVG(b1_str_one_1h),6) AS b1_str_one_1h
  426. ,round(AVG(b1_share_cnt_168h),0) AS b1_share_cnt_168h
  427. ,round(AVG(b2_rovn_168h),6) AS b2_rovn_168h
  428. ,round(AVG(b2_exp_168h),0) AS b2_exp_168h
  429. ,round(AVG(b2_rovn_1h),6) AS b2_rovn_1h
  430. ,round(AVG(b2_rovn_24h),6) AS b2_rovn_24h
  431. ,round(AVG(b2_str_168h),6) AS b2_str_168h
  432. ,round(AVG(b2_new_exp_168h),0) AS b2_new_exp_168h
  433. ,round(AVG(b3_rovn_168h),6) AS b3_rovn_168h
  434. ,round(AVG(b3_exp_168h),0) AS b3_exp_168h
  435. ,round(AVG(b12_rovn_30d),6) AS b12_rovn_30d
  436. ,round(AVG(b12_exp_30d),0) AS b12_exp_30d
  437. ,round(AVG(b12_rovn_7d),6) AS b12_rovn_7d
  438. ,round(AVG(b12_rovn_60d),6) AS b12_rovn_60d
  439. ,round(AVG(b12_str_30d),6) AS b12_str_30d
  440. ,round(AVG(b12_exp_60d),0) AS b12_exp_60d
  441. ,round(AVG(c1_rovn_168h),6) AS avg_c1_rovn_168h
  442. ,round(AVG(c1_exp_168h),0) AS avg_c1_exp_168h
  443. ,round(AVG(c1_str_168h),6) AS avg_c1_str_168h
  444. ,round(AVG(c1_rovn_24h),6) AS avg_c1_rovn_24h
  445. ,round(AVG(c1_click_168h),0) AS avg_c1_click_168h
  446. ,round(AVG(b8_rovn_168h),6) AS b8_rovn_168h
  447. ,round(AVG(b8_exp_168h),0) AS b8_exp_168h
  448. ,round(AVG(b9_rovn_168h),6) AS b9_rovn_168h
  449. ,round(AVG(b9_exp_168h),0) AS b9_exp_168h
  450. ,round(AVG(b10_rovn_168h),6) AS b10_rovn_168h
  451. ,round(AVG(b10_exp_168h),0) AS b10_exp_168h
  452. ,round(AVG(d3_rovn),6) AS d3_rovn
  453. ,round(AVG(d3_exp),0) AS d3_exp
  454. ,CAST(NULL AS STRING) AS channel
  455. ,CAST(NULL AS STRING) AS merge_cate1
  456. ,round(AVG(total_time),0) AS total_time
  457. ,CAST(NULL AS STRING) AS merge_cate2
  458. ,CAST(NULL AS STRING) AS vid_source
  459. ,CAST(NULL AS STRING) AS is_fes
  460. ,CAST(NULL AS STRING) AS attribute_province
  461. FROM t_valid
  462. GROUP BY dt, apptype, page_type, page
  463. GROUPING SETS (
  464. (dt, apptype, page_type, page),
  465. (dt, apptype, page_type),
  466. (dt, apptype, page),
  467. (dt, page_type, page),
  468. (dt, apptype),
  469. (dt, page_type),
  470. (dt, page),
  471. (dt)
  472. )
  473. )
  474. SELECT dt
  475. ,apptype
  476. ,page_type
  477. ,page
  478. ,vid
  479. ,vid_title
  480. ,exp_rank
  481. ,bn_rovn_rank
  482. ,seq_rank
  483. ,score_rank
  484. ,round(exp_cnt * 1.0 / MAX(CASE WHEN vid = 'all' THEN exp_cnt END) OVER (PARTITION BY dt, apptype, page_type, page), 4) AS exp_pct
  485. ,exp_cnt, share_cnt, return_cnt
  486. ,a_str, bn_ros, bn_rov
  487. ,a_strx, bn_rosx, bn_rovx
  488. ,a_strx_pred, bn_rosx_pred, bn_rovx_pred
  489. ,a_strx_copc, bn_rosx_copc, bn_rovx_copc
  490. ,avg_sortScore, avg_rovScore
  491. ,top_pushFrom
  492. ,avg_seq_position
  493. ,avg_scoreRos, avg_scoreStr, avg_pushfromrank
  494. ,b1_exp_168h, b1_rovn_1h, b1_rovn_24h, b1_rovn_168h, b1_str_168h
  495. ,b1_rovn_72h, b1_str_24h, b1_str_one_1h, b1_share_cnt_168h
  496. ,b2_rovn_168h, b2_exp_168h
  497. ,b2_rovn_1h, b2_rovn_24h, b2_str_168h, b2_new_exp_168h
  498. ,b3_rovn_168h, b3_exp_168h
  499. ,b12_rovn_30d, b12_exp_30d
  500. ,b12_rovn_7d, b12_rovn_60d, b12_str_30d, b12_exp_60d
  501. ,avg_c1_rovn_168h, avg_c1_exp_168h
  502. ,avg_c1_str_168h, avg_c1_rovn_24h, avg_c1_click_168h
  503. ,b8_rovn_168h
  504. ,b8_exp_168h
  505. ,b9_rovn_168h, b9_exp_168h
  506. ,b10_rovn_168h, b10_exp_168h
  507. ,d3_rovn, d3_exp
  508. ,channel, merge_cate1, total_time
  509. ,merge_cate2, vid_source, is_fes, attribute_province
  510. FROM (
  511. SELECT dt,apptype,page_type,page,vid,vid_title,exp_rank,bn_rovn_rank,seq_rank,score_rank
  512. ,exp_cnt,share_cnt,return_cnt
  513. ,a_str,bn_ros,bn_rov,a_strx,bn_rosx,bn_rovx
  514. ,a_strx_pred,bn_rosx_pred,bn_rovx_pred
  515. ,a_strx_copc,bn_rosx_copc,bn_rovx_copc
  516. ,avg_sortScore,avg_rovScore,top_pushFrom
  517. ,avg_seq_position
  518. ,avg_scoreRos,avg_scoreStr,avg_pushfromrank
  519. ,b1_exp_168h,b1_rovn_1h,b1_rovn_24h,b1_rovn_168h,b1_str_168h
  520. ,b1_rovn_72h,b1_str_24h,b1_str_one_1h,b1_share_cnt_168h
  521. ,b2_rovn_168h,b2_exp_168h
  522. ,b2_rovn_1h,b2_rovn_24h,b2_str_168h,b2_new_exp_168h
  523. ,b3_rovn_168h,b3_exp_168h
  524. ,b12_rovn_30d,b12_exp_30d
  525. ,b12_rovn_7d,b12_rovn_60d,b12_str_30d,b12_exp_60d
  526. ,avg_c1_rovn_168h,avg_c1_exp_168h
  527. ,avg_c1_str_168h,avg_c1_rovn_24h,avg_c1_click_168h
  528. ,b8_rovn_168h
  529. ,b8_exp_168h
  530. ,b9_rovn_168h,b9_exp_168h
  531. ,b10_rovn_168h,b10_exp_168h
  532. ,d3_rovn,d3_exp
  533. ,channel,merge_cate1,total_time
  534. ,merge_cate2,vid_source,is_fes,attribute_province
  535. FROM t_top20
  536. UNION ALL
  537. SELECT * FROM t_other_summary
  538. UNION ALL
  539. SELECT * FROM t_all_summary
  540. ) t
  541. ORDER BY dt DESC, apptype, page_type, page, exp_cnt DESC;