Advertisement
YuvalGai

Untitled

Jun 20th, 2023 (edited)
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.10 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE SNOWPLOW.DERIVED.SP_POPULATE_INTERVAL_LAST_SESSION_PER_USER()
  2. RETURNS VARCHAR(16777216)
  3. LANGUAGE JAVASCRIPT
  4. EXECUTE AS OWNER
  5. AS '
  6. var my_sql_command0 = "BEGIN TRANSACTION;"
  7. var statement0 = snowflake.createStatement({sqlText: my_sql_command0});
  8. statement0.execute();
  9.  
  10. var my_sql_command1 = "CREATE OR REPLACE TABLE SNOWPLOW.DERIVED.INTERVAL_DATE_SESSION_STARTS AS \\
  11. SELECT DATEADD(''HOUR'',6,MAX(Interval_Date_Time)) as Next_Interval \\
  12. FROM SNOWPLOW.DERIVED.INTERVAL_LAST_SESSION_PER_USER;"
  13. var statement1 = snowflake.createStatement({sqlText: my_sql_command1});
  14. statement1.execute();
  15.  
  16. var my_sql_command2 = "INSERT INTO SNOWPLOW.DERIVED.INTERVAL_LAST_SESSION_PER_USER \\
  17. SELECT \\
  18. NewData.USER_ID AS User_Id \\
  19. ,NewData.Interval_Date_Time \\
  20. ,NewData.Session_Id as Last_Session_Id \\
  21. ,NewData.LTV_GROUP as LTV_Group \\
  22. ,NewData.ltv_group_30d as ltv_group_30d \\
  23. ,NewData.SENIORITY as Seniority \\
  24. ,NewData.SENIORITY_BIN as Seniority_Bin \\
  25. ,NewData.ENGAGEMENT_GROUP as Engagement_Group \\
  26. ,NewData.IS_PAYER as Is_Payer \\
  27. ,NewData.CURRENT_ARENA_INDEX as Arena_Index \\
  28. ,NewData.Arena_Group
  29. ,NewData.trophy_group_2 \\
  30. FROM ( \\
  31. SELECT \\
  32. USER_ID \\
  33. ,TIMESTAMP_FROM_PARTS(YEAR(Next_Interval),MONTH(Next_Interval),DAY(Next_Interval),DATE_PART(''HOUR'',Next_Interval),0,0,0) as Interval_Date_Time \\
  34. ,SESSION_ID \\
  35. ,LTV_Group \\
  36. ,case
  37. when iap_30d = 0 or iap_30d is null then ''0''
  38. when iap_30d <= 1 then ''Low (0-1)''
  39. when iap_30d <= 2 then ''Med (1-3)''
  40. when iap_30d <= 5 then ''High (3-8)''
  41. when iap_30d <= 15 then ''Very High (8-15)''
  42. when iap_30d > 15 then ''VIP (15+)''
  43. end ltv_group_30d
  44. , CASE
  45. WHEN trophies_cnt < 125 THEN ''0-125''
  46. WHEN trophies_cnt < 1400 THEN ''125-1400''
  47. WHEN trophies_cnt < 2000 THEN ''1400-2000''
  48. WHEN trophies_cnt < 3800 THEN ''2000-3800''
  49. WHEN trophies_cnt < 4500 THEN ''3800-4500''
  50. WHEN trophies_cnt < 5500 THEN ''4500-5500''
  51. WHEN trophies_cnt < 7000 THEN ''5500-7000''
  52. WHEN trophies_cnt < 10000 THEN ''7000-10000''
  53. WHEN trophies_cnt < 13000 THEN ''10000-13000''
  54. WHEN trophies_cnt < 16000 THEN ''13000-16000''
  55. WHEN trophies_cnt < 30000 THEN ''16000-30000''
  56. WHEN trophies_cnt >= 30000 THEN ''30000+''
  57. END AS trophy_group_2 \\
  58. ,SENIORITY \\
  59. ,SENIORITY_BIN \\
  60. ,ENGAGEMENT_GROUP \\
  61. ,IS_PAYER \\
  62. ,CURRENT_ARENA_INDEX \\
  63. ,CASE WHEN CURRENT_ARENA_INDEX <=13 THEN ''Studios'' \\
  64. WHEN CURRENT_ARENA_INDEX <=22 THEN ''Master League'' \\
  65. ELSE ''Legends League'' END as Arena_Group \\
  66. ,ROW_NUMBER() OVER (PARTITION BY USER_ID ORDER BY DERIVED_TSTAMP DESC) as Last_Daily_Session \\
  67. FROM SNOWPLOW.DERIVED.USER_SESSION_START A \\
  68. INNER JOIN SNOWPLOW.DERIVED.INTERVAL_DATE_SESSION_STARTS B \\
  69. ON A.DERIVED_TSTAMP <= Next_Interval AND DERIVED_TSTAMP >= DATEADD(''HOUR'',-24,Next_Interval) \\
  70. WHERE B.Next_Interval < GETDATE() \\
  71. ) NewData \\
  72. LEFT JOIN ( \\
  73. SELECT DISTINCT Interval_Date_Time \\
  74. FROM SNOWPLOW.DERIVED.INTERVAL_LAST_SESSION_PER_USER \\
  75. ) OldData ON NewData.Interval_Date_Time = OldData.Interval_Date_Time \\
  76. WHERE Last_Daily_Session = 1 \\
  77. AND OldData.Interval_Date_Time IS NULL;"
  78. var statement2 = snowflake.createStatement({sqlText: my_sql_command2});
  79. statement2.execute();
  80.  
  81. var my_sql_command3 = "DROP TABLE IF EXISTS SNOWPLOW.DERIVED.INTERVAL_DATE_SESSION_STARTS;";
  82. var statement3 = snowflake.createStatement({sqlText: my_sql_command3});
  83. statement3.execute();
  84.  
  85. var my_sql_command4 = "COMMIT;";
  86. var statement4 = snowflake.createStatement({sqlText: my_sql_command4});
  87. statement4.execute();
  88. ';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement