loghubods.dwd_recsys_alg_exposure_base_20260206.sql 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014
  1. --@exclude_input=loghubods.video_action_log_flow_new
  2. --@exclude_input=loghubods.user_share_log_flow
  3. --*********************
  4. -- alg_recsys_rank_labelmatch_20260206
  5. -- 在 20250108 基础上新增 B/C 多跳回流列
  6. --*********************
  7. -- drop table if exists loghubods.dwd_recsys_alg_exposure_base_20260206;
  8. CREATE TABLE IF NOT EXISTS loghubods.dwd_recsys_alg_exposure_base_20260206
  9. (
  10. apptype STRING
  11. ,uid STRING
  12. ,mid STRING
  13. ,vid STRING
  14. ,sessionid STRING
  15. ,subsessionid STRING
  16. ,pagesource STRING
  17. ,page STRING
  18. ,recommendlogvo STRING COMMENT '推荐算法的返回结果日志存在这个字段中'
  19. ,abcode STRING COMMENT '推荐算法的ab分组:ab0'
  20. ,recommendpagetype STRING COMMENT '用于区分pagesource相同时某些场景的。三种回流头部;两种下滑-沉浸页下滑和feed下滑。 -pages/user-videos-share-recommend-detail 是沉浸页。'
  21. ,recomtraceid STRING COMMENT '在后端调取推荐服务之前生成。前端降级会空;后端也可能为空。'
  22. ,headvideoid STRING
  23. ,rootsourceid STRING COMMENT '区分touliu等流量,咨询产品。'
  24. ,hotsencetype STRING
  25. ,flowpool STRING COMMENT '非流量池,是空字符串。没有null值。'
  26. ,level STRING COMMENT '非流量池,是null。'
  27. ,clientip STRING
  28. ,machineinfo_brand STRING
  29. ,machineinfo_model STRING
  30. ,machineinfo_system STRING
  31. ,machineinfo_wechatversion STRING
  32. ,machineinfo_sdkversion STRING
  33. ,province STRING
  34. ,city STRING
  35. ,ts STRING
  36. ,is_share STRING
  37. ,share_cnt STRING
  38. ,is_return_1 STRING
  39. ,return_1_pv STRING
  40. ,return_1_uv STRING
  41. ,return_1_mids STRING
  42. ,is_return_n STRING
  43. ,return_n_pv STRING
  44. ,return_n_uv STRING
  45. ,return_n_mids STRING
  46. ,is_return_noself STRING
  47. ,return_1_uv_noself STRING
  48. ,return_1_mids_noself STRING
  49. ,is_return_n_noself STRING
  50. ,return_n_uv_noself STRING
  51. ,return_n_mids_noself STRING
  52. ,new_exposure_cnt STRING
  53. ,b STRING COMMENT '直接回流去重人数(B)'
  54. ,c_1 STRING COMMENT '1跳回流SUM(B)'
  55. ,c_2 STRING COMMENT '2跳回流SUM(B)'
  56. ,c_3 STRING COMMENT '3跳回流SUM(B)'
  57. ,d_1 STRING COMMENT 'D链1跳: 同subsession后续曝光的B之和'
  58. ,d_2 STRING COMMENT 'D链2跳: d1回流用户session内曝光的B之和'
  59. ,d_3 STRING COMMENT 'D链3跳: d2回流用户session内曝光的B之和(去环)'
  60. ,b_mids STRING COMMENT 'B对应的回流mid列表'
  61. ,c_1_mids STRING COMMENT 'C_1对应的回流mid列表'
  62. ,c_2_mids STRING COMMENT 'C_2对应的回流mid列表'
  63. ,c_3_mids STRING COMMENT 'C_3对应的回流mid列表'
  64. ,d_1_mids STRING COMMENT 'D链1跳对应的回流mid列表'
  65. ,d_2_mids STRING COMMENT 'D链2跳对应的回流mid列表'
  66. ,d_3_mids STRING COMMENT 'D链3跳对应的回流mid列表'
  67. ,extend STRING
  68. )
  69. PARTITIONED BY
  70. (
  71. dt STRING COMMENT '日期:20240105'
  72. ,hh STRING COMMENT '小时:04'
  73. )
  74. STORED AS ALIORC
  75. TBLPROPERTIES ('comment' = '推荐算法-labelmatch表-20260206更新-含多跳B/C/D')
  76. LIFECYCLE 3650
  77. ;
  78. SET hive.exec.dynamic.partition = true
  79. ;
  80. SET hive.exec.dynamic.partition.mode = nonstrict
  81. ;
  82. SET odps.stage.mapper.split.size = 1024
  83. ;
  84. INSERT OVERWRITE TABLE loghubods.dwd_recsys_alg_exposure_base_20260206 PARTITION (dt,hh)
  85. WITH t_return AS
  86. (
  87. SELECT *
  88. ,CONCAT(dthh,":",shareid,":",vid,":",dthh_id) AS id
  89. FROM (
  90. SELECT CONCAT(year,month,day,hour) AS dthh
  91. ,apptype
  92. ,machinecode AS mid
  93. ,clickobjectid AS vid
  94. ,sessionid
  95. ,subsessionid -- 注意这是回流对应的subsessionid,每次回流点击会重置,可以通过这个字段找到回流的曝光。
  96. ,shareid
  97. ,rootshareid
  98. ,CAST(clienttimestamp / 1000 AS BIGINT) AS ts
  99. ,ROW_NUMBER() OVER (PARTITION BY CONCAT(year,month,day,hour),apptype,machinecode,clickobjectid,sessionid,subsessionid,shareid,rootshareid ORDER BY clienttimestamp DESC ) AS rn
  100. ,ROW_NUMBER() OVER (PARTITION BY CONCAT(year,month,day,hour),shareid,clickobjectid ORDER BY clienttimestamp ) AS dthh_id
  101. FROM loghubods.user_share_log_flow -- 回流行为,理应subsessionid只有一条,但有脏数据,去重。
  102. WHERE CONCAT(year,month,day,hour) BETWEEN TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 25),'YYYYMMDDHH') AND TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 1),'YYYYMMDDHH') --WHERE CONCAT(year,month,day,hour) = TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 25),'YYYYMMDDHH')
  103. AND __topic__ = 'click'
  104. AND apptype IS NOT NULL
  105. AND apptype NOT IN ('12') -- 12的pagesoucre是h5-share和h5-detail 暂时过滤掉 不做处理
  106. AND machinecode IS NOT NULL
  107. AND clickobjectid IS NOT NULL
  108. AND pagesource REGEXP "-pages/user-videos-share$" -- 存在脏数据 vlog-gzh /mine/mine-info$ 结尾的,都过滤掉。
  109. )
  110. WHERE rn = 1
  111. )
  112. ,t_share_from_sharelog AS
  113. (
  114. SELECT *
  115. FROM (
  116. SELECT CONCAT(year,month,day,hour) AS dthh
  117. ,apptype
  118. ,machinecode AS mid
  119. ,shareobjectid AS vid
  120. ,sessionid
  121. ,subsessionid
  122. ,pagesource
  123. ,shareid
  124. ,CAST(clienttimestamp / 1000 AS BIGINT) AS ts
  125. ,ROW_NUMBER() OVER (PARTITION BY CONCAT(year,month,day,hour),apptype,machinecode,shareobjectid,sessionid,subsessionid,pagesource,shareid ORDER BY clienttimestamp DESC ) AS rn
  126. FROM loghubods.user_share_log_flow
  127. WHERE CONCAT(year,month,day,hour) BETWEEN TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 25),'YYYYMMDDHH') AND TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 1),'YYYYMMDDHH') --WHERE CONCAT(year,month,day,hour) = TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 25),'YYYYMMDDHH')
  128. AND __topic__ = 'share'
  129. AND apptype IS NOT NULL
  130. AND apptype NOT IN ('12')
  131. AND machinecode IS NOT NULL
  132. AND shareobjectid IS NOT NULL
  133. )
  134. WHERE rn = 1
  135. )
  136. ,t_exposure AS
  137. (
  138. SELECT dthh_id
  139. ,dthh
  140. ,apptype
  141. ,uid
  142. ,mid
  143. ,vid
  144. ,sessionid
  145. ,subsessionid
  146. ,rootsessionid_new
  147. ,pagesource
  148. ,recommendlogvo
  149. ,abcode
  150. ,recommendpagetype
  151. ,recomtraceid
  152. ,headvideoid
  153. ,rootsourceid
  154. ,hotsencetype
  155. ,animationscenetype
  156. ,JSON_PARSE(IF(JSON_VALID(extparams),extparams,"{}")) AS extParams
  157. ,flowpool
  158. ,level
  159. ,clientip
  160. ,machineinfo_brand
  161. ,machineinfo_model
  162. ,machineinfo_system
  163. ,machineinfo_wechatversion
  164. ,machineinfo_sdkversion
  165. ,province
  166. ,city
  167. ,versioncode
  168. ,ts
  169. ,rn
  170. ,id
  171. ,dt
  172. ,hh
  173. FROM loghubods.dwd_recsys_alg_exposure_base_view_20250402
  174. WHERE CONCAT(dt,hh) BETWEEN TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 25),'YYYYMMDDHH') AND TO_CHAR(FROM_UNIXTIME(UNIX_TIMESTAMP(TO_DATE('${dt}${hh}','YYYYMMDDHH')) - 3600 * 1),'YYYYMMDDHH')
  175. )
  176. ,t_exposure_recommend AS
  177. (
  178. SELECT *
  179. FROM t_exposure
  180. WHERE pagesource REGEXP 'category$|recommend$|-pages/user-videos-detail$'
  181. )
  182. ,t_return_exposure_1 AS -- 曝光关联回流,用于计算viewh24
  183. (
  184. SELECT *
  185. FROM (
  186. SELECT t1.id AS exposure_id
  187. ,t1.mid AS mid
  188. ,t1.vid AS vid
  189. ,t1.subsessionid AS subsessionid
  190. ,t1.sessionid AS sessionid
  191. ,t1.headvideoid AS headvideoid
  192. ,t1.dthh
  193. ,t2.id AS return_id
  194. ,ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.ts DESC ) AS rn
  195. FROM t_exposure_recommend t1
  196. LEFT JOIN t_return t2
  197. ON t1.mid = t2.mid
  198. AND t1.headvideoid = t2.vid
  199. AND t1.subsessionid = t2.subsessionid
  200. )
  201. WHERE rn = 1
  202. )
  203. ,t_return_exposure_2 AS -- 曝光关联回流,用于计算viewh24
  204. (
  205. SELECT *
  206. FROM (
  207. SELECT t1.exposure_id AS exposure_id
  208. ,t1.mid AS mid
  209. ,t1.vid AS vid
  210. ,t1.subsessionid AS subsessionid
  211. ,t1.sessionid AS sessionid
  212. ,t1.headvideoid AS headvideoid
  213. ,t1.dthh
  214. ,t2.id AS return_id
  215. ,ROW_NUMBER() OVER (PARTITION BY t1.exposure_id ORDER BY t2.ts DESC ) AS rn
  216. FROM (
  217. SELECT *
  218. FROM t_return_exposure_1
  219. WHERE return_id IS NULL
  220. ) t1
  221. LEFT JOIN t_return t2
  222. ON t1.mid = t2.mid
  223. AND t1.headvideoid = t2.vid
  224. AND t1.sessionid = t2.sessionid
  225. )
  226. WHERE rn = 1
  227. )
  228. ,t_return_exposure_3 AS -- 曝光关联回流,用于计算viewh24
  229. (
  230. SELECT *
  231. FROM (
  232. SELECT t1.exposure_id AS exposure_id
  233. ,t1.mid AS mid
  234. ,t1.vid AS vid
  235. ,t1.subsessionid AS subsessionid
  236. ,t1.sessionid AS sessionid
  237. ,t1.headvideoid AS headvideoid
  238. ,t1.dthh
  239. ,t2.id AS return_id
  240. ,ROW_NUMBER() OVER (PARTITION BY t1.exposure_id ORDER BY t2.ts DESC ) AS rn
  241. FROM (
  242. SELECT *
  243. FROM t_return_exposure_2
  244. WHERE return_id IS NULL
  245. ) t1
  246. LEFT JOIN t_return t2
  247. ON t1.mid = t2.mid
  248. AND t1.subsessionid = t2.subsessionid
  249. )
  250. WHERE rn = 1
  251. )
  252. ,t_return_exposure_4 AS -- 曝光关联回流,用于计算viewh24
  253. (
  254. SELECT *
  255. FROM (
  256. SELECT t1.exposure_id AS exposure_id
  257. ,t1.mid AS mid
  258. ,t1.vid AS vid
  259. ,t1.subsessionid AS subsessionid
  260. ,t1.sessionid AS sessionid
  261. ,t1.headvideoid AS headvideoid
  262. ,t1.dthh
  263. ,t2.id AS return_id
  264. ,ROW_NUMBER() OVER (PARTITION BY t1.exposure_id ORDER BY t2.ts DESC ) AS rn
  265. FROM (
  266. SELECT *
  267. FROM t_return_exposure_3
  268. WHERE return_id IS NULL
  269. ) t1
  270. LEFT JOIN t_return t2
  271. ON t1.mid = t2.mid
  272. AND t1.sessionid = t2.sessionid
  273. )
  274. WHERE rn = 1
  275. )
  276. ,t_return_exposure AS
  277. (
  278. SELECT a.*
  279. ,b.exposure_cnt AS new_exposure_cnt
  280. FROM t_return a
  281. LEFT JOIN (
  282. SELECT return_id
  283. ,COUNT(1) AS exposure_cnt
  284. FROM (
  285. SELECT *
  286. FROM t_return_exposure_1
  287. WHERE return_id IS NOT NULL
  288. UNION ALL
  289. SELECT *
  290. FROM t_return_exposure_2
  291. WHERE return_id IS NOT NULL
  292. UNION ALL
  293. SELECT *
  294. FROM t_return_exposure_3
  295. WHERE return_id IS NOT NULL
  296. UNION ALL
  297. SELECT *
  298. FROM t_return_exposure_4
  299. WHERE return_id IS NOT NULL
  300. )
  301. GROUP BY return_id
  302. ) b
  303. ON a.id = b.return_id
  304. )
  305. ,t_normal_share_exposure_1 AS -- 开始处理常规的分享与曝光关联
  306. (
  307. SELECT *
  308. FROM (
  309. SELECT t1.dthh
  310. ,t1.apptype
  311. ,t1.mid
  312. ,t1.vid
  313. ,t1.sessionid
  314. ,t1.subsessionid
  315. ,t1.pagesource
  316. ,t1.shareid
  317. ,t1.ts
  318. ,t2.id AS exposure_id
  319. ,t2.ts AS exposure_ts
  320. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  321. FROM t_share_from_sharelog t1
  322. LEFT JOIN t_exposure t2
  323. ON t1.apptype = t2.apptype
  324. AND t1.mid = t2.mid
  325. AND t1.vid = t2.vid
  326. AND t1.subsessionid = t2.subsessionid
  327. AND t1.pagesource = t2.pagesource
  328. AND t1.ts >= t2.ts
  329. WHERE t1.pagesource NOT REGEXP "pages/detail-user-videos-share-recommend$"
  330. )
  331. WHERE rn = 1
  332. )
  333. ,t_normal_share_exposure_2 AS
  334. (
  335. SELECT *
  336. FROM (
  337. SELECT t1.dthh
  338. ,t1.apptype
  339. ,t1.mid
  340. ,t1.vid
  341. ,t1.sessionid
  342. ,t1.subsessionid
  343. ,t1.pagesource
  344. ,t1.shareid
  345. ,t1.ts
  346. ,t2.id AS exposure_id
  347. ,t2.ts AS exposure_ts
  348. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  349. FROM (
  350. SELECT *
  351. FROM t_normal_share_exposure_1
  352. WHERE exposure_id IS NULL
  353. ) t1
  354. LEFT JOIN t_exposure t2
  355. ON t1.apptype = t2.apptype
  356. AND t1.mid = t2.mid
  357. AND t1.vid = t2.vid
  358. AND t1.sessionid = t2.sessionid
  359. AND t1.pagesource = t2.pagesource
  360. AND t1.ts >= t2.ts
  361. )
  362. WHERE rn = 1
  363. )
  364. ,t_normal_share_exposure_3 AS
  365. (
  366. SELECT *
  367. FROM (
  368. SELECT t1.dthh
  369. ,t1.apptype
  370. ,t1.mid
  371. ,t1.vid
  372. ,t1.sessionid
  373. ,t1.subsessionid
  374. ,t1.pagesource
  375. ,t1.shareid
  376. ,t1.ts
  377. ,t2.id AS exposure_id
  378. ,t2.ts AS exposure_ts
  379. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  380. FROM (
  381. SELECT *
  382. FROM t_normal_share_exposure_2
  383. WHERE exposure_id IS NULL
  384. ) t1
  385. LEFT JOIN t_exposure t2
  386. ON t1.apptype = t2.apptype
  387. AND t1.mid = t2.mid
  388. AND t1.vid = t2.vid
  389. AND t1.subsessionid = t2.subsessionid
  390. AND t1.pagesource = t2.pagesource
  391. )
  392. WHERE rn = 1
  393. )
  394. ,t_normal_share_exposure_4 AS
  395. (
  396. SELECT *
  397. FROM (
  398. SELECT t1.dthh
  399. ,t1.apptype
  400. ,t1.mid
  401. ,t1.vid
  402. ,t1.sessionid
  403. ,t1.subsessionid
  404. ,t1.pagesource
  405. ,t1.shareid
  406. ,t1.ts
  407. ,t2.id AS exposure_id
  408. ,t2.ts AS exposure_ts
  409. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  410. FROM (
  411. SELECT *
  412. FROM t_normal_share_exposure_3
  413. WHERE exposure_id IS NULL
  414. ) t1
  415. LEFT JOIN t_exposure t2
  416. ON t1.apptype = t2.apptype
  417. AND t1.mid = t2.mid
  418. AND t1.vid = t2.vid
  419. AND t1.sessionid = t2.sessionid
  420. AND t1.pagesource = t2.pagesource
  421. )
  422. WHERE rn = 1
  423. )
  424. ,t_normal_share_exposure_5 AS
  425. (
  426. SELECT *
  427. FROM (
  428. SELECT t1.dthh
  429. ,t1.apptype
  430. ,t1.mid
  431. ,t1.vid
  432. ,t1.sessionid
  433. ,t1.subsessionid
  434. ,t1.pagesource
  435. ,t1.shareid
  436. ,t1.ts
  437. ,t2.id AS exposure_id
  438. ,t2.ts AS exposure_ts
  439. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  440. FROM (
  441. SELECT *
  442. FROM t_normal_share_exposure_4
  443. WHERE exposure_id IS NULL
  444. ) t1
  445. LEFT JOIN t_exposure t2
  446. ON t1.apptype = t2.apptype
  447. AND t1.mid = t2.mid
  448. AND t1.vid = t2.vid
  449. AND t1.subsessionid = t2.subsessionid
  450. )
  451. WHERE rn = 1
  452. )
  453. ,t_normal_share_exposure_6 AS
  454. (
  455. SELECT *
  456. FROM (
  457. SELECT t1.dthh
  458. ,t1.apptype
  459. ,t1.mid
  460. ,t1.vid
  461. ,t1.sessionid
  462. ,t1.subsessionid
  463. ,t1.pagesource
  464. ,t1.shareid
  465. ,t1.ts
  466. ,t2.id AS exposure_id
  467. ,t2.ts AS exposure_ts
  468. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  469. FROM (
  470. SELECT *
  471. FROM t_normal_share_exposure_5
  472. WHERE exposure_id IS NULL
  473. ) t1
  474. LEFT JOIN t_exposure t2
  475. ON t1.apptype = t2.apptype
  476. AND t1.mid = t2.mid
  477. AND t1.vid = t2.vid
  478. AND t1.sessionid = t2.sessionid
  479. )
  480. WHERE rn = 1
  481. )
  482. ,t_exposure_detail AS
  483. (
  484. SELECT *
  485. FROM t_exposure
  486. WHERE pagesource REGEXP "-pages/user-videos-detail$|pages/detail-recommend$"
  487. )
  488. ,t_no_normal_share_exposure_1 AS -- 开始处理非常规的分享与曝光关联
  489. (
  490. SELECT *
  491. FROM (
  492. SELECT t1.dthh
  493. ,t1.apptype
  494. ,t1.mid
  495. ,t1.vid
  496. ,t1.sessionid
  497. ,t1.subsessionid
  498. ,t1.pagesource
  499. ,t1.shareid
  500. ,t1.ts
  501. ,t2.id AS exposure_id
  502. ,t2.ts AS exposure_ts
  503. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  504. FROM t_share_from_sharelog t1
  505. LEFT JOIN t_exposure_detail t2
  506. ON t1.apptype = t2.apptype
  507. AND t1.mid = t2.mid
  508. AND t1.vid = t2.vid
  509. AND t1.subsessionid = t2.subsessionid
  510. AND t1.ts >= t2.ts
  511. WHERE t1.pagesource REGEXP "pages/detail-user-videos-share-recommend$"
  512. )
  513. WHERE rn = 1
  514. )
  515. ,t_no_normal_share_exposure_2 AS
  516. (
  517. SELECT *
  518. FROM (
  519. SELECT t1.dthh
  520. ,t1.apptype
  521. ,t1.mid
  522. ,t1.vid
  523. ,t1.sessionid
  524. ,t1.subsessionid
  525. ,t1.pagesource
  526. ,t1.shareid
  527. ,t1.ts
  528. ,t2.id AS exposure_id
  529. ,t2.ts AS exposure_ts
  530. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  531. FROM (
  532. SELECT *
  533. FROM t_no_normal_share_exposure_1
  534. WHERE exposure_id IS NULL
  535. ) t1
  536. LEFT JOIN t_exposure_detail t2
  537. ON t1.apptype = t2.apptype
  538. AND t1.mid = t2.mid
  539. AND t1.vid = t2.vid
  540. AND t1.sessionid = t2.sessionid
  541. AND t1.ts >= t2.ts
  542. )
  543. WHERE rn = 1
  544. )
  545. ,t_no_normal_share_exposure_3 AS
  546. (
  547. SELECT *
  548. FROM (
  549. SELECT t1.dthh
  550. ,t1.apptype
  551. ,t1.mid
  552. ,t1.vid
  553. ,t1.sessionid
  554. ,t1.subsessionid
  555. ,t1.pagesource
  556. ,t1.shareid
  557. ,t1.ts
  558. ,t2.id AS exposure_id
  559. ,t2.ts AS exposure_ts
  560. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  561. FROM (
  562. SELECT *
  563. FROM t_no_normal_share_exposure_2
  564. WHERE exposure_id IS NULL
  565. ) t1
  566. LEFT JOIN t_exposure_detail t2
  567. ON t1.apptype = t2.apptype
  568. AND t1.mid = t2.mid
  569. AND t1.vid = t2.vid
  570. AND t1.subsessionid = t2.subsessionid
  571. )
  572. WHERE rn = 1
  573. )
  574. ,t_no_normal_share_exposure_4 AS
  575. (
  576. SELECT *
  577. FROM (
  578. SELECT t1.dthh
  579. ,t1.apptype
  580. ,t1.mid
  581. ,t1.vid
  582. ,t1.sessionid
  583. ,t1.subsessionid
  584. ,t1.pagesource
  585. ,t1.shareid
  586. ,t1.ts
  587. ,t2.id AS exposure_id
  588. ,t2.ts AS exposure_ts
  589. ,ROW_NUMBER() OVER (PARTITION BY t1.dthh,t1.apptype,t1.mid,t1.vid,t1.sessionid,t1.subsessionid,t1.pagesource,t1.shareid ORDER BY t2.ts DESC ) AS rn
  590. FROM (
  591. SELECT *
  592. FROM t_no_normal_share_exposure_3
  593. WHERE exposure_id IS NULL
  594. ) t1
  595. LEFT JOIN t_exposure_detail t2
  596. ON t1.apptype = t2.apptype
  597. AND t1.mid = t2.mid
  598. AND t1.vid = t2.vid
  599. AND t1.sessionid = t2.sessionid
  600. )
  601. WHERE rn = 1
  602. )
  603. ,t_share_exposure AS
  604. (
  605. SELECT *
  606. FROM t_normal_share_exposure_1
  607. WHERE exposure_id IS NOT NULL
  608. UNION ALL
  609. SELECT *
  610. FROM t_normal_share_exposure_2
  611. WHERE exposure_id IS NOT NULL
  612. UNION ALL
  613. SELECT *
  614. FROM t_normal_share_exposure_3
  615. WHERE exposure_id IS NOT NULL
  616. UNION ALL
  617. SELECT *
  618. FROM t_normal_share_exposure_4
  619. WHERE exposure_id IS NOT NULL
  620. UNION ALL
  621. SELECT *
  622. FROM t_normal_share_exposure_5
  623. WHERE exposure_id IS NOT NULL
  624. UNION ALL
  625. SELECT *
  626. FROM t_normal_share_exposure_6
  627. UNION ALL
  628. SELECT *
  629. FROM t_no_normal_share_exposure_1
  630. WHERE exposure_id IS NOT NULL
  631. UNION ALL
  632. SELECT *
  633. FROM t_no_normal_share_exposure_2
  634. WHERE exposure_id IS NOT NULL
  635. UNION ALL
  636. SELECT *
  637. FROM t_no_normal_share_exposure_3
  638. WHERE exposure_id IS NOT NULL
  639. UNION ALL
  640. SELECT *
  641. FROM t_no_normal_share_exposure_4
  642. )
  643. --========================================
  644. -- 多跳 B/C 计算 (BFS frontier + anti-join 去环, 仅 24h)
  645. --========================================
  646. ,t_share_return AS (
  647. SELECT se.exposure_id
  648. ,se.shareid
  649. ,se.vid
  650. ,se.apptype
  651. ,se.subsessionid
  652. ,r.subsessionid AS return_subsessionid
  653. ,r.mid AS return_mid
  654. FROM t_share_exposure se
  655. JOIN t_return r
  656. ON se.shareid = r.rootshareid
  657. AND se.vid = r.vid
  658. AND se.apptype = r.apptype
  659. )
  660. ,t_exposure_bn AS (
  661. SELECT exposure_id
  662. ,COUNT(DISTINCT return_mid) AS B
  663. ,COLLECT_SET(return_mid) AS B_mids
  664. FROM t_share_return
  665. GROUP BY exposure_id
  666. )
  667. -- BFS frontier 1: 直达回流的 subsessionid 集合
  668. ,t_frontier_1 AS (
  669. SELECT DISTINCT exposure_id AS source_id, return_subsessionid AS reached_sub
  670. FROM t_share_return
  671. )
  672. -- C_1: frontier_1 中曝光的 B 之和
  673. ,t_c1 AS (
  674. SELECT f.source_id AS exposure_id, SUM(bn.B) AS C_1
  675. FROM t_frontier_1 f
  676. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  677. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  678. GROUP BY f.source_id
  679. )
  680. ,t_c1_mids AS (
  681. SELECT f.source_id AS exposure_id
  682. ,COLLECT_SET(sr.return_mid) AS C_1_mids
  683. FROM t_frontier_1 f
  684. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  685. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  686. JOIN t_share_return sr ON bn.exposure_id = sr.exposure_id
  687. GROUP BY f.source_id
  688. )
  689. -- BFS frontier 2: frontier_1 延伸, anti-join 排除 frontier_1
  690. ,t_frontier_2 AS (
  691. SELECT DISTINCT f1.source_id, sr2.return_subsessionid AS reached_sub
  692. FROM t_frontier_1 f1
  693. JOIN t_exposure e1 ON f1.reached_sub = e1.subsessionid
  694. JOIN t_exposure_bn bn1 ON e1.id = bn1.exposure_id
  695. JOIN t_share_return sr2 ON bn1.exposure_id = sr2.exposure_id
  696. LEFT JOIN t_frontier_1 v1
  697. ON f1.source_id = v1.source_id
  698. AND sr2.return_subsessionid = v1.reached_sub
  699. WHERE v1.source_id IS NULL
  700. )
  701. ,t_c2 AS (
  702. SELECT f.source_id AS exposure_id, SUM(bn.B) AS C_2
  703. FROM t_frontier_2 f
  704. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  705. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  706. GROUP BY f.source_id
  707. )
  708. ,t_c2_mids AS (
  709. SELECT f.source_id AS exposure_id
  710. ,COLLECT_SET(sr.return_mid) AS C_2_mids
  711. FROM t_frontier_2 f
  712. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  713. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  714. JOIN t_share_return sr ON bn.exposure_id = sr.exposure_id
  715. GROUP BY f.source_id
  716. )
  717. -- BFS frontier 3: frontier_2 延伸, anti-join 排除 frontier_1 + frontier_2
  718. ,t_frontier_3 AS (
  719. SELECT DISTINCT f2.source_id, sr3.return_subsessionid AS reached_sub
  720. FROM t_frontier_2 f2
  721. JOIN t_exposure e2 ON f2.reached_sub = e2.subsessionid
  722. JOIN t_exposure_bn bn2 ON e2.id = bn2.exposure_id
  723. JOIN t_share_return sr3 ON bn2.exposure_id = sr3.exposure_id
  724. LEFT JOIN t_frontier_1 v1
  725. ON f2.source_id = v1.source_id
  726. AND sr3.return_subsessionid = v1.reached_sub
  727. LEFT JOIN t_frontier_2 v2
  728. ON f2.source_id = v2.source_id
  729. AND sr3.return_subsessionid = v2.reached_sub
  730. WHERE v1.source_id IS NULL AND v2.source_id IS NULL
  731. )
  732. ,t_c3 AS (
  733. SELECT f.source_id AS exposure_id, SUM(bn.B) AS C_3
  734. FROM t_frontier_3 f
  735. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  736. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  737. GROUP BY f.source_id
  738. )
  739. ,t_c3_mids AS (
  740. SELECT f.source_id AS exposure_id
  741. ,COLLECT_SET(sr.return_mid) AS C_3_mids
  742. FROM t_frontier_3 f
  743. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  744. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  745. JOIN t_share_return sr ON bn.exposure_id = sr.exposure_id
  746. GROUP BY f.source_id
  747. )
  748. --========================================
  749. -- D 链: session 内后续曝光传播 (BFS 去环)
  750. --========================================
  751. ,t_d1 AS (
  752. SELECT e1.id AS exposure_id
  753. ,SUM(bn2.B) AS D_1
  754. FROM t_exposure e1
  755. JOIN t_exposure e2
  756. ON e1.subsessionid = e2.subsessionid
  757. AND CAST(e2.ts AS BIGINT) > CAST(e1.ts AS BIGINT)
  758. JOIN t_exposure_bn bn2
  759. ON e2.id = bn2.exposure_id
  760. GROUP BY e1.id
  761. )
  762. ,t_d1_mids AS (
  763. SELECT e1.id AS exposure_id
  764. ,COLLECT_SET(sr.return_mid) AS D_1_mids
  765. FROM t_exposure e1
  766. JOIN t_exposure e2
  767. ON e1.subsessionid = e2.subsessionid
  768. AND CAST(e2.ts AS BIGINT) > CAST(e1.ts AS BIGINT)
  769. JOIN t_share_return sr
  770. ON e2.id = sr.exposure_id
  771. GROUP BY e1.id
  772. )
  773. ,t_d1_frontier AS (
  774. SELECT DISTINCT e1.id AS source_id
  775. ,sr.return_subsessionid AS reached_sub
  776. FROM t_exposure e1
  777. JOIN t_exposure e2
  778. ON e1.subsessionid = e2.subsessionid
  779. AND CAST(e2.ts AS BIGINT) > CAST(e1.ts AS BIGINT)
  780. JOIN t_share_return sr
  781. ON e2.id = sr.exposure_id
  782. )
  783. ,t_d2 AS (
  784. SELECT f.source_id AS exposure_id, SUM(bn.B) AS D_2
  785. FROM t_d1_frontier f
  786. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  787. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  788. GROUP BY f.source_id
  789. )
  790. ,t_d2_mids AS (
  791. SELECT f.source_id AS exposure_id
  792. ,COLLECT_SET(sr.return_mid) AS D_2_mids
  793. FROM t_d1_frontier f
  794. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  795. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  796. JOIN t_share_return sr ON bn.exposure_id = sr.exposure_id
  797. GROUP BY f.source_id
  798. )
  799. ,t_d2_frontier AS (
  800. SELECT DISTINCT f1.source_id, sr2.return_subsessionid AS reached_sub
  801. FROM t_d1_frontier f1
  802. JOIN t_exposure e1 ON f1.reached_sub = e1.subsessionid
  803. JOIN t_exposure_bn bn1 ON e1.id = bn1.exposure_id
  804. JOIN t_share_return sr2 ON bn1.exposure_id = sr2.exposure_id
  805. LEFT JOIN t_d1_frontier v1
  806. ON f1.source_id = v1.source_id
  807. AND sr2.return_subsessionid = v1.reached_sub
  808. WHERE v1.source_id IS NULL
  809. )
  810. ,t_d3 AS (
  811. SELECT f.source_id AS exposure_id, SUM(bn.B) AS D_3
  812. FROM t_d2_frontier f
  813. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  814. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  815. GROUP BY f.source_id
  816. )
  817. ,t_d3_mids AS (
  818. SELECT f.source_id AS exposure_id
  819. ,COLLECT_SET(sr.return_mid) AS D_3_mids
  820. FROM t_d2_frontier f
  821. JOIN t_exposure e ON f.reached_sub = e.subsessionid
  822. JOIN t_exposure_bn bn ON e.id = bn.exposure_id
  823. JOIN t_share_return sr ON bn.exposure_id = sr.exposure_id
  824. GROUP BY f.source_id
  825. )
  826. --========================================
  827. -- 以下为原有 CTE 继续
  828. --========================================
  829. ,t_share_with_label AS
  830. (
  831. SELECT a.dthh
  832. ,a.apptype -- join 条件
  833. ,a.mid
  834. ,a.vid -- join 条件
  835. ,a.sessionid
  836. ,a.subsessionid
  837. ,a.pagesource
  838. ,a.shareid -- join 条件
  839. ,a.ts
  840. ,a.exposure_id
  841. ,COALESCE(b.return_1_pv,0) AS return_1_pv
  842. ,COALESCE(b.return_1_uv,0) AS return_1_uv
  843. ,b.return_1_mids AS return_1_mids -- 可能为null,再决策是否提前处理。
  844. ,COALESCE(c.return_n_pv,0) AS return_n_pv
  845. ,COALESCE(c.return_n_uv,0) AS return_n_uv
  846. ,c.return_n_mids AS return_n_mids -- 可能为null,再决策是否提前处理。
  847. ,COALESCE(c.new_exposure_cnt,0) AS new_exposure_cnt
  848. FROM t_share_exposure a
  849. LEFT JOIN (
  850. SELECT shareid
  851. ,vid
  852. ,apptype
  853. ,COUNT(1) AS return_1_pv
  854. ,COUNT(DISTINCT mid) AS return_1_uv
  855. ,CONCAT_WS(',',COLLECT_SET(mid)) AS return_1_mids
  856. FROM t_return
  857. GROUP BY shareid
  858. ,vid
  859. ,apptype
  860. ) b
  861. ON a.shareid = b.shareid
  862. AND a.vid = b.vid
  863. AND a.apptype = b.apptype
  864. LEFT JOIN (
  865. SELECT rootshareid
  866. ,vid
  867. ,apptype
  868. ,COUNT(1) AS return_n_pv
  869. ,COUNT(DISTINCT mid) AS return_n_uv
  870. ,CONCAT_WS(',',COLLECT_SET(mid)) AS return_n_mids
  871. ,SUM(new_exposure_cnt) AS new_exposure_cnt
  872. FROM t_return_exposure
  873. GROUP BY rootshareid
  874. ,vid
  875. ,apptype
  876. ) c
  877. ON a.shareid = c.rootshareid
  878. AND a.vid = c.vid
  879. AND a.apptype = c.apptype
  880. )
  881. ,t_share_with_label_group AS
  882. (
  883. SELECT exposure_id
  884. ,COUNT(1) AS share_cnt
  885. ,SUM(return_1_pv) AS return_1_pv
  886. ,COALESCE(SIZE(SPLIT(DEDUPLICATION4LIST(CONCAT_WS(',',COLLECT_LIST(return_1_mids))),",")),0) AS return_1_uv
  887. ,DEDUPLICATION4LIST(CONCAT_WS(',',COLLECT_LIST(return_1_mids))) AS return_1_mids -- 可能是null
  888. ,SUM(return_n_pv) AS return_n_pv
  889. ,COALESCE(SIZE(SPLIT(DEDUPLICATION4LIST(CONCAT_WS(',',COLLECT_LIST(return_n_mids))),",")),0) AS return_n_uv
  890. ,DEDUPLICATION4LIST(CONCAT_WS(',',COLLECT_LIST(return_n_mids))) AS return_n_mids -- 可能是null
  891. ,SUM(new_exposure_cnt) AS new_exposure_cnt
  892. FROM t_share_with_label
  893. GROUP BY exposure_id
  894. )
  895. ,t_root_source_id_group_name AS
  896. (
  897. SELECT *
  898. FROM (
  899. SELECT root_source_id
  900. ,group_name
  901. ,ROW_NUMBER() OVER (PARTITION BY root_source_id ) AS rn
  902. FROM loghubods.changwen_rootsourceid_group_hour
  903. WHERE dt = MAX_PT('loghubods.changwen_rootsourceid_group_hour')
  904. )
  905. WHERE rn = 1
  906. )
  907. ,t_exposure_share_return AS
  908. (
  909. SELECT apptype
  910. ,uid
  911. ,mid
  912. ,vid
  913. ,sessionid
  914. ,subsessionid
  915. ,pagesource
  916. ,CASE WHEN pagesource REGEXP 'pages/user-videos-share-recommend$' THEN '回流后沉浸页&内页feed'
  917. WHEN pagesource REGEXP 'pages/detail-recommend$' THEN '详情后沉浸页'
  918. WHEN pagesource REGEXP 'pages/user-videos-share$' THEN '回流页'
  919. WHEN pagesource REGEXP 'pages/user-videos-detail$' THEN '详情页'
  920. WHEN pagesource REGEXP 'pages/category$' THEN '首页feed'
  921. ELSE '其他'
  922. END AS pagesource_new
  923. ,recommendlogvo -- 推荐算法的返回结果日志存在这个字段中
  924. ,abcode -- 推荐算法的ab分组
  925. ,recommendpagetype -- 三种回流头部;两种下滑-沉浸页下滑和feed下滑
  926. ,recomtraceid
  927. ,headvideoid
  928. ,rootsourceid
  929. ,hotsencetype
  930. ,flowpool -- 14#68#3#1735262438476#2
  931. ,level
  932. ,clientip
  933. ,machineinfo_brand
  934. ,machineinfo_model
  935. ,machineinfo_system
  936. ,machineinfo_wechatversion
  937. ,machineinfo_sdkversion
  938. ,province
  939. ,city
  940. ,ts
  941. ,IF(COALESCE(share_cnt,0) > 0,1,0) AS is_share
  942. ,COALESCE(share_cnt,0) AS share_cnt
  943. ,IF(COALESCE(return_1_uv,0) > 0,1,0) AS is_return_1
  944. ,COALESCE(return_1_pv,0) AS return_1_pv
  945. ,COALESCE(return_1_uv,0) AS return_1_uv
  946. ,return_1_mids -- 可能是null
  947. ,IF(COALESCE(return_n_pv,0) > 0,1,0) AS is_return_n
  948. ,COALESCE(return_n_pv,0) AS return_n_pv
  949. ,COALESCE(return_n_uv,0) AS return_n_uv
  950. ,return_n_mids -- 可能是null
  951. ,IF(COALESCE(COALESCE(SIZE(ARRAY_REMOVE(SPLIT(return_1_mids,","),mid)),0),0) > 0,1,0) AS is_return_noself
  952. ,COALESCE(SIZE(ARRAY_REMOVE(SPLIT(return_1_mids,","),mid)),0) AS return_1_uv_noself
  953. ,ARRAY_JOIN(ARRAY_REMOVE(SPLIT(return_1_mids,","),mid),",") AS return_1_mids_noself
  954. ,IF(COALESCE(COALESCE(SIZE(ARRAY_REMOVE(SPLIT(return_n_mids,","),mid)),0),0) > 0,1,0) AS is_return_n_noself
  955. ,COALESCE(SIZE(ARRAY_REMOVE(SPLIT(return_n_mids,","),mid)),0) AS return_n_uv_noself
  956. ,ARRAY_JOIN(ARRAY_REMOVE(SPLIT(return_n_mids,","),mid),",") AS return_n_mids_noself
  957. ,COALESCE(new_exposure_cnt) AS new_exposure_cnt
  958. ,COALESCE(bn_hop.B, 0) AS b
  959. ,COALESCE(c1_hop.C_1, 0) AS c_1
  960. ,COALESCE(c2_hop.C_2, 0) AS c_2
  961. ,COALESCE(c3_hop.C_3, 0) AS c_3
  962. ,COALESCE(d1_hop.D_1, 0) AS d_1
  963. ,COALESCE(d2_hop.D_2, 0) AS d_2
  964. ,COALESCE(d3_hop.D_3, 0) AS d_3
  965. ,CONCAT_WS(',', bn_hop.B_mids) AS b_mids
  966. ,CONCAT_WS(',', c1m_hop.C_1_mids) AS c_1_mids
  967. ,CONCAT_WS(',', c2m_hop.C_2_mids) AS c_2_mids
  968. ,CONCAT_WS(',', c3m_hop.C_3_mids) AS c_3_mids
  969. ,CONCAT_WS(',', d1m_hop.D_1_mids) AS d_1_mids
  970. ,CONCAT_WS(',', d2m_hop.D_2_mids) AS d_2_mids
  971. ,CONCAT_WS(',', d3m_hop.D_3_mids) AS d_3_mids
  972. ,JSON_FORMAT(
  973. JSON_OBJECT("animationSceneType",animationSceneType,"extParams",extParams,"rootsessionid",rootsessionid_new,"versioncode",versioncode,"group_name",tc.group_name)
  974. ) AS extend
  975. ,SUBSTR(dthh,1,8) AS dt
  976. ,SUBSTR(dthh,9,2) AS hh
  977. FROM t_exposure ta
  978. LEFT JOIN t_share_with_label_group tb
  979. ON ta.id = tb.exposure_id
  980. LEFT JOIN t_root_source_id_group_name tc
  981. ON ta.rootsourceid = tc.root_source_id
  982. LEFT JOIN t_exposure_bn bn_hop
  983. ON ta.id = bn_hop.exposure_id
  984. LEFT JOIN t_c1 c1_hop
  985. ON ta.id = c1_hop.exposure_id
  986. LEFT JOIN t_c1_mids c1m_hop
  987. ON ta.id = c1m_hop.exposure_id
  988. LEFT JOIN t_c2 c2_hop
  989. ON ta.id = c2_hop.exposure_id
  990. LEFT JOIN t_c2_mids c2m_hop
  991. ON ta.id = c2m_hop.exposure_id
  992. LEFT JOIN t_c3 c3_hop
  993. ON ta.id = c3_hop.exposure_id
  994. LEFT JOIN t_c3_mids c3m_hop
  995. ON ta.id = c3m_hop.exposure_id
  996. LEFT JOIN t_d1 d1_hop
  997. ON ta.id = d1_hop.exposure_id
  998. LEFT JOIN t_d1_mids d1m_hop
  999. ON ta.id = d1m_hop.exposure_id
  1000. LEFT JOIN t_d2 d2_hop
  1001. ON ta.id = d2_hop.exposure_id
  1002. LEFT JOIN t_d2_mids d2m_hop
  1003. ON ta.id = d2m_hop.exposure_id
  1004. LEFT JOIN t_d3 d3_hop
  1005. ON ta.id = d3_hop.exposure_id
  1006. LEFT JOIN t_d3_mids d3m_hop
  1007. ON ta.id = d3m_hop.exposure_id
  1008. )SELECT *
  1009. FROM t_exposure_share_return
  1010. ;