【问题标题】:Bigquery in Python: How to put the results of a query in a table?Python 中的 Bigquery:如何将查询结果放入表中?
【发布时间】: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 documentationdestinationTablecreateDispositionwriteDisposition 中看到的内容,应该确保我的查询结果最终出现在所选的 BigQuery 表中。

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

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

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


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

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

【问题讨论】:

    标签: python python-2.7 google-bigquery


    【解决方案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",
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      相关资源
      最近更新 更多