bigquery python client.run\u async\u查询给出错误:409已存在

bigquery python client.run\u async\u查询给出错误:409已存在,python,google-api,google-bigquery,Python,Google Api,Google Bigquery,我正在编写一个python脚本,它运行特定的SELECT查询异步。在第一次运行脚本后,它始终会在运行之后出错,并出现以下错误: google.cloud.exceptions.Conflict:409已存在:作业 ps bigdata:vci临时销售查询作业(POST) ) 以下是一段代码片段: from google.cloud import bigquery google_auth_json_file = './myprojectauth.json' client = bigquery.C

我正在编写一个python脚本,它运行特定的SELECT查询异步。在第一次运行脚本后,它始终会在运行之后出错,并出现以下错误:

google.cloud.exceptions.Conflict:409已存在:作业 ps bigdata:vci临时销售查询作业(POST) )

以下是一段代码片段:

from google.cloud import bigquery

google_auth_json_file = './myprojectauth.json'
client = bigquery.Client.from_service_account_json( google_auth_json_file )

project = 'myProject'
dataset = 'myDataset'
ds = client.dataset(dataset)
query = "SELECT X,y,z FROM mytable;"

#--- Clear/create temp table
temp_table_name = 'myTempTable'
temp_tbl = myCreateTempTableFunction( client, project, dataset, temp_table_name )

#--- Create an async query job
job_name = 'vci-temp-sales-query-job'
job = client.run_async_query(job_name, query)
job.destination = temp_tbl
job.write_disposition = 'WRITE_TRUNCATE'
job.begin()

此脚本在“job.begin()”行失败。我不知道命名作业在会话结束或作业执行之后仍然存在。如何检查命名作业是否已存在,如果已存在,如何删除现有命名作业以创建新作业?还是每次运行异步作业时都必须创建随机或唯一的作业名称?

您需要使用唯一的作业ID,因为这是操作的元数据所关联的。参考,您的代码可以是这样的:

job_name = 'vci-temp-sales-query-job_{}'.format(uuid.uuid4())

您可以使用
job.exists()
检查作业是否存在。如果它存在,则可以使用
job.cancel()
取消它。在取消作业之前,您可能需要检查作业。结束了。我刚刚在某个示例代码片段中找到了答案。非常感谢。传递给客户端的作业ID。run\u async\u query()方法必须是唯一的。因此,添加“导入uuid”和“uuid.uuid4()”以获取唯一ID是最好的选择。BigQuery设计为每次获取唯一作业ID是否有特定原因?您可以使用此ID与作业交互或检索有关作业的信息。如果有具有相同ID的活动作业,如OP的问题中所述,那么就没有办法获得工作的结果或取消工作。