博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python获取mysql天数据,聚合存入mongodb(我的第一个用python写的程序)
阅读量:7223 次
发布时间:2019-06-29

本文共 3090 字,大约阅读时间需要 10 分钟。

hot3.png

功能:将mysql中保存的各个产品每天的dau数据,计算聚合到mongodb中,因为应用数据直接保存到mongodb中。离线调用python脚本,将每天的数据聚合写到mongodb的周表中。mysql数据都是模拟的,通过程序随机数据写入。

1.mysql数据库:

plat_dau_detail

表结构说明:天dau

属性

类型

说明

prod_id

varchar(20)

产品标识

d_date

int

时间戳

dau

int

dau

2.mongodb周数据库设计:

plat_dau_week

表结构说明:周dau

属性

类型

说明

prod_id

string

产品标识

d_date

int

时间戳

d_quarter

int

季度(1,2,3,4

d_month

int

d_week

int

一个月的第n

d_last

int

1代表一个月的最后一周

dau

int

dau

 主程序dauMgt.py:

#!/usr/bin/env python# -*- coding:utf-8 -*-'management dau data from mysql'import MySQLdbimport pymongo import stringfrom datetime import datetime,date,timeimport dateManageDB_HOST = '127.0.0.1'DB_USER = 'root'DB_PASS = ''DB_NAME = 'platdau'MONGO_HOST = '127.0.0.1'MONGO_PORT = 27017myConn = MySQLdb.connect(host=DB_HOST,user=DB_USER,passwd=DB_PASS,db=DB_NAME,charset="utf8")cursor = myConn.cursor()#获取dau详细数据# sql = 'select * from plat_dau_detail'sql = 'SELECT sum( dau ) dau , prod_id, from_unixtime( d_date ) d_date \FROM `plat_dau_detail`\GROUP BY weekofyear( from_unixtime( d_date ) ) , prod_id'resultCnt = cursor.execute(sql)platDauData = cursor.fetchall()dataList = []for item in platDauData:    prodId = item[1]    d_date = item[2]    d_date = str(d_date.date())    dau = item[0]    dict1 = {'prodId':prodId,'d_date':str(d_date),'dau':dau}    dataList.append(dict1)    # print dataListmongoCon = pymongo.Connection(MONGO_HOST,MONGO_PORT)db = mongoCon.daufor item in dataList:    d_date = item['d_date']    prodId = item['prodId']    dau = item['dau']    dateInfo = dateManage.getDateInfo(d_date)    db.plat_dau_week.insert({'prod_id':prodId,'d_date':dateInfo['timestamp'],'d_quarter':dateInfo['quarter'],'d_month':dateInfo['month'],'d_week':dateInfo['week'],'d_last':dateInfo['last'],'dau':int(dau)})

时间处理模块dateManage.py:

#!/usr/bin/env python# -*- coding:utf-8 -*-"""date management"""from datetime import datetime,date,timedeltaimport mathimport time#取得一个时间的详细信息def getDateInfo(param):    param1 = param + ' 00:00:00'    d = datetime.strptime(param1,"%Y-%m-%d %H:%M:%S").date()    weekday = d.isoweekday()    dayDif = weekday - 1    monday = d - timedelta(days=dayDif)    year = monday.year    month = monday.month    quarter = int(math.ceil(float(month/3.0)))    timestamp = int(time.mktime(time.strptime(str(monday), "%Y-%m-%d")))    month1 = date(year,month,1)    monthMonday1 = month1.isoweekday()    tempMonth = month1.month    monthMonday = []      while tempMonth <= month :          monthMonday1 = month1.isoweekday()          if monthMonday1 != 1:              dayDiff = 7-monthMonday1 + 1              month1 = month1 + timedelta(days=dayDiff)          curDate = str(month1)          monthMonday.append(curDate)        month1 = month1 + timedelta(days=7)        tempMonth = month1.month    weekNum = monthMonday.index(str(monday)) + 1    lastNum = 0    if len(monthMonday) == weekNum :        lastNum = 1        result = {'timestamp':timestamp,'quarter':quarter,'month':month,'week':weekNum,'last':lastNum}    return result# a = '2014-10-01';# a = getDateInfo(a)# print a

运行结果:

144051_ikZO_220193.jpg

PS:由于第一次练手,不足之处难免,记录一下。以后回头看看

转载于:https://my.oschina.net/forMemory/blog/341056

你可能感兴趣的文章
完整复制/转移数据库
查看>>
unity客户端基本框架(转载)
查看>>
hadoop-2.7.0集群部署
查看>>
JDBC编程常用接口
查看>>
学习oracle中的PCTFREE和PCTUSED
查看>>
操作系统简介
查看>>
5大知名的BI工具对比介绍
查看>>
KindEditor
查看>>
Spring EL Operators example
查看>>
mysql索引
查看>>
sql server 笔记
查看>>
jmeter--多个路径随机进行压力测试的方法
查看>>
Css 八卦
查看>>
typedef和#define的用法与区别
查看>>
ABP 框架webapi设置跨域
查看>>
Bzoj 1532: [POI2005]Kos-Dicing 二分,网络流
查看>>
linux监控程序
查看>>
jQuery.noConflict()的作用
查看>>
spring整合redis之hello
查看>>
Linux下解决中文乱码问题
查看>>