Guest User

Untitled

a guest
Oct 20th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.78 KB | None | 0 0
  1. --1) Data Source: Custom SQL Query
  2.  
  3. WITH od AS (
  4. SELECT ogr.order_id
  5. , ogr.group_id
  6. , ogr.reservation_booking_id AS booking_id
  7. , ogr.order_datetime_est AS order_ts
  8. , ogr.style
  9. , ogr.uid
  10. , ogr.order_type
  11. FROM rtrbi.order_group_reservation ogr
  12. WHERE ogr.order_status = 'payment_received'
  13. AND ogr.order_type != 'STORE_INVENTORY_REQUEST'
  14. ),
  15.  
  16. re AS (
  17. SELECT review.id AS review_id
  18. , od.uid
  19. , od.style
  20. , review.created AS review_ts
  21. , od.order_id
  22. , od.group_id
  23. , od.booking_id
  24. , od.order_ts
  25. , ROW_NUMBER() OVER (PARTITION BY review.id ORDER BY od.order_ts, review.created) AS rnk
  26. , review.styleName
  27. , review.eventType
  28. , review.caption
  29. , review.content
  30. , review.rating
  31. , review.fit
  32. , review.sizeWorn
  33. , review.status
  34. , review.photo_count
  35. FROM etl.review review
  36. INNER JOIN od
  37. ON review.userId = od.uid
  38. AND review.styleName = od.style
  39. AND review.created > od.order_ts),
  40.  
  41. qm AS (
  42. SELECT *
  43. FROM (
  44. SELECT *
  45. , RANK() OVER (PARTITION BY user_id ORDER BY queue_start DESC) AS rnk
  46. FROM etl.queue_membership qm
  47. WHERE qm.queue_start IS NOT NULL
  48. ) qm
  49. WHERE qm.rnk = 1),
  50.  
  51. mapped_review AS (
  52. SELECT re.uid
  53. , qm.queue_parent_id
  54. , re.review_id
  55. , re.style
  56. , DATE(re.review_ts) AS review_date
  57. , re.order_id
  58. , DATE(re.order_ts) AS order_date
  59. , re.status
  60. , re.photo_count
  61. FROM re
  62. LEFT JOIN qm
  63. ON qm.user_id = re.uid
  64. WHERE re.rnk = 1
  65. ORDER BY 5,2,1),
  66.  
  67. shipments AS (
  68. SELECT ogr.uid
  69. , ogr.order_id
  70. , ogr.group_id
  71. , ogr.order_type
  72. , ogr.reservation_booking_id AS booking_id
  73. , DATE(ogr.order_datetime_est) AS order_date
  74. , ogr.style
  75. , ogr.last_fulfillment_status
  76. , ogr.rf_end_date
  77. FROM rtrbi.order_group_reservation ogr
  78. WHERE ogr.order_type != 'STORE_INVENTORY_REQUEST'
  79. AND DATE(ogr.order_datetime_est) >= '2015-08-02')
  80.  
  81. SELECT ship.order_date
  82. , ship.uid
  83. , mr.uid as reviewer
  84. , mr.queue_parent_id
  85. , ship.order_id
  86. , ship.rf_end_date
  87. , ship.group_id
  88. , ship.booking_id
  89. , ship.style
  90. , CASE WHEN ship.order_type = 'QUEUE' THEN 'Unlimited' ELSE 'Classic' END AS order_type
  91. , ship.last_fulfillment_status
  92. , mr.review_id
  93. , mr.review_date
  94. , mr.status
  95. , mr.photo_count
  96. , CASE WHEN mr.review_date - ship.rf_end_date <= 14 THEN 1 ELSE 0 END AS day_14_review
  97. , CASE WHEN mr.review_date - ship.rf_end_date <= 28 THEN 1 ELSE 0 END AS day_28_review
  98. FROM shipments ship
  99. LEFT JOIN mapped_review mr
  100. ON ship.uid = mr.uid
  101. AND ship.style = mr.style
  102. AND ship.order_id = mr.order_id
  103. WHERE CURRENT_DATE > ship.rf_end_date
  104. ORDER BY ship.order_date
  105. ;
  106.  
  107. --2.) Data Source: Daily Review Counts:
  108.  
  109. select
  110. date(r.created) as date
  111. , count(distinct r.id) as num_reviews
  112. , count(distinct r.userId) as unique_reviewers
  113. , round(count(distinct r.id) / count(distinct r.userId), 2) as reviews_per_reviewer
  114. , round( avg(case when r.rating > 0 then r.rating/2 else null end), 2) as avg_star_rating
  115. , count(distinct r.hasPhoto) as moments
  116. , sum(coalesce(r.photo_count,0)) as moment_photos
  117. , sum(coalesce(r.comment_count,0)) as comments
  118. from etl.review r
  119. inner join analytics.users au
  120. on au.uid = r.userId
  121. and au.mail not like '%renttherunway.com'
  122. where date(r.created) between date(sysdate()) - 30 and date(sysdate()) - 1
  123. group by 1
  124. order by 1 desc
  125.  
  126. --3.) Data Source: Events in Review
  127. select distinct r.review_date, rb.expected_begin_date, rb.uid, rb.style, rb.psize, r.eventType, rb.sku, r.id as review_id,
  128. r.caption, r.content, r.fit, r.sizeWorn, re.canonical_event, re.event, re.formality,
  129. p.combo_type, p.mongo_collection, p.designer, p.title,
  130. p.avl_date, p.sub_type, p.season_code, p.embellishment,
  131. p.length, p.sleeve, p.color, p.fabric_code,
  132. p.stretch, p.body_types, p.product_url, p.type, p.formality as formality_score
  133. from (select distinct date(created) as review_date, r.eventType, r.id,
  134. r.caption, r.content, r.fit, r.sizeWorn,
  135. r.stylename, r.userId
  136. from etl.review as r
  137. where content is not null) as r
  138. left join (select distinct rb.expected_begin_date, rb.uid, pmi.style, pmi.psize, pmi.sku
  139. from analytics.products_iid as pmi
  140. inner join etl.reservation_booking as rb
  141. on pmi.sku = rb.sku
  142. where rb.primary_booking_id is null
  143. and pmi.sku not in ('CLEARANCE_','NMBRD10_10','NMBRD10_12','NMBRD10_14','NMBRD10_16','NMBRD11_10','NMBRD11_12','NMBRD12_10',
  144. 'NMBRD12_12','NMBRD12_14','NMBRD12_16','NMBRD13_10','NMBRD13_12','NMBRD14_10','NMBRD14_12','NMBRD14_14',
  145. 'NMBRD14_16','NMBRD15_10','NMBRD15_12','WGACAVCBRC')) as rb
  146. on rb.uid = r.userId and
  147. rb.style = r.styleName and
  148. rb.expected_begin_date interpolate previous value r.review_date
  149. inner join etl.review_events as re
  150. on r.id = re.id
  151. inner join analytics.products as p
  152. on rb.style = p.style
  153. where r.review_date is not null
  154. and rb.expected_begin_date >= '2012-01-01'
  155. and re.canonical_event is not null
  156. and p.type in ('A','D')
  157. and re.canonical_event != 'N'
  158.  
  159. --4.) Data Source: Review Aggregation
  160.  
  161. select
  162. ap.type
  163. , ap.nid
  164. , ap.style
  165. , ap.designer
  166. , ap.title
  167. , ap.avl_date
  168. , ap.on_site
  169. , round(coalesce(avg(case when r.rating > 0 then r.rating / 2 else null end),0),2) as average_star_rating
  170. , round(coalesce(avg(
  171. case when fit = 'Small' then 1
  172. when fit = 'True to Size' then 2
  173. when fit = 'Large' then 3
  174. else null
  175. end
  176. ),0),2) as average_fit_rating
  177. , count(distinct r.id) as number_of_reviews
  178. , coalesce(sum(r.photo_count),0) as number_of_photos
  179. , sum(case when r.eventType = 'Date' then 1 else 0 end) as 'Date'
  180. , sum(case when r.eventType = 'Party' then 1 else 0 end) as 'Party'
  181. , sum(case when r.eventType = 'Wedding' then 1 else 0 end) as 'Wedding'
  182. , sum(case when r.eventType = 'Vacation' then 1 else 0 end) as 'Vacation'
  183. , sum(case when r.eventType = 'Formal Affair' then 1 else 0 end) as 'Formal_Affair'
  184. , sum(case when r.eventType = 'Other' then 1 else 0 end) as 'Other'
  185. from analytics.products ap
  186. left join etl.review r
  187. on r.styleName = ap.style
  188. group by 1,2,3,4,5,6,7
  189.  
  190. --5.) Data Source: Yesterday's Reviews
  191.  
  192. select
  193. r.styleName
  194. , ap.nid
  195. , ap.title
  196. , date(r.created) as date
  197. , au.mail
  198. , round(r.rating/2) as rating
  199. , eventType as occassion
  200. , r.caption as review_title
  201. , r.content as review
  202. , coalesce(r.photo_count,0) as moment_photo_count
  203. , coalesce(r.comment_count,0) as comments
  204. from etl.review r
  205. inner join analytics.users au
  206. on au.uid = r.userId
  207. and au.mail not like '%renttherunway.com'
  208. inner join analytics.products ap
  209. on ap.style = r.styleName
  210. where date(r.created) between
  211. case when dayofweek(sysdate()) = 2 then date(sysdate()) - 3 else date(sysdate())-1 end
  212. and date(sysdate())- 1
  213. order by r.rating, r.styleName
Add Comment
Please, Sign In to add comment