簡體   English   中英

Google BigQuery-Python客戶端-創建/管理作業

[英]Google BigQuery - python client - creating/managing jobs

我是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”的作業,還是必須分別分配一個新的作業名稱(例如,隨機的或基於日期時間的作業)?時間?

每次都必須刪除名為“ test-job”的作業嗎

您無法刪除作業。 Jobs collections存儲項目的完整工作歷史記錄,但僅保證過去六個月中創建的工作的可用性。 最好的辦法是請求自動刪除超過50天的工作,您應該聯系支持部門。

還是我每次都必須分配一個新的工作名稱(例如,一個隨機的或基於日期時間的名稱)?

是。 這是要走的路

作為附帶建議,我們通常這樣做:

import uuid
job_name = str(uuid.uuid4())

job = bigquery_client.run_async_query(job_name, query)

請注意,如果您運行同步查詢,這已經是自動的了。

另外,如果需要,您不必管理作業完整性的驗證(從0.27.00.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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM