Google BigQuery-python客户端-创建/管理作业
我对BigQuery世界还不熟悉。。。我使用的是python google.cloud包,我只需要在BigQuery表上运行python查询并打印结果。这是创建查询作业的查询函数的一部分Google BigQuery-python客户端-创建/管理作业,python,google-bigquery,google-cloud-platform,Python,Google Bigquery,Google Cloud Platform,我对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(
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”的作业,还是每次都必须分配一个新作业名称(例如,随机名称或基于日期时间的名称)
每次都必须删除名为“测试作业”的作业吗
您不能删除作业。Jobs collection存储项目的完整作业历史记录,但仅保证在过去六个月内创建的作业可用。您最多只能请求自动删除超过50天的作业,您应该与支持部门联系
或者每次我都必须分配一个新的工作名称(例如,随机名称或基于日期时间的名称)
对。这就是路
每次都必须删除名为“测试作业”的作业吗
您不能删除作业。Jobs collection存储项目的完整作业历史记录,但仅保证在过去六个月内创建的作业可用。您最多只能请求自动删除超过50天的作业,您应该与支持部门联系
或者每次我都必须分配一个新的工作名称(例如,随机名称或基于日期时间的名称)
对。这是一种方法作为附带建议,我们通常会这样做:
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())
作为附带建议,我们通常会这样做:
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())