【问题标题】:Bigquery insert - multiple rows at a time from python dictBigquery insert - 一次来自python dict的多行
【发布时间】:2015-12-18 18:33:51
【问题描述】:

如何将包含 5k 行的 python 字典插入 bigquery?我使用了https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/streaming.py 的文档,但我一次只能插入 1 行。

如何一次插入字典中的所有 5k 行?如果我使用 pandas 数据框插入,我会收到错误 NotImplementedError: Google's libraries do not support Python 3 yet

这是我的代码:

for rows in dict1:
    insert_all_data = {
                       'rows': [{'json' : rows}]
                       }
    bigquery_service.tabledata().insertAll(projectId='na-sem',datasetId='Rules',tableId='my_table',body=insert_all_data).execute(num_retries=2)

Pandas 数据框法

bigquery_results_df.to_gbq('samples.test', project_id='sample', chunksize=10000, verbose=True, reauth=False)

返回错误:

NotImplementedError:Google 的库还不支持 Python 3。

【问题讨论】:

  • 您应该能够将多行流式传输到 BigQuery,但一次调用 5k 可能太多了。关于 Python 3 错误 - 您是否尝试过使用 Python 2.7?

标签: google-bigquery


【解决方案1】:

在我们面向非技术人员的自助服务环境中,我们主要通过以下两种方式之一解决此问题。当然 - 它对你的情况有多相关 - 取决于:)

  1. 如果字典是静态的并且提前可用,我们会将其上传到存储,然后加载到 bigquery - 这是经典场景

  2. 如果字典是动态的并且实际上是在应用程序中动态创建的(自助服务环境) - 我们正在构建“假”查询,其中包含尽可能多的带有字典数据的 select 语句,而不是执行查询作业选择目标表

所以像下面这样简化:

SELECT id, itemA, itemB FROM
  (SELECT 1 as id, 'a1' as itemA, 'b1' as itemB),
  (SELECT 2 as id, 'a2' as itemA, 'b2' as itemB),
  (SELECT 3 as id, 'a3' as itemA, 'b3' as itemB)

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2018-10-07
    • 2012-06-24
    • 2017-04-24
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多