BigQuery Python 409 已经存在:表格
Posted
技术标签:
【中文标题】BigQuery Python 409 已经存在:表格【英文标题】:BigQuery Python 409 Already Exists: Table 【发布时间】:2020-03-24 18:14:05 【问题描述】:我正在编写一个将查询结果写入 BQ 表的 python 脚本。第一次运行脚本后,它总是出错,并出现以下错误:google.api_core.exceptions.Conflict: 409 Already Exists: Table project-id.dataset-id
。我不明白为什么每次我运行脚本时它都试图创建一个表。我是否指定了任何具体参数?
这是来自谷歌的文档。我以此为例,并认为当前表已经创建。我在哪里阻止 api 创建同一个表?
from google.cloud import bigquery
# TODO(developer): Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set table_id to the ID of the destination table.
table_id = "your-project.your_dataset.your_table_name"
job_config = bigquery.QueryJobConfig(destination=table_id)
sql = """
SELECT corpus
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus;
"""
# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config) # Make an API request.
query_job.result() # Wait for the job to complete.
print("Query results loaded to the table ".format(table_id))
【问题讨论】:
【参考方案1】:如果您检查类QueryJobConfig,您将看到有一个名为write_dispotition
的参数。正如您在 REST API 参考 here 中看到的,此参数可以设置为 3 个不同的选项:
WRITE_TRUNCATE
:如果表已经存在,BigQuery 会覆盖表数据并使用查询结果中的架构。
WRITE_APPEND
:如果表已经存在,BigQuery 会将数据附加到表中。
WRITE_EMPTY
:如果表已经存在并包含数据,则作业结果中会返回“重复”错误。
所以,在job_config
定义之后添加这一行就可以了:
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
【讨论】:
【参考方案2】:查看此 BigQuery 客户端文档 here 查看 exists_ok 参数
【讨论】:
以上是关于BigQuery Python 409 已经存在:表格的主要内容,如果未能解决你的问题,请参考以下文章
已经存在 (HTTP 409) 错误 Big Query/Google Analytics
在插入 BigQuery 表之前检查数据是不是已经存在(使用 Python)
Bigquery:如果不存在则创建表并使用 Python 和 Apache AirFlow 加载数据