Python 如何在谷歌云虚拟机上提高网络效率
大家好 我目前正在基于Google云的VM(Windows Server 2019-4 vCPU)上构建一个ETL,以执行以下过程:Python 如何在谷歌云虚拟机上提高网络效率,python,mysql,google-bigquery,Python,Mysql,Google Bigquery,大家好 我目前正在基于Google云的VM(Windows Server 2019-4 vCPU)上构建一个ETL,以执行以下过程: 从MySQL副本数据库中提取一些表 调整Google BigQuery一致性的数据类型 使用Python的pandas\u gbq库将数据上载到BigQuery 下面是实际代码的一些部分(Python、一个表上的迭代器): 为True时: #基于列及其属性生成MYSQL查询 #各自的类型,使用字典进行转换 #MYSQL D_类型到PYTHON D_类型 sql\u
为True时:
#基于列及其属性生成MYSQL查询
#各自的类型,使用字典进行转换
#MYSQL D_类型到PYTHON D_类型
sql\u query=gen\u query(cols\u dict=col\u类型,table=table,
pr_键=p_键,偏移量=偏移量)
cursor=cnx.cursor(buffered=True)
cursor.execute(sql\U查询)
如果cursor.rowcount==0:
打破
num\u fields=len(cursor.description)
字段_name=[i[0]表示游标中的i.description]
records=cursor.fetchall()
df=pd.DataFrame(记录,列=列)
偏移量+=长度(测向索引)
打印('确定,df结构化')
#检查日期时间列
col_parse_date=[]
对于列中的列:
如果列类型[列]=“datetime64”:
尝试:
df[column]=df[column].astype(列类型[column])
col_parse_date.append(列)
除:
df[column]=df[column].astype(str)
对于i in to_bgq:
如果i['name']==列:
i['type']='STRING'
#将DATAFRAME上载到GOOGLE BIGQUERY
df.to_csv('carga_etl.csv',float_格式='%.2f',
索引=假,sep=“|”)
打印('确定,csv记录')
df=''
df=pd.read_csv('carga_etl.csv',sep='|')
打印('确定,csv读取')
df.to_gbq(destination_table='tr.{}'。格式(table),
项目id='iugu-bi',如果存在='append',表\U schema=to\U bgq)
该逻辑基于查询生成器;它获取MySQL表模式,并将其调整为BigQuery格式(例如Blob到STRING、int(n)到INTEGER等),查询完整结果(使用偏移量分页,每页500K行),然后将其保存在数据帧中,然后将其上载到我的新数据库
嗯,ETL完成了它的工作,我目前正在将我的表迁移到云。然而,我担心由于网络流量的差距,我在利用我的资源。以下是我的虚拟机报告部分的网络报告(字节/秒):
根据该报告,我的输入/输出网络数据峰值为2/3 MBs,与avarage 1Gb相比,这是非常低的,例如,如果我使用该机器从浏览器下载某些内容
我的意思是,我做错了什么?有没有办法提高我的MySQL查询/获取速度和我上传到BigQuery的速度
请随时询问有关代码的更多详细信息,因为这是我在这里的第一篇帖子,我还不完全熟悉提交问题的标准协议:)
谢谢你的帮助 我知道您正在将datetime64转换为兼容的,如果我错了,请更正 我有几点建议:
我知道您正在将datetime64转换为兼容的,如果我错了,请纠正我 我有几点建议: