Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在谷歌云虚拟机上提高网络效率_Python_Mysql_Google Bigquery - Fatal编程技术网

Python 如何在谷歌云虚拟机上提高网络效率

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

大家好

我目前正在基于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 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转换为兼容的,如果我错了,请更正

    我有几点建议:

  • 您可以使用它,因为它是一个ETL产品,并且针对性能进行了优化
  • 根据您的总体用例,如果您正在使用,您可以使用
  • 同样,根据您的用例,您可以使用MySQL转储并将数据上传到GCS或直接上传到BigQuery

  • 我知道您正在将datetime64转换为兼容的,如果我错了,请纠正我

    我有几点建议:

  • 您可以使用它,因为它是一个ETL产品,并且针对性能进行了优化
  • 根据您的总体用例,如果您正在使用,您可以使用
  • 同样,根据您的用例,您可以使用MySQL转储并将数据上传到GCS或直接上传到BigQuery