在向BigQuery提交新作业(job)时,如果发现已经存在以相同名称、相同配置(例如使用相同的查询语句)的作业,就会出现“BigQuery job already exists”的错误。解决方法包括:
from google.cloud import bigquery
client = bigquery.Client()
# 为作业指定一个独一无二的名称
job_config = bigquery.QueryJobConfig(
job_id="my-query-job-123",
use_legacy_sql=False,
)
# 提交作业
query = """
SELECT COUNT(*)
FROM mydataset.mytable
"""
query_job = client.query(query, location="US", job_config=job_config)
# 等待作业完成
query_job.result()
client.list_jobs()
方法获取当前项目中的所有作业,并判断是否已存在相同名称、相同查询等的作业。例如:from google.cloud import bigquery
client = bigquery.Client()
# 获取所有作业
jobs = client.list_jobs()
# 检查是否存在相同名称、相同查询的作业
for job in jobs:
if job.job_id == "my-query-job-123" and job.state == "DONE":
if job.query and job.query.query == query:
print("作业已存在!")
注意,这种方法只能检查已完成的作业,如果当前有正在运行的作业,则无法判断是否已有相同作业存在。