dw_channel_daily.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. """
  2. @desc 号维度全量表 ck上跑完dw_daily_channel 并同步到mysql dw_channel_daily
  3. @auth ck
  4. """
  5. import time
  6. from model.DateUtils import DateUtils
  7. from model.DataBaseUtils import MysqlUtils,CkUtils
  8. du = DateUtils()
  9. db= MysqlUtils()
  10. ck = CkUtils()
  11. def dw_daily_channel():
  12. print("run> dw_daily_channel")
  13. sql="""insert into dw_daily_channel
  14. select
  15. dt,channel,pitcher,stage,platform,book,
  16. order_count,order_user,order_amount,first_order_count,first_order_user,first_order_amount,
  17. view_count,click_count,follow_user,cost,reg_order_count,reg_order_user,
  18. reg_order_amount,reg_order_amount30,web_view_count,platform_view_count,web_order_count,
  19. 0 total_cost,0 total_amount,
  20. reg_order_user_again,reg_order_user7,reg_order_user30,reg_order_amount7,type,
  21. 0 total_first_amount,
  22. require_roi,require_mult
  23. from
  24. (select dt,channel, pitcher,stage,platform,book,cost,view_count,click_count,follow_user,web_view_count,platform_view_count,web_order_count,
  25. case type when 'vx' then 'MP' when 'qq' then 'GDT' else type end type,require_roi,require_mult from dw_daily_channel_cost) a
  26. left outer join
  27. (select toDate(formatDateTime(reg_time,'%Y-%m-%d')) as dt2,channel as channel2,
  28. sum(amount) as reg_order_amount,
  29. count(distinct user_id) as reg_order_user,
  30. count(1) as reg_order_count,
  31. sum(if(subtractDays(date, 30)>reg_time,0,amount)) as reg_order_amount30,
  32. count(distinct if(subtractDays(date, 7)>reg_time,'',user_id))-1 reg_order_user7,
  33. sum(if(subtractDays(date, 7)>reg_time,0,amount)) as reg_order_amount7,
  34. count(distinct if(subtractDays(date, 30)>reg_time,'',user_id))-1 reg_order_user30
  35. from order where reg_time>'2019-03-18 00:00:00' group by toDate(formatDateTime(reg_time,'%Y-%m-%d')),channel) b
  36. on dt=dt2 and channel=channel2 left outer join
  37. (select date as dt3,channel as channel3,
  38. count(1) as first_order_count,
  39. count(distinct user_id) as first_order_user,
  40. sum(amount) as first_order_amount
  41. from order where toDate(reg_time)=date group by date,channel) c
  42. on dt=dt3 and channel=channel3
  43. left outer join
  44. (select date as dt4,channel as channel4,
  45. count(1) as order_count,
  46. count(distinct user_id) as order_user,
  47. sum(amount) as order_amount
  48. from order group by date,channel) d
  49. on dt=dt4 and channel=channel4
  50. left outer join (
  51. select sum(if(user_order_count>1,1,0)) reg_order_user_again,channel channel6,toDate(reg_date) dt6 from (
  52. select formatDateTime(reg_time,'%Y-%m-%d') reg_date,channel,count(1) user_order_count
  53. from order group by formatDateTime(reg_time,'%Y-%m-%d') ,user_id,channel
  54. ) x group by reg_date,channel
  55. ) f on dt=dt6 and channel=channel6
  56. having order_amount+cost+reg_order_amount>0
  57. """
  58. ck.execute("truncate table dw_daily_channel")
  59. ck.execute(sql)
  60. print("ok")
  61. data=ck.execute('select * from dw_daily_channel')
  62. insert_sql="insert into dw_channel_daily values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  63. db.dm.execute("truncate table dw_channel_daily")
  64. db.dm.executeMany(insert_sql,data)
  65. db.quchen_text.execute("truncate table dw_channel_daily")
  66. db.quchen_text.executeMany(insert_sql,data)
  67. def dw_channel_daily():
  68. sql="""
  69. select
  70. dt,channel,pitcher,stage,platform,book,case type when 'vx' then 'MP' when 'qq' then 'GDT' else type end type,
  71. order_count,order_user,order_amount,
  72. first_order_count,first_order_user,first_order_amount,
  73. view_count,click_count,follow_user,
  74. cost,reg_order_count,reg_order_user,reg_order_amount,
  75. web_view_count,platform_view_count,web_order_count,
  76. reg_order_user_again,
  77. reg_order_user_again3,
  78. reg_order_user_again4,
  79. reg_order_user_again5,
  80. reg_order_user_again6
  81. from
  82. (select dt,channel, pitcher,stage,platform,book,cost,view_count,click_count, ---基础属性和消耗数据
  83. follow_user,web_view_count,platform_view_count,web_order_count,type,
  84. require_roi,require_mult from dw_daily_channel_cost) a
  85. left outer join
  86. (select date as dt3,channel as channel3,count(1) as first_order_count, ---新用户首日充值
  87. count(distinct user_id) as first_order_user,sum(amount) as first_order_amount
  88. from order where toDate(reg_time)=date group by date,channel) c
  89. on dt=dt3 and channel=channel3
  90. left outer join
  91. (select date as dt4,channel as channel4,count(1) as order_count, ---账面充值
  92. count(distinct user_id) as order_user,sum(amount) as order_amount
  93. from order group by date,channel) d
  94. on dt=dt4 and channel=channel4
  95. left outer join (
  96. select sum(if(user_order_count>=2,1,0)) reg_order_user_again,channel channel6,toDate(reg_date) dt6, ---复冲人数
  97. sum(if(user_order_count>=3,1,0)) reg_order_user_again3,
  98. sum(if(user_order_count>=4,1,0)) reg_order_user_again4,
  99. sum(if(user_order_count>=5,1,0)) reg_order_user_again5,
  100. sum(if(user_order_count>=6,1,0)) reg_order_user_again6
  101. from (select formatDateTime(reg_time,'%Y-%m-%d') reg_date,channel,count(1) user_order_count
  102. from order group by formatDateTime(reg_time,'%Y-%m-%d') ,user_id,channel) x group by reg_date,channel
  103. ) f on dt=dt6 and channel=channel6
  104. left outer join
  105. (
  106. select toDate(formatDateTime(reg_time,'%Y-%m-%d')) as dt2, ---新用户累计充值数据
  107. channel as channel2,
  108. sum(amount) as reg_order_amount,
  109. count(distinct user_id) as reg_order_user,
  110. count(1) as reg_order_count
  111. from order where reg_time>'2019-03-18 00:00:00' group by toDate(formatDateTime(reg_time,'%Y-%m-%d')),channel) b
  112. on dt=dt2 and channel=channel2
  113. having order_amount+cost+reg_order_amount>0"""
  114. data=ck.execute(sql)
  115. isql="insert into dw_channel values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  116. db.dm.execute("truncate table dw_channel")
  117. db.dm.executeMany(isql,data)
  118. def dw_channel_user_daily():
  119. sql="""
  120. select toDate(formatDateTime(reg_time,'%Y-%m-%d')) as dt,
  121. channel,
  122. count(distinct if(subtractDays(date, 1)>=toDate(reg_time),null,user_id)) dc1,
  123. count(distinct if(subtractDays(date, 2)>=toDate(reg_time),null,user_id)) dc2,
  124. count(distinct if(subtractDays(date, 3)>=toDate(reg_time),null,user_id)) dc3,
  125. count(distinct if(subtractDays(date, 4)>=toDate(reg_time),null,user_id)) dc4,
  126. count(distinct if(subtractDays(date, 5)>=toDate(reg_time),null,user_id)) dc5,
  127. count(distinct if(subtractDays(date, 6)>=toDate(reg_time),null,user_id)) dc6,
  128. count(distinct if(subtractDays(date, 7)>=toDate(reg_time),null,user_id)) dc7,
  129. count(distinct if(subtractDays(date, 8)>=toDate(reg_time),null,user_id)) dc8,
  130. count(distinct if(subtractDays(date, 9)>=toDate(reg_time),null,user_id)) dc9,
  131. count(distinct if(subtractDays(date, 10)>=toDate(reg_time),null,user_id)) dc10,
  132. count(distinct if(subtractDays(date, 11)>=toDate(reg_time),null,user_id)) dc11,
  133. count(distinct if(subtractDays(date, 12)>=toDate(reg_time),null,user_id)) dc12,
  134. count(distinct if(subtractDays(date, 13)>=toDate(reg_time),null,user_id)) dc13,
  135. count(distinct if(subtractDays(date, 14)>=toDate(reg_time),null,user_id)) dc14,
  136. count(distinct if(subtractDays(date, 15)>=toDate(reg_time),null,user_id)) dc15,
  137. count(distinct if(subtractDays(date, 16)>=toDate(reg_time),null,user_id)) dc16,
  138. count(distinct if(subtractDays(date, 17)>=toDate(reg_time),null,user_id)) dc17,
  139. count(distinct if(subtractDays(date, 18)>=toDate(reg_time),null,user_id)) dc18,
  140. count(distinct if(subtractDays(date, 19)>=toDate(reg_time),null,user_id)) dc19,
  141. count(distinct if(subtractDays(date, 20)>=toDate(reg_time),null,user_id)) dc20,
  142. count(distinct if(subtractDays(date, 21)>=toDate(reg_time),null,user_id)) dc21,
  143. count(distinct if(subtractDays(date, 22)>=toDate(reg_time),null,user_id)) dc22,
  144. count(distinct if(subtractDays(date, 23)>=toDate(reg_time),null,user_id)) dc23,
  145. count(distinct if(subtractDays(date, 24)>=toDate(reg_time),null,user_id)) dc24,
  146. count(distinct if(subtractDays(date, 25)>=toDate(reg_time),null,user_id)) dc25,
  147. count(distinct if(subtractDays(date, 26)>=toDate(reg_time),null,user_id)) dc26,
  148. count(distinct if(subtractDays(date, 27)>=toDate(reg_time),null,user_id)) dc27,
  149. count(distinct if(subtractDays(date, 28)>=toDate(reg_time),null,user_id)) dc28,
  150. count(distinct if(subtractDays(date, 29)>=toDate(reg_time),null,user_id)) dc29,
  151. count(distinct if(subtractDays(date, 30)>=toDate(reg_time),null,user_id)) dc30
  152. from order where reg_time>'2019-03-18 00:00:00' group by toDate(formatDateTime(reg_time,'%Y-%m-%d')),channel"""
  153. data =ck.execute(sql)
  154. isql="insert into dw_channel_user_daily values " \
  155. "(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s," \
  156. "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s," \
  157. "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  158. db.dm.execute("truncate table dw_channel_user_daily")
  159. db.dm.executeMany(isql,data)
  160. def dw_channel_amount_daily():
  161. sql="""
  162. select toDate(formatDateTime(reg_time,'%Y-%m-%d')) as dt,
  163. channel as channel,
  164. sum(if(subtractDays(date, 1)>=toDate(reg_time),0,amount)) as da1,
  165. sum(if(subtractDays(date, 2)>=toDate(reg_time),0,amount)) as da2,
  166. sum(if(subtractDays(date, 3)>=toDate(reg_time),0,amount)) as da3,
  167. sum(if(subtractDays(date, 4)>=toDate(reg_time),0,amount)) as da4,
  168. sum(if(subtractDays(date, 5)>=toDate(reg_time),0,amount)) as da5,
  169. sum(if(subtractDays(date, 6)>=toDate(reg_time),0,amount)) as da6,
  170. sum(if(subtractDays(date, 7)>=toDate(reg_time),0,amount)) as da7,
  171. sum(if(subtractDays(date, 8)>=toDate(reg_time),0,amount)) as da8,
  172. sum(if(subtractDays(date, 9)>=toDate(reg_time),0,amount)) as da9,
  173. sum(if(subtractDays(date, 10)>=toDate(reg_time),0,amount)) as da10,
  174. sum(if(subtractDays(date, 11)>=toDate(reg_time),0,amount)) as da11,
  175. sum(if(subtractDays(date, 12)>=toDate(reg_time),0,amount)) as da12,
  176. sum(if(subtractDays(date, 13)>=toDate(reg_time),0,amount)) as da13,
  177. sum(if(subtractDays(date, 14)>=toDate(reg_time),0,amount)) as da14,
  178. sum(if(subtractDays(date, 15)>=toDate(reg_time),0,amount)) as da15,
  179. sum(if(subtractDays(date, 16)>=toDate(reg_time),0,amount)) as da16,
  180. sum(if(subtractDays(date, 17)>=toDate(reg_time),0,amount)) as da17,
  181. sum(if(subtractDays(date, 18)>=toDate(reg_time),0,amount)) as da18,
  182. sum(if(subtractDays(date, 19)>=toDate(reg_time),0,amount)) as da19,
  183. sum(if(subtractDays(date, 20)>=toDate(reg_time),0,amount)) as da20,
  184. sum(if(subtractDays(date, 21)>=toDate(reg_time),0,amount)) as da21,
  185. sum(if(subtractDays(date, 22)>=toDate(reg_time),0,amount)) as da22,
  186. sum(if(subtractDays(date, 23)>=toDate(reg_time),0,amount)) as da23,
  187. sum(if(subtractDays(date, 24)>=toDate(reg_time),0,amount)) as da24,
  188. sum(if(subtractDays(date, 25)>=toDate(reg_time),0,amount)) as da25,
  189. sum(if(subtractDays(date, 26)>=toDate(reg_time),0,amount)) as da26,
  190. sum(if(subtractDays(date, 27)>=toDate(reg_time),0,amount)) as da27,
  191. sum(if(subtractDays(date, 28)>=toDate(reg_time),0,amount)) as da28,
  192. sum(if(subtractDays(date, 29)>=toDate(reg_time),0,amount)) as da29,
  193. sum(if(subtractDays(date, 30)>=toDate(reg_time),0,amount)) as da30,
  194. sum(if(subtractDays(date, 31)>=toDate(reg_time),0,amount)) as da31,
  195. sum(if(subtractDays(date, 32)>=toDate(reg_time),0,amount)) as da32,
  196. sum(if(subtractDays(date, 33)>=toDate(reg_time),0,amount)) as da33,
  197. sum(if(subtractDays(date, 34)>=toDate(reg_time),0,amount)) as da34,
  198. sum(if(subtractDays(date, 35)>=toDate(reg_time),0,amount)) as da35,
  199. sum(if(subtractDays(date, 36)>=toDate(reg_time),0,amount)) as da36,
  200. sum(if(subtractDays(date, 37)>=toDate(reg_time),0,amount)) as da37,
  201. sum(if(subtractDays(date, 38)>=toDate(reg_time),0,amount)) as da38,
  202. sum(if(subtractDays(date, 39)>=toDate(reg_time),0,amount)) as da39,
  203. sum(if(subtractDays(date, 40)>=toDate(reg_time),0,amount)) as da40,
  204. sum(if(subtractDays(date, 41)>=toDate(reg_time),0,amount)) as da41,
  205. sum(if(subtractDays(date, 42)>=toDate(reg_time),0,amount)) as da42,
  206. sum(if(subtractDays(date, 43)>=toDate(reg_time),0,amount)) as da43,
  207. sum(if(subtractDays(date, 44)>=toDate(reg_time),0,amount)) as da44,
  208. sum(if(subtractDays(date, 45)>=toDate(reg_time),0,amount)) as da45,
  209. sum(if(subtractDays(date, 46)>=toDate(reg_time),0,amount)) as da46,
  210. sum(if(subtractDays(date, 47)>=toDate(reg_time),0,amount)) as da47,
  211. sum(if(subtractDays(date, 48)>=toDate(reg_time),0,amount)) as da48,
  212. sum(if(subtractDays(date, 49)>=toDate(reg_time),0,amount)) as da49,
  213. sum(if(subtractDays(date, 50)>=toDate(reg_time),0,amount)) as da50,
  214. sum(if(subtractDays(date, 51)>=toDate(reg_time),0,amount)) as da51,
  215. sum(if(subtractDays(date, 52)>=toDate(reg_time),0,amount)) as da52,
  216. sum(if(subtractDays(date, 53)>=toDate(reg_time),0,amount)) as da53,
  217. sum(if(subtractDays(date, 54)>=toDate(reg_time),0,amount)) as da54,
  218. sum(if(subtractDays(date, 55)>=toDate(reg_time),0,amount)) as da55,
  219. sum(if(subtractDays(date, 56)>=toDate(reg_time),0,amount)) as da56,
  220. sum(if(subtractDays(date, 57)>=toDate(reg_time),0,amount)) as da57,
  221. sum(if(subtractDays(date, 58)>=toDate(reg_time),0,amount)) as da58,
  222. sum(if(subtractDays(date, 59)>=toDate(reg_time),0,amount)) as da59,
  223. sum(if(subtractDays(date, 60)>=toDate(reg_time),0,amount)) as da60,
  224. sum(if(subtractDays(date, 90)>=toDate(reg_time),0,amount)) as dm3,
  225. sum(if(subtractDays(date, 120)>=toDate(reg_time),0,amount)) as dm4,
  226. sum(if(subtractDays(date, 150)>=toDate(reg_time),0,amount)) as dm5
  227. from order where reg_time>'2019-03-18 00:00:00' group by toDate(formatDateTime(reg_time,'%Y-%m-%d')),channel"""
  228. data=ck.execute(sql)
  229. isql="insert into dw_channel_amount_daily values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s," \
  230. "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
  231. db.dm.execute("truncate table dw_channel_amount_daily")
  232. db.dm.executeMany(isql,data)
  233. def dw_channel():
  234. print('run> dw_channel')
  235. dw_channel_daily()
  236. dw_channel_user_daily()
  237. dw_channel_amount_daily()
  238. if __name__ == '__main__':
  239. # dw_daily_channel()
  240. dw_channel()
  241. # dw_channel_amount_daily()
  242. # dw_channel_user_daily()