我是BigQuery世界的新手...我正在使用python google.cloud软件包,我只需要在BigQuery表上运行Python查询并打印结果。这是创建查询作业的查询函数的一部分。
function test():
query = "SELECT * FROM " + dataset_name + '.' + table_name
job = bigquery_client.run_async_query('test-job', query)
job.begin()
retry_count = 100
while retry_count > 0 and job.state != 'DONE':
retry_count -= 1
sleep(10)
job.reload() # API call
print(job.state)
print(job.ended)
如果我多次运行test()函数,我会收到错误:
google.api.core.exceptions.Conflict: 409 POST https://www.googleapis.com/bigquery/v2/projects/myprocject/jobs:
Already Exists: Job myprocject:test-job
由于我必须多次运行test()函数,我是否必须删除名为' test-job'的作业。我每次还是必须每次都分配一个新的工作名称(例如一个随机的或基于日期时间)?
答案 0 :(得分:3)
我是否必须删除名为' test-job'的作业?每次
您无法删除作业。 Jobs集合存储您项目的完整工作历史记录,但仅保证在过去六个月内创建的作业的可用性。您可以做的最好的事情是请求自动删除超过50天的作业,您应该联系支持人员。
或每次都必须分配一个新的职位名称(例如一个随机的或基于日期时间)?
是。这是要走的路
答案 1 :(得分:3)
作为附带建议,我们通常会这样做:
import uuid
job_name = str(uuid.uuid4())
job = bigquery_client.run_async_query(job_name, query)
请注意,如果您运行同步查询,这已经是自动的。
此外,您不必管理作业完整性验证(从版本0.27.0
开始),如果您愿意,可以像以下一样使用它:
job = bigquery_client.run_async_query(job_name, query)
job_result = job.result()
query_result = job_result.query_results()
data = list(query_result.fetch_data())