首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Google上提高网络效率

如何在Google上提高网络效率
EN

Stack Overflow用户
提问于 2020-06-05 15:32:17
回答 1查看 60关注 0票数 0

我目前正在基于Google的VM (WindowsServer2019-4vCPU)上构建一个ETL,以执行以下过程:

  1. 从MySQL副本db中提取一些表
  2. 调整数据类型以适应Google BigQuery的一致性
  3. 使用Python的pandas_gbq库将数据上载到

为了说明,下面是实际代码的一些部分(Python,迭代器在一个表上):

代码语言:javascript
复制
while True:

    # GENERATES AN MYSQL QUERY BASED ON THE COLUMNS AND THEIR
    # RESPECTIVE TYPES, USING A DICTIONARY TO CONVERT
    # MYSQL D_TYPES TO PYTHON D_TYPES

    sql_query = gen_query(cols_dict=col_types, table=table,
                          pr_key=p_key, offset=offset)

    cursor = cnx.cursor(buffered=True)
    cursor.execute(sql_query)

    if cursor.rowcount == 0:
        break

    num_fields = len(cursor.description)
    field_names = [i[0] for i in cursor.description]

    records = cursor.fetchall()

    df = pd.DataFrame(records, columns=columns)
    offset += len(df.index)

    print('Ok, df structured')

    # CHECK FOR DATETIME COLUMNS

    col_parse_date = []

    for column in columns:
        if col_types[column] == 'datetime64':
            try:
                df[column] = df[column].astype(col_types[column])
                col_parse_date.append(column)

            except:
                df[column] = df[column].astype(str)
                for i in to_bgq:
                    if i['name'] == column:
                        i['type'] = 'STRING'

    # UPLOAD DATAFRAME TO GOOGLE BIGQUERY

    df.to_csv('carga_etl.csv', float_format='%.2f',
              index=False, sep='|')
    print('Ok, csv recorded')
    df = ''
    df = pd.read_csv('carga_etl.csv', sep='|')
    print('Ok, csv read')

    df.to_gbq(destination_table='tr.{}'.format(table),
              project_id='iugu-bi', if_exists='append', table_schema=to_bgq)

逻辑基于一个查询生成器;它获取MySQL表架构,并将其调整为BigQuery格式(例如,Blob to STRING,int(n) to INTEGER等),查询全部结果(每页用偏移量分页,500 K行),并将其保存在数据中,然后上传到我的新数据库中。

嗯,ETL完成了它的工作,我目前正在将我的表迁移到云中。然而,由于网络流量不足,我担心我正在使用我的资源。下面是我的VM报告部分中的网络报告(字节/秒):

VM网络Bytes报告

根据该报告,我的输入/输出网络数据峰值为2/3 MBs,这与我使用机器从浏览器下载东西时平均可用的1GB相比非常低。

我的意思是,我在这里做错了什么?有什么方法可以提高我的MySQL查询/获取速度和BigQuery的上传速度吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-16 15:36:04

我知道您正在将datetime64转换为兼容的BigQuery数据类型,如果我错了,请纠正我。

我有几项建议:

  1. 您可以使用数据流,因为它是ETL产品,而且性能优化。
  2. 根据您的整个用例以及如果您正在使用CloudSQL/MySQL,您可以使用BigQuery联合查询
  3. 同样,根据您的用例,您可以使用MySQL转储并将数据上传到GCS中,或者直接上传到BigQuery。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62218975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档