Google 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(

我对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”的作业,还是每次都必须分配一个新作业名称(例如,随机名称或基于日期时间的名称)

每次都必须删除名为“测试作业”的作业吗

您不能删除作业。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())