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、destinationTable
、createDisposition
和writeDisposition
中看到的内容,应该确保我的查询结果最终出现在所选的 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 附加查询结果