透過程式執行工作

如何使用 REST API 或用戶端程式庫,透過程式執行 BigQuery 工作:

  1. 使用由用戶端程式碼產生的唯一工作 ID 來呼叫 jobs.insert 方法
  2. 定期要求工作資源並檢查狀態屬性,以掌握工作完成時間
  3. 確認工作是否順利完成

必要權限

如要執行 BigQuery 工作,請將 bigquery.jobs.create 權限授予提交工作的使用者或服務帳戶,或將擁有 bigquery.jobs.create 權限的專案層級預先定義 IAM 角色授予您的帳戶。以下是擁有 bigquery.jobs.create 權限的預先定義身分與存取權管理角色:

如要進一步瞭解 BigQuery 中的身分與存取權管理角色和權限,請參閱存取權控管

執行工作

如何透過程式執行工作:

  1. 呼叫 jobs.insert 方法來啟動工作。呼叫 jobs.insert 方法時,請加入包含下列項目的工作資源表示法:

    • jobReference 區段的 location 屬性中指定您的位置。
    • 由用戶端程式碼所產生的工作 ID。如果您省略工作 ID,伺服器會為您產生。不過,建議您在用戶端產生工作 ID,以可靠地重試 jobs.insert 呼叫。

      例如:

      {
        "jobReference": {
          "projectId": "my_project",
          "jobId": "job_123",
          “location”: “asia-northeast1”
        },
        "configuration":
        {
          // ..
        },
      }
      

  2. 在工作資源的 configuration 區段中,加入會指定工作類型 (載入查詢擷取複製) 的子屬性。

  3. 呼叫 jobs.insert 方法後,使用工作 ID 和位置來呼叫 jobs.get 以檢查工作狀態,然後檢查 status.state 值以瞭解工作狀態。status.stateDONE 時表示工作已停止執行,不過 DONE 狀態並不代表工作順利完成,只代表工作已停止執行。

  4. 確認工作是否成功。如果工作有 errorResult 屬性,即表示工作失敗。status.errorResult 屬性所含的資訊會說明工作失敗原因。未出現 status.errorResult 表示工作成功完成,但可能有一些不嚴重的錯誤,例如匯入幾個資料列時發生問題。不嚴重的錯誤會在工作的 status.errors 清單中傳回。

產生工作 ID

最佳做法是使用用戶端程式碼產生工作 ID,並於呼叫 jobs.insert 時傳送該工作 ID。如果呼叫 jobs.insert 時未指定工作 ID,BigQuery 會為您建立工作 ID,但您在呼叫傳回結果之前無法查看工作狀態。此外,您可能難以判斷工作是否順利插入。如果您使用自行產生的工作 ID,則可隨時查看工作狀態,並能針對同一個工作 ID 進行重試,確保工作確實起始一次。

工作 ID 是一個字串,可包含字母 (a-z、A-Z)、數字 (0-9)、底線 (_) 或破折號 (-),長度上限為 1,024 個字元。專案中的各工作 ID 不可重複。

產生不重複工作 ID 的常見做法是使用使用者可理解的前置字串和後置字串,後者由時間戳記或 GUID 組成。例如:daily_import_job_1447971251

Python UUID 模組提供了可產生 GUID 的方法範例。如需使用 Python uuid4() 方法搭配 jobs.insert 的範例,請參閱從 Cloud Storage 載入資料

相關資源

  • 如需啟動及輪詢查詢工作的程式碼範例,請參閱執行查詢一文。
  • 如要進一步瞭解如何建立工作資源表示法,請參閱 API 參考資料中的工作總覽頁面
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁