rds_order_ck.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """把rds的订单数据同步到clickhouse
  2. @auth ck
  3. @date 20201127
  4. """
  5. from model.DataBaseUtils import MysqlUtils,CkUtils
  6. from model.DateUtils import DateUtils
  7. from datetime import datetime
  8. from model.log import logger
  9. log=logger()
  10. db = MysqlUtils()
  11. ck = CkUtils()
  12. dt = DateUtils()
  13. import sys
  14. from model.DingTalkUtils import DingTalkUtils
  15. def run(mydt):
  16. log.debug("run [{}] data".format(mydt))
  17. col = "date,stage,platform,channel,channel_id,user_id,order_time,reg_time,amount,from_novel,order_id"
  18. sql ="select * from `order` where date=UNIX_TIMESTAMP('{}') ".format(mydt)
  19. data = db.quchen_text.getData(sql)
  20. # 掌中云时间格式转换
  21. data1 = []
  22. for x in data:
  23. li = list(x)
  24. li[6] = li[6].replace('T',' ').replace('+08:00','').replace('/','-')
  25. if li[6] == None or li[6] == '':
  26. li[6] = '0000-00-00 00:00:00'
  27. if li[7]==None or li[7]=='':
  28. li[7]='0000-00-00 00:00:00'
  29. else:
  30. li[7] = li[7].replace('T',' ').replace('+08:00','').replace('/','-')
  31. try:
  32. li[6]=str(datetime.strptime(li[6],'%Y-%m-%d %H:%M'))
  33. li[7]=str(datetime.strptime(li[7],'%Y-%m-%d %H:%M'))
  34. # li[7]=str(datetime.strptime(li[7],'%Y/%m/%d %H:%M:%S'))
  35. except:
  36. pass
  37. # print("======================")
  38. # try:
  39. # li[6] = str(datetime.strptime(li[6][:17], '%Y-%m-%d %H:%M'))
  40. # li[7] = str(datetime.strptime(li[7][:17], '%Y/%m/%d %H:%M'))
  41. # except:
  42. # pass
  43. # li[6]='2020-11-01 00:00:00'
  44. # li[7]='2020-11-01 00:00:00'
  45. li[6] =li[6][:19]
  46. li[7] =li[7][:19]
  47. li[9] = '' if li[9] is None else li[9]
  48. li[5] = '' if li[5] is None else li[5]
  49. li[1] = '' if li[1] is None else li[1]
  50. data1.append(tuple(li))
  51. # 删除分区
  52. ck.execute("alter table order drop partition '{}' ".format(mydt))
  53. ck.insertMany("order", col, tuple(data1))
  54. if __name__ == '__main__':
  55. # dt_li =dt.getDateLists('2020-11-25','2020-11-27')
  56. # for i in dt_li:
  57. # run(i)
  58. if sys.argv.__len__()>1:
  59. run(dt.get_n_days(-1))
  60. today=dt.get_n_days()
  61. try:
  62. run(today)
  63. except Exception as e:
  64. DingTalkUtils.send("订单同步到ck出错:"+e,'18860455786,')