Python 中的 Bigquery:如何将查询结果放入表中?

Posted

技术标签:

【中文标题】Python 中的 Bigquery:如何将查询结果放入表中?【英文标题】:Bigquery in Python: How to put the results of a query in a table? 【发布时间】:2015-07-23 14:32:07 【问题描述】:

我最近开始在 Python2.7 中使用 BigQuery,但在将查询结果放入表中时遇到了问题。

我的查询:

query_data = 
    'configuration': 
        'query': 
            'query': QUERY
            'destinationTable': 
                'projectId': project_id,
                'datasetId': dataset_id,
                'tableId': 'table_id'
            ,
            'createDisposition': 'CREATE_IF_NEEDED',
            'writeDisposition': 'WRITE_TRUNCATE',
            'allowLargeResults': True
        ,
    


query_request.query(projectId=PROJECT_NUMBER,body=query_data).execute()

根据我在Google BigQuery documentation、destinationTablecreateDispositionwriteDisposition 中看到的内容,应该确保我的查询结果最终出现在所选的 BigQuery 表中。

但它没有,我得到这个错误:

HttpError:https://www.googleapis.com/bigquery/v2/projects/project_id/queries?alt=json 返回“缺少必填参数”>

有人知道如何修复这个错误吗?


PS:当我直接在 Google BigQuery 网站上使用“QUERY”时,它可以正常工作,所以我非常怀疑问题是否存在。

PPS:感谢@Pentium10,我能够解决这个问题。

【问题讨论】:

【参考方案1】:

您可以通过在查询中指定目标表来执行此操作。您需要使用 Jobs.insert api 而不是 Jobs.query 调用,并且您应该指定 writeDisposition=WRITE_APPEND 并填写目标表。

如果您使用的是原始 api,下面是配置的样子。如果您使用的是 Python,python 客户端应该为这些相同的字段提供访问器:

"configuration": 
  "query": 
    "query": "select count(*) from foo.bar",
    "destinationTable": 
      "projectId": "my_project",
      "datasetId": "my_dataset",
      "tableId": "my_table"
    ,
    "createDisposition": "CREATE_IF_NEEDED",
    "writeDisposition": "WRITE_APPEND",
  

【讨论】:

以上是关于Python 中的 Bigquery:如何将查询结果放入表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有授权令牌的情况下从 python 脚本查询 google-bigquery 中的私有表?

如何使用 BigQuery Python API 附加查询结果

如何正确迭代所有 BigQuery 结果行?

如何将查询结果插入 BigQuery 前缀表

如何使用基于自定义参数的表名中类似于 python 的字符串格式查询谷歌数据工作室中的 bigquery 表?

无法在 python 中对 bigquery 运行标准 SQL 查询