Bug1465.sql 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. USE hahn;
  2. $minus_date = Python::minus_date(
  3. @@(String?,String?)->Int64@@,
  4. @@
  5. from datetime import datetime, timedelta
  6. def minus_date(date1, date2):
  7. return (datetime.strptime(date1, "%Y-%m-%d") - datetime.strptime(date2, "%Y-%m-%d")).days
  8. @@
  9. );
  10. $normalize_list = Python::normalize_list(
  11. @@(List<Tuple<Int64,Int64?>>)->List<Tuple<Int64,Int64>>@@,
  12. @@
  13. def normalize_list(values):
  14. return sorted((x, y) for x, y in values if y)
  15. @@
  16. );
  17. $urls = (
  18. FROM hits
  19. SELECT url AS Url, "2016-10-25" AS Date
  20. GROUP BY url
  21. );
  22. $flatten_factors = (
  23. FROM $urls AS target
  24. INNER JOIN hits AS history
  25. ON target.Url == history.url
  26. SELECT
  27. target.Url AS Url,
  28. target.Date AS Date,
  29. history.*
  30. );
  31. INSERT INTO [Out1] WITH TRUNCATE FROM $flatten_factors SELECT *;
  32. COMMIT;
  33. $pool = (
  34. FROM [Out1]
  35. SELECT
  36. Url,
  37. Date,
  38. Url::GetHost(Url) AS Host
  39. /* $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_all_total]))) AS metrika_all_total
  40. /* $normalize_list(LIST(($minus_date(Date, [history.date]), [history.yabro_mobile_unique]))) AS yabro_mobile_unique,
  41. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_counter_count]))) AS metrika_counter_count,
  42. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_yabro_desktop_total]))) AS metrika_yabro_desktop_total,
  43. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_yabro_desktop_unique]))) AS metrika_yabro_desktop_unique,
  44. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_all_unique]))) AS metrika_all_unique,
  45. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_yabro_mobile_unique]))) AS metrika_yabro_mobile_unique,
  46. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.yabro_desktop_total]))) AS yabro_desktop_total,
  47. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.yabro_desktop_unique]))) AS yabro_desktop_unique,
  48. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.yabro_mobile_total]))) AS yabro_mobile_total,
  49. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.metrika_yabro_mobile_total]))) AS metrika_yabro_mobile_total,
  50. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.cs_clicks]))) AS cs_clicks,
  51. $normalize_list(LIST(($minus_date(Date, [history.date]), [history.cs_shows]))) AS cs_shows*/
  52. GROUP BY Url, Date
  53. );
  54. $hosts = (
  55. FROM $pool
  56. SELECT Host, "2016-10-25" AS Date
  57. GROUP BY Host
  58. );
  59. $host_features = (
  60. FROM $hosts AS hosts
  61. LEFT JOIN hits AS all_hits
  62. ON hosts.Host == Url::GetHost(all_hits.url)
  63. SELECT
  64. hosts.Host AS Host,
  65. hosts.Date AS Date,
  66. /* SUM(all_hits.metrika_all_total) AS metrika_all_total_sum7,
  67. /* MAX(all_hits.metrika_all_total) AS metrika_all_total_max7,
  68. -- STDDEV(all_hits.metrika_all_total) AS metrika_all_total_stddev7,
  69. MEDIAN(all_hits.metrika_all_total) AS metrika_all_total_median7,
  70. PERCENTILE(all_hits.metrika_all_total, 0.25) AS metrika_all_total_25perc7,
  71. PERCENTILE(all_hits.metrika_all_total, 0.75) AS metrika_all_total_75perc7,
  72. COUNT_IF(all_hits.metrika_all_total > 0) AS metrika_all_total_nonzero7,
  73. SUM(all_hits.yabro_mobile_unique) AS yabro_mobile_unique_sum7,
  74. MAX(all_hits.yabro_mobile_unique) AS yabro_mobile_unique_max7,
  75. -- STDDEV(all_hits.yabro_mobile_unique) AS yabro_mobile_unique_stddev7,
  76. MEDIAN(all_hits.yabro_mobile_unique) AS yabro_mobile_unique_median7,
  77. PERCENTILE(all_hits.yabro_mobile_unique, 0.25) AS yabro_mobile_unique_25perc7,
  78. PERCENTILE(all_hits.yabro_mobile_unique, 0.75) AS yabro_mobile_unique_75perc7,
  79. COUNT_IF(all_hits.yabro_mobile_unique > 0) AS yabro_mobile_unique_nonzero7,
  80. SUM(all_hits.metrika_counter_count) AS metrika_counter_count_sum7,
  81. MAX(all_hits.metrika_counter_count) AS metrika_counter_count_max7,
  82. -- STDDEV(all_hits.metrika_counter_count) AS metrika_counter_count_stddev7,
  83. MEDIAN(all_hits.metrika_counter_count) AS metrika_counter_count_median7,
  84. PERCENTILE(all_hits.metrika_counter_count, 0.25) AS metrika_counter_count_25perc7,
  85. PERCENTILE(all_hits.metrika_counter_count, 0.75) AS metrika_counter_count_75perc7,
  86. COUNT_IF(all_hits.metrika_counter_count > 0) AS metrika_counter_count_nonzero7,
  87. SUM(all_hits.metrika_yabro_desktop_total) AS metrika_yabro_desktop_total_sum7,
  88. MAX(all_hits.metrika_yabro_desktop_total) AS metrika_yabro_desktop_total_max7,
  89. -- STDDEV(all_hits.metrika_yabro_desktop_total) AS metrika_yabro_desktop_total_stddev7,
  90. MEDIAN(all_hits.metrika_yabro_desktop_total) AS metrika_yabro_desktop_total_median7,
  91. PERCENTILE(all_hits.metrika_yabro_desktop_total, 0.25) AS metrika_yabro_desktop_total_25perc7,
  92. PERCENTILE(all_hits.metrika_yabro_desktop_total, 0.75) AS metrika_yabro_desktop_total_75perc7,
  93. COUNT_IF(all_hits.metrika_yabro_desktop_total > 0) AS metrika_yabro_desktop_total_nonzero7,
  94. SUM(all_hits.metrika_yabro_desktop_unique) AS metrika_yabro_desktop_unique_sum7,
  95. MAX(all_hits.metrika_yabro_desktop_unique) AS metrika_yabro_desktop_unique_max7,
  96. -- STDDEV(all_hits.metrika_yabro_desktop_unique) AS metrika_yabro_desktop_unique_stddev7,
  97. MEDIAN(all_hits.metrika_yabro_desktop_unique) AS metrika_yabro_desktop_unique_median7,
  98. PERCENTILE(all_hits.metrika_yabro_desktop_unique, 0.25) AS metrika_yabro_desktop_unique_25perc7,
  99. PERCENTILE(all_hits.metrika_yabro_desktop_unique, 0.75) AS metrika_yabro_desktop_unique_75perc7,
  100. COUNT_IF(all_hits.metrika_yabro_desktop_unique > 0) AS metrika_yabro_desktop_unique_nonzero7,
  101. SUM(all_hits.metrika_all_unique) AS metrika_all_unique_sum7,
  102. MAX(all_hits.metrika_all_unique) AS metrika_all_unique_max7,
  103. -- STDDEV(all_hits.metrika_all_unique) AS metrika_all_unique_stddev7,
  104. MEDIAN(all_hits.metrika_all_unique) AS metrika_all_unique_median7,
  105. PERCENTILE(all_hits.metrika_all_unique, 0.25) AS metrika_all_unique_25perc7,
  106. PERCENTILE(all_hits.metrika_all_unique, 0.75) AS metrika_all_unique_75perc7,
  107. COUNT_IF(all_hits.metrika_all_unique > 0) AS metrika_all_unique_nonzero7,
  108. SUM(all_hits.metrika_yabro_mobile_unique) AS metrika_yabro_mobile_unique_sum7,
  109. MAX(all_hits.metrika_yabro_mobile_unique) AS metrika_yabro_mobile_unique_max7,
  110. -- STDDEV(all_hits.metrika_yabro_mobile_unique) AS metrika_yabro_mobile_unique_stddev7,
  111. MEDIAN(all_hits.metrika_yabro_mobile_unique) AS metrika_yabro_mobile_unique_median7,
  112. PERCENTILE(all_hits.metrika_yabro_mobile_unique, 0.25) AS metrika_yabro_mobile_unique_25perc7,
  113. PERCENTILE(all_hits.metrika_yabro_mobile_unique, 0.75) AS metrika_yabro_mobile_unique_75perc7,
  114. COUNT_IF(all_hits.metrika_yabro_mobile_unique > 0) AS metrika_yabro_mobile_unique_nonzero7,
  115. SUM(all_hits.yabro_desktop_total) AS yabro_desktop_total_sum7,
  116. MAX(all_hits.yabro_desktop_total) AS yabro_desktop_total_max7,
  117. -- STDDEV(all_hits.yabro_desktop_total) AS yabro_desktop_total_stddev7,
  118. MEDIAN(all_hits.yabro_desktop_total) AS yabro_desktop_total_median7,
  119. PERCENTILE(all_hits.yabro_desktop_total, 0.25) AS yabro_desktop_total_25perc7,
  120. PERCENTILE(all_hits.yabro_desktop_total, 0.75) AS yabro_desktop_total_75perc7,
  121. COUNT_IF(all_hits.yabro_desktop_total > 0) AS yabro_desktop_total_nonzero7,
  122. SUM(all_hits.yabro_desktop_unique) AS yabro_desktop_unique_sum7,
  123. MAX(all_hits.yabro_desktop_unique) AS yabro_desktop_unique_max7,
  124. -- STDDEV(all_hits.yabro_desktop_unique) AS yabro_desktop_unique_stddev7,
  125. MEDIAN(all_hits.yabro_desktop_unique) AS yabro_desktop_unique_median7,
  126. PERCENTILE(all_hits.yabro_desktop_unique, 0.25) AS yabro_desktop_unique_25perc7,
  127. PERCENTILE(all_hits.yabro_desktop_unique, 0.75) AS yabro_desktop_unique_75perc7,
  128. COUNT_IF(all_hits.yabro_desktop_unique > 0) AS yabro_desktop_unique_nonzero7,
  129. SUM(all_hits.yabro_mobile_total) AS yabro_mobile_total_sum7,
  130. MAX(all_hits.yabro_mobile_total) AS yabro_mobile_total_max7,
  131. -- STDDEV(all_hits.yabro_mobile_total) AS yabro_mobile_total_stddev7,
  132. MEDIAN(all_hits.yabro_mobile_total) AS yabro_mobile_total_median7,
  133. PERCENTILE(all_hits.yabro_mobile_total, 0.25) AS yabro_mobile_total_25perc7,
  134. PERCENTILE(all_hits.yabro_mobile_total, 0.75) AS yabro_mobile_total_75perc7,
  135. COUNT_IF(all_hits.yabro_mobile_total > 0) AS yabro_mobile_total_nonzero7,
  136. SUM(all_hits.metrika_yabro_mobile_total) AS metrika_yabro_mobile_total_sum7,
  137. MAX(all_hits.metrika_yabro_mobile_total) AS metrika_yabro_mobile_total_max7,
  138. -- STDDEV(all_hits.metrika_yabro_mobile_total) AS metrika_yabro_mobile_total_stddev7,
  139. MEDIAN(all_hits.metrika_yabro_mobile_total) AS metrika_yabro_mobile_total_median7,
  140. PERCENTILE(all_hits.metrika_yabro_mobile_total, 0.25) AS metrika_yabro_mobile_total_25perc7,
  141. PERCENTILE(all_hits.metrika_yabro_mobile_total, 0.75) AS metrika_yabro_mobile_total_75perc7,
  142. COUNT_IF(all_hits.metrika_yabro_mobile_total > 0) AS metrika_yabro_mobile_total_nonzero7,*/
  143. COUNT(*) AS url_day_count,
  144. COUNT(DISTINCT(all_hits.url)) AS url_count
  145. GROUP BY hosts.Host, hosts.Date
  146. );
  147. INSERT INTO [Out2] WITH TRUNCATE
  148. FROM $pool AS pool
  149. LEFT JOIN $host_features AS host
  150. ON Url::GetHost(pool.Url) == host.Host AND pool.Date == host.Date
  151. SELECT *;
  152. /* pool.Date AS Date,
  153. pool.yabro_mobile_unique AS yabro_mobile_unique,
  154. pool.Url AS Url,
  155. pool.cs_clicks AS cs_clicks,
  156. pool.cs_shows AS cs_shows,
  157. pool.metrika_all_total AS metrika_all_total,
  158. pool.metrika_all_unique AS metrika_all_unique,
  159. pool.Host AS Host,
  160. pool.metrika_yabro_desktop_total AS metrika_yabro_desktop_total,
  161. pool.metrika_yabro_desktop_unique AS metrika_yabro_desktop_unique,
  162. pool.metrika_yabro_mobile_total AS metrika_yabro_mobile_total,
  163. pool.metrika_yabro_mobile_unique AS metrika_yabro_mobile_unique,
  164. pool.yabro_desktop_total AS yabro_desktop_total,
  165. pool.yabro_desktop_unique AS yabro_desktop_unique,
  166. pool.yabro_mobile_total AS yabro_mobile_total,
  167. pool.metrika_counter_count AS metrika_counter_count,
  168. host.*;*/
  169. COMMIT;
  170. DROP TABLE [Out1];