Advertisement
YuvalGai

Untitled

Mar 5th, 2024
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.21 KB | None | 0 0
  1. t_albums_general = {
  2. '01_truncate_transformation_table': '''
  3. truncate CANDIVORE.TRANSFORMATION.TRANS_ALBUMS_GENERAL
  4. ''',
  5. '02_set_last_update_variable': '''
  6. set T_ALBUMS_GENERAL_UPDATED_DT_MNG = (
  7. SELECT
  8. date(
  9. NVL(max(LAST_LOAD_DATE), to_timestamp('2023-06-01'))
  10. ) as LAST_UPDATED_DT_MNG
  11. FROM
  12. candivore.manage.management_table
  13. WHERE
  14. 1 = 1
  15. AND table_name = 'CANDIVORE.SEMANTIC_LAYER.T_ALBUMS_GENERAL'
  16. ORDER BY
  17. ID DESC
  18. LIMIT
  19. 1
  20. );
  21. ''',
  22. '03_insert_delta_into_trans_table': '''
  23. INSERT INTO CANDIVORE.TRANSFORMATION.TRANS_ALBUMS_GENERAL(
  24. DATE,
  25. ARENA,
  26. payers_segment,
  27. DUPLICATE_ADVENTURE,
  28. UNIQUE_ADVENTURE,
  29. DUPLICATE_SEASONAL,
  30. UNIQUE_SEASONAL,
  31. DUPLICATE_DIAMOND,
  32. UNIQUE_DIAMOND,
  33. DUPLICATE_GOLD,
  34. UNIQUE_GOLD,
  35. DUPLICATE_SILVER,
  36. UNIQUE_SILVER,
  37. DUPLICATE_WHITE,
  38. UNIQUE_WHITE,
  39. OPEN_ALBUMS,
  40. COMPLETE_ALBUMS,
  41. PAGES_COMPLETED_TODAY,
  42. ALBUMS_COMPLETED_TODAY,
  43. ALBUMS_RESETED_TODAY,
  44. ALBUMS_OPENED_TODAY,
  45. LAST_UPDATED_DT,
  46. DW_INSERT_DT
  47. )
  48.  
  49. select
  50. transactions.DAY_DATE as DATE,
  51. transactions.ARENA,
  52. transactions.payers_segment,
  53. transactions.DUPLICATE_ADVENTURE,
  54. transactions.UNIQUE_ADVENTURE,
  55. transactions.DUPLICATE_SEASONAL,
  56. transactions.UNIQUE_SEASONAL,
  57. transactions.DUPLICATE_DIAMOND,
  58. transactions.UNIQUE_DIAMOND,
  59. transactions.DUPLICATE_GOLD,
  60. transactions.UNIQUE_GOLD,
  61. transactions.DUPLICATE_SILVER,
  62. transactions.UNIQUE_SILVER,
  63. transactions.DUPLICATE_WHITE,
  64. transactions.UNIQUE_WHITE,
  65. transactions.OPEN_ALBUMS,
  66. transactions.COMPLETE_ALBUMS,
  67. set_complete.pages_completed_today,
  68. set_complete.albums_completed_today,
  69. set_complete.albums_reseted_today,
  70. set_complete.albums_opened_today,
  71. to_timestamp(transactions.DAY_DATE) as LAST_UPDATED_DT,
  72. current_timestamp() as DW_INSERT_DT
  73. from
  74. (
  75. select
  76. stickers.*,
  77. albums.open_albums,
  78. albums.complete_albums
  79. from
  80. (
  81. SELECT
  82. day_date,
  83. arena,
  84. payers_segment,
  85. sum(complete_albums) as complete_albums,
  86. sum(open_albums) as open_albums
  87. FROM
  88. (
  89. SELECT
  90. user_id AS uuid,
  91. DATE(derived_tstamp) AS day_date,
  92. payers_segment payers_segment,
  93. MAX(current_arena_index) AS arena,
  94. MAX(
  95. CASE
  96. WHEN RESOURCE_STATUS = 'incomplete' THEN start_session_resource_cnt
  97. ELSE 0
  98. END
  99. ) AS open_albums,
  100. MAX(
  101. CASE
  102. WHEN RESOURCE_STATUS = 'complete' THEN start_session_resource_cnt
  103. ELSE 0
  104. END
  105. ) AS complete_albums
  106. FROM
  107.  
  108. (select aa.*, bb.payers_segment from
  109. (
  110. SELECT
  111. inventory.derived_tstamp,
  112. date(inventory.derived_tstamp) interval_date,
  113. inventory.user_id,
  114. current_arena_index,
  115. RESOURCE_STATUS,
  116. start_session_resource_cnt,
  117. ROW_NUMBER() OVER (
  118. PARTITION BY user_id,
  119. DATE(derived_tstamp),
  120. RESOURCE_STATUS
  121. ORDER BY
  122. derived_tstamp DESC
  123. ) AS row_number
  124. FROM
  125. CANDIVORE.PROD.F_USER_SESSION_INVENTORY AS inventory
  126. JOIN CANDIVORE.PROD.F_USER_SESSION_START AS sess USING (SESSION_ID)
  127. WHERE
  128. DATE(derived_tstamp) > DATEADD(day, -1, $T_ALBUMS_GENERAL_UPDATED_DT_MNG)
  129. AND RESOURCE_TYPE = 'Album'
  130. AND RESOURCE_NAME = 'AlbumRegular'
  131. ) aa
  132. LEFT JOIN
  133. (SELECT
  134. user_id
  135. , interval_date
  136. , country
  137. , LANGUAGE
  138. , platform
  139. , app_version
  140. , app_minor_version
  141. , ltv_group
  142. , DATE(first_install_dt) AS install_date
  143. , payers_segment
  144. , CASE
  145. WHEN trophies_cnt < 1500 THEN '0-1500'
  146. WHEN trophies_cnt < 3800 THEN '1500-3800'
  147. WHEN trophies_cnt < 8000 THEN '3800-8000'
  148. WHEN trophies_cnt < 17000 THEN '8000-17000'
  149. WHEN trophies_cnt < 30000 THEN '17000-30000'
  150. ELSE '30000+'
  151. END AS trophy_group
  152. ,CASE
  153. WHEN trophies_cnt < 800 THEN '800'
  154. WHEN finish_arena<=13 THEN 'Studios'
  155. WHEN finish_arena<=22 THEN 'Master_League'
  156. WHEN finish_arena>=23 THEN 'Legends_League'
  157. END league
  158.  
  159. FROM candivore.prod.daily_users_from_params WHERE interval_date >= '2022-10-01') BB
  160. ON aa.user_id = BB.user_id AND aa.interval_date = BB.interval_date
  161. WHERE
  162. row_number = 1)
  163. GROUP BY
  164. 1,
  165. 2,
  166. 3
  167. )
  168. group by
  169. 1,
  170. 2,
  171. 3
  172. ) as albums full
  173. outer join (
  174. select
  175. transaction_date as day_date,
  176. current_arena_index as arena,
  177. payers_segment,
  178. sum(
  179. case
  180. when resource_id = 'StickerAdventure'
  181. and resource_item_status = 'duplicate' then resource_cnt
  182. else 0
  183. end
  184. ) as duplicate_adventure,
  185. sum(
  186. case
  187. when resource_id = 'StickerAdventure'
  188. and resource_item_status = 'unique' then resource_cnt
  189. else 0
  190. end
  191. ) as unique_adventure,
  192. sum(
  193. case
  194. when resource_id = 'StickerSeasonal'
  195. and resource_item_status = 'duplicate' then resource_cnt
  196. else 0
  197. end
  198. ) as duplicate_seasonal,
  199. sum(
  200. case
  201. when resource_id = 'StickerSeasonal'
  202. and resource_item_status = 'unique' then resource_cnt
  203. else 0
  204. end
  205. ) as unique_seasonal,
  206. sum(
  207. case
  208. when resource_id = 'StickerDiamond'
  209. and resource_item_status = 'duplicate' then resource_cnt
  210. else 0
  211. end
  212. ) as duplicate_diamond,
  213. sum(
  214. case
  215. when resource_id = 'StickerDiamond'
  216. and resource_item_status = 'unique' then resource_cnt
  217. else 0
  218. end
  219. ) as unique_diamond,
  220. sum(
  221. case
  222. when resource_id = 'StickerGold'
  223. and resource_item_status = 'duplicate' then resource_cnt
  224. else 0
  225. end
  226. ) as duplicate_gold,
  227. sum(
  228. case
  229. when resource_id = 'StickerGold'
  230. and resource_item_status = 'unique' then resource_cnt
  231. else 0
  232. end
  233. ) as unique_gold,
  234. sum(
  235. case
  236. when resource_id = 'StickerSilver'
  237. and resource_item_status = 'duplicate' then resource_cnt
  238. else 0
  239. end
  240. ) as duplicate_silver,
  241. sum(
  242. case
  243. when resource_id = 'StickerSilver'
  244. and resource_item_status = 'unique' then resource_cnt
  245. else 0
  246. end
  247. ) as unique_silver,
  248. sum(
  249. case
  250. when resource_id = 'StickerWhite'
  251. and resource_item_status = 'duplicate' then resource_cnt
  252. else 0
  253. end
  254. ) as duplicate_white,
  255. sum(
  256. case
  257. when resource_id = 'StickerWhite'
  258. and resource_item_status = 'unique' then resource_cnt
  259. else 0
  260. end
  261. ) as unique_white
  262. from
  263. (select * from CANDIVORE.PROD.F_USER_RESOURCE_TRANSACTION where
  264. resource_type = 'Sticker'
  265. and is_received_resource = 1
  266. and transaction_date > DATEADD(day, -1, $T_ALBUMS_GENERAL_UPDATED_DT_MNG)) a
  267. LEFT JOIN
  268. (SELECT
  269. user_id
  270. , interval_date
  271. , country
  272. , LANGUAGE
  273. , platform
  274. , app_version
  275. , app_minor_version
  276. , ltv_group
  277. , DATE(first_install_dt) AS install_date
  278. , payers_segment
  279. , CASE
  280. WHEN trophies_cnt < 1500 THEN '0-1500'
  281. WHEN trophies_cnt < 3800 THEN '1500-3800'
  282. WHEN trophies_cnt < 8000 THEN '3800-8000'
  283. WHEN trophies_cnt < 17000 THEN '8000-17000'
  284. WHEN trophies_cnt < 30000 THEN '17000-30000'
  285. ELSE '30000+'
  286. END AS trophy_group
  287. ,CASE
  288. WHEN trophies_cnt < 800 THEN '800'
  289. WHEN finish_arena<=13 THEN 'Studios'
  290. WHEN finish_arena<=22 THEN 'Master_League'
  291. WHEN finish_arena>=23 THEN 'Legends_League'
  292. END league
  293.  
  294. FROM candivore.prod.daily_users_from_params WHERE interval_date >= '2022-10-01') B
  295. ON a.user_id = B.user_id AND a.transaction_date = B.interval_date
  296.  
  297. group by
  298. 1,
  299. 2,
  300. 3
  301. ) as stickers on albums.day_date = stickers.day_date
  302. and albums.arena = stickers.arena and albums.payers_segment = stickers.payers_segment
  303. ) as transactions
  304. full outer join (
  305. select
  306. date(derived_tstamp) as day_date,
  307. current_arena_index as arena,
  308. payers_segment,
  309. sum(
  310. case
  311. when set_type = 'PageComplete' then 1
  312. else 0
  313. end
  314. ) as pages_completed_today,
  315. sum(
  316. case
  317. when set_type = 'AlbumComplete' then 1
  318. else 0
  319. end
  320. ) as albums_completed_today,
  321. sum(
  322. case
  323. when set_type = 'AlbumReset' then 1
  324. else 0
  325. end
  326. ) as albums_reseted_today,
  327. sum(
  328. case
  329. when set_type = 'AlbumOpen' then 1
  330. else 0
  331. end
  332. ) as albums_opened_today
  333. from
  334. (select *, date(derived_tstamp) day_date from CANDIVORE.PROD.F_ALBUM_SET_COMPLETE where
  335. date(derived_tstamp) > DATEADD(day, -1, $T_ALBUMS_GENERAL_UPDATED_DT_MNG)) a
  336. LEFT JOIN
  337. (SELECT
  338. user_id
  339. , interval_date
  340. , country
  341. , LANGUAGE
  342. , platform
  343. , app_version
  344. , app_minor_version
  345. , ltv_group
  346. , DATE(first_install_dt) AS install_date
  347. , payers_segment
  348. , CASE
  349. WHEN trophies_cnt < 1500 THEN '0-1500'
  350. WHEN trophies_cnt < 3800 THEN '1500-3800'
  351. WHEN trophies_cnt < 8000 THEN '3800-8000'
  352. WHEN trophies_cnt < 17000 THEN '8000-17000'
  353. WHEN trophies_cnt < 30000 THEN '17000-30000'
  354. ELSE '30000+'
  355. END AS trophy_group
  356. ,CASE
  357. WHEN trophies_cnt < 800 THEN '800'
  358. WHEN finish_arena<=13 THEN 'Studios'
  359. WHEN finish_arena<=22 THEN 'Master_League'
  360. WHEN finish_arena>=23 THEN 'Legends_League'
  361. END league
  362.  
  363. FROM candivore.prod.daily_users_from_params WHERE interval_date >= '2022-10-01') B
  364. ON a.user_id = B.user_id AND a.day_date = B.interval_date
  365. group by
  366. 1,
  367. 2,
  368. 3
  369. ) as set_complete on transactions.day_date = set_complete.day_date
  370. and transactions.arena = set_complete.arena and transactions.payers_segment = set_complete.payers_segment
  371.  
  372. WHERE 1=1
  373. AND transactions.DAY_DATE > DATEADD(day, -1, $T_ALBUMS_GENERAL_UPDATED_DT_MNG)
  374. ;
  375. ''',
  376. '04_set_merge_error_helper': '''
  377. ALTER SESSION SET ERROR_ON_NONDETERMINISTIC_MERGE = false;
  378. ''',
  379. '05_merge_temp_to_prod': '''
  380. MERGE INTO CANDIVORE.SEMANTIC_LAYER.T_ALBUMS_GENERAL AS t
  381. USING CANDIVORE.TRANSFORMATION.TRANS_ALBUMS_GENERAL AS S
  382. ON s.DATE = t.DATE
  383. AND s.ARENA = t.ARENA
  384. WHEN MATCHED THEN UPDATE SET
  385. t.DATE = s. DATE
  386. ,t.ARENA = s.ARENA
  387. ,t.payers_segment = s.payers_segment
  388. ,t.DUPLICATE_ADVENTURE = s.DUPLICATE_ADVENTURE
  389. ,t.UNIQUE_ADVENTURE = s.UNIQUE_ADVENTURE
  390. ,t.DUPLICATE_SEASONAL = s.DUPLICATE_SEASONAL
  391. ,t.UNIQUE_SEASONAL = s.UNIQUE_SEASONAL
  392. ,t.DUPLICATE_DIAMOND = s.DUPLICATE_DIAMOND
  393. ,t.UNIQUE_DIAMOND = s.UNIQUE_DIAMOND
  394. ,t.DUPLICATE_GOLD = s.DUPLICATE_GOLD
  395. ,t.UNIQUE_GOLD = s.UNIQUE_GOLD
  396. ,t.DUPLICATE_SILVER = s.DUPLICATE_SILVER
  397. ,t.UNIQUE_SILVER = s.UNIQUE_SILVER
  398. ,t.DUPLICATE_WHITE = s.DUPLICATE_WHITE
  399. ,t.UNIQUE_WHITE = s.UNIQUE_WHITE
  400. ,t.OPEN_ALBUMS = s.OPEN_ALBUMS
  401. ,t.COMPLETE_ALBUMS = s.COMPLETE_ALBUMS
  402. ,t.PAGES_COMPLETED_TODAY = s.PAGES_COMPLETED_TODAY
  403. ,t.ALBUMS_COMPLETED_TODAY = s.ALBUMS_COMPLETED_TODAY
  404. ,t.ALBUMS_RESETED_TODAY = s.ALBUMS_RESETED_TODAY
  405. ,t.ALBUMS_OPENED_TODAY = s.ALBUMS_OPENED_TODAY
  406. ,t.LAST_UPDATED_DT = s.LAST_UPDATED_DT
  407. ,t.DW_INSERT_DT = s.DW_INSERT_DT
  408. WHEN NOT MATCHED THEN INSERT (
  409. DATE
  410. ,ARENA
  411. ,payers_segment
  412. ,DUPLICATE_ADVENTURE
  413. ,UNIQUE_ADVENTURE
  414. ,DUPLICATE_SEASONAL
  415. ,UNIQUE_SEASONAL
  416. ,DUPLICATE_DIAMOND
  417. ,UNIQUE_DIAMOND
  418. ,DUPLICATE_GOLD
  419. ,UNIQUE_GOLD
  420. ,DUPLICATE_SILVER
  421. ,UNIQUE_SILVER
  422. ,DUPLICATE_WHITE
  423. ,UNIQUE_WHITE
  424. ,OPEN_ALBUMS
  425. ,COMPLETE_ALBUMS
  426. ,PAGES_COMPLETED_TODAY
  427. ,ALBUMS_COMPLETED_TODAY
  428. ,ALBUMS_RESETED_TODAY
  429. ,ALBUMS_OPENED_TODAY
  430. ,LAST_UPDATED_DT
  431. ,DW_INSERT_DT
  432. )
  433. VALUES (
  434. s.DATE
  435. ,s.ARENA
  436. ,s.payers_segment
  437. ,s.DUPLICATE_ADVENTURE
  438. ,s.UNIQUE_ADVENTURE
  439. ,s.DUPLICATE_SEASONAL
  440. ,s.UNIQUE_SEASONAL
  441. ,s.DUPLICATE_DIAMOND
  442. ,s.UNIQUE_DIAMOND
  443. ,s.DUPLICATE_GOLD
  444. ,s.UNIQUE_GOLD
  445. ,s.DUPLICATE_SILVER
  446. ,s.UNIQUE_SILVER
  447. ,s.DUPLICATE_WHITE
  448. ,s.UNIQUE_WHITE
  449. ,s.OPEN_ALBUMS
  450. ,s.COMPLETE_ALBUMS
  451. ,s.PAGES_COMPLETED_TODAY
  452. ,s.ALBUMS_COMPLETED_TODAY
  453. ,s.ALBUMS_RESETED_TODAY
  454. ,s.ALBUMS_OPENED_TODAY
  455. ,s.LAST_UPDATED_DT
  456. ,s.DW_INSERT_DT
  457. );
  458. ''',
  459. '06_update_mng_table': '''
  460. INSERT INTO CANDIVORE.MANAGE.MANAGEMENT_TABLE(
  461. TABLE_NAME
  462. ,DW_INSERT_DATE
  463. ,LAST_LOAD_DATE
  464. ,ROWS_LOADED
  465. ) VALUES (
  466. 'CANDIVORE.SEMANTIC_LAYER.T_ALBUMS_GENERAL'
  467. ,current_timestamp()
  468. ,(select max(LAST_UPDATED_DT) from CANDIVORE.TRANSFORMATION.TRANS_ALBUMS_GENERAL)
  469. ,(select count(*) from CANDIVORE.TRANSFORMATION.TRANS_ALBUMS_GENERAL)
  470. )
  471. '''
  472. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement