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 加载数据

无法将数据插入现有 BigQuery 表?

[LeetCode&Python] Problem 409. Longest Palindrome

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