管理工作

提交 BigQuery 工作之後,您可以查看工作資料列出工作取消工作重新執行工作

工作提交後可能會有下列三種狀態:

  • PENDING:已排定
  • RUNNING
  • DONE:回報 SUCCESSFAILURE (如果工作已完成,但發生錯誤)

檢視工作資料

您可以使用 GCP 主控台、傳統網頁版 UI、CLI 和 API 來檢視工作資料和中繼資料。這項資料包括工作類型、工作狀態、執行該工作的使用者等詳細資料。

所需權限

您至少要具備 bigquery.jobs.get 權限,才能取得工作資料和中繼資料。以下是具有 bigquery.jobs.get 權限的預先定義 Cloud IAM 角色:

  • bigquery.admin

如果您授予帳戶 bigquery.admin 角色,則該使用者將可查看專案中的所有工作資料 (不管這些工作是由哪些人提交的)。

以下角色具備自建工作的 bigquery.jobs.get 權限。這些使用者只能檢視自己提交的工作資料。

  • bigquery.user
  • bigquery.jobUser

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱存取權控管

檢視工作相關資訊

如要檢視工作相關資訊:

主控台

  1. 在導覽窗格中,按一下 [Job history] (工作記錄) 或按一下 [Query history] (查詢記錄),查看有關查詢工作的資訊。

  2. 按一下 [Personal history] (個人記錄),以查看有關工作的詳細資料。按一下 [Project history] (專案記錄),則可查看在專案中執行的所有工作的詳細資料。

傳統版 UI

  1. 在導覽窗格中,按一下 [Job History] (工作記錄) 或按一下 [Query history] (查詢記錄),查看有關查詢工作的資訊。

  2. 在「Recent Jobs」(近期工作) 區段中,按一下工作名稱即可檢視詳細資料。如要查看查詢工作的詳細資料,請按一下 [Query history] (查詢記錄) 分頁標籤。

CLI

發出 bq show 指令並搭配使用 -j 標記和 job_id 參數。

當您提供工作 ID 時,可以使用完整 ID 或簡短格式。舉例來說,BigQuery 網頁版 UI 列出的工作 ID 是完整 ID,其中包含專案 ID 和位置:

my-project-1234:US.bquijob_123x456_123y123z123c

在指令列工作中列出的工作 ID 採用簡短格式,其中不含專案 ID 和位置:

bquijob_123x456_123y123z123c

如要指定工作位置,請提供 --location 標記,並將值設為您的位置。如果您使用完整工作 ID,則不一定要提供標記。如果您加入 --location 標記且使用的是完整工作 ID,則系統會忽略 --location 標記。

以下指令要求工作的相關資訊:

bq --location=location show -j job_id

其中:

  • 「location」是選用項目,指的是執行工作的位置。舉例來說,如果您是在東京地區使用 BigQuery,請將標記的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • 「job_id」是工作 ID。

範例:

下列指令可取得在 myproject 中執行的工作 (US.bquijob_123x456_123y123z123c) 摘要資訊。

bq show -j myproject:US.bquijob_123x456_123y123z123c

輸出內容如下:

 Job Type    State      Start Time      Duration      User Email       Bytes Processed   Bytes Billed   Billing Tier   Labels
 ---------- --------- ----------------- ---------- ------------------- ----------------- -------------- -------------- --------
 extract    SUCCESS   06 Jul 11:32:10   0:01:41    user@example.com

如要查看完整的工作詳細資料,請輸入:

bq show --format=prettyjson -j myproject:US.bquijob_123x456_789y123z456c

輸出內容如下:

{
  "configuration": {
    "extract": {
      "compression": "NONE",
      "destinationUri": "[URI removed]",
      "destinationUris": [
        "[URI removed]"
      ],
      "sourceTable": {
        "datasetId": "github_repos",
        "projectId": "bigquery-public-data",
        "tableId": "commits"
      }
    }
  },
  "etag": "\"[etag removed]\"",
  "id": "myproject:bquijob_123x456_789y123z456c",
  "jobReference": {
    "jobId": "bquijob_123x456_789y123z456c",
    "projectId": "[Project ID removed]"
  },
  "kind": "bigquery#job",
  "selfLink": "https://www.googleapis.com/bigquery/v2/projects/federated-testing/jobs/bquijob_123x456_789y123z456c",
  "statistics": {
    "creationTime": "1499365894527",
    "endTime": "1499365894702",
    "startTime": "1499365894702"
  },
  "status": {
    "errorResult": {
      "debugInfo": "[Information removed for readability]",
      "message": "Operation cannot be performed on a nested schema. Field: author",
      "reason": "invalid"
    },
    "errors": [
      {
        "message": "Operation cannot be performed on a nested schema. Field: author",
        "reason": "invalid"
      }
    ],
    "state": "DONE"
  },
  "user_email": "user@example.com"
}

API

呼叫 jobs.get,並提供 jobIdprojectId 參數。(選用) 提供 location 參數,並將值設為執行工作的位置。如果您使用包含該位置的完整工作 ID (例如 my-project-1234:US.bquijob_123x456_123y123z123c),就不一定要提供這項參數。

Go

在試行這個範例之前,請按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 相關設定指示操作。詳情請參閱 BigQuery Go API 參考說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return err
}

status := job.LastStatus()
state := "Unknown"
switch status.State {
case bigquery.Pending:
	state = "Pending"
case bigquery.Running:
	state = "Running"
case bigquery.Done:
	state = "Done"
}
fmt.Printf("Job %s was created %v and is in state %s\n",
	jobID, status.Statistics.CreationTime, state)

Python

在嘗試此範例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.get_job(job_id, location=location)  # API request

# Print selected job properties
print("Details for job {} running in {}:".format(job_id, location))
print(
    "\tType: {}\n\tState: {}\n\tCreated: {}".format(
        job.job_type, job.state, job.created
    )
)

列出專案中的工作

專案會保留過去六個月內建立的所有工作的工作紀錄。如要要求自動刪除 50 天以前的工作,請與支援小組聯絡

您可透過以下方式查看 BigQuery 工作記錄:

工作記錄包含處於「RUNNING」狀態的工作,以及已經「DONE」(從回報的「SUCCESS」或「FAILURE」狀態來判斷) 的工作。

所需權限

您至少要具備 bigquery.jobs.list 權限,才能列出工作。以下是具有 bigquery.jobs.list 權限的預先定義 Cloud IAM 角色:

  • bigquery.user
  • bigquery.admin

以下角色僅具備自建工作的 bigquery.jobs.list 權限。獲得此角色的實體只能列出自己提交的工作:

  • bigquery.jobUser

如果您獲得 bigquery.jobs.list 權限,可以列出專案中的所有工作,但系統會遮蓋其他使用者提交工作的詳細資料和中繼資料。bigquery.jobs.list 權限可讓您查看自建工作的完整詳細資料。

如要列出所有工作 (包括其他使用者建立的工作的詳細資料),您必須具備 bigquery.jobs.listAll 權限。只有 bigquery.admin 角色具備 bigquery.jobs.listAll 權限。

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱預先定義的角色和權限一文。

列出工作

列出專案中的工作時,您不需要提供位置。目前系統會列出所有位置的工作。

如要列出專案中的工作:

主控台

  1. 在導覽窗格中,按一下 [Job History] (工作記錄)。

  2. 在「Personal history」(個人記錄) 區段中,您的工作會按建立時間顯示,越近的工作排在越上方。這份清單只列出目前使用者的工作。如要查看專案的所有工作,請按一下 [Project history] (專案記錄)。但如果您不是專案擁有者,可能就沒有查看專案中所有工作的權限。

傳統版 UI

  1. 在導覽窗格中,按一下 [Job History] (工作記錄)。

  2. 在「Recent Jobs」(近期工作) 區段中,您的工作會按照建立時間,從最新的工作開始由上往下排列。此清單只列出當前使用者的工作。如要查看所有工作,請使用指令列工具或 API。

CLI

發出 bq ls 指令並搭配使用下列其中一個標記:

  • -j 用來識別要當成資源列出的工作。
  • --all-a 可列出所有使用者的工作。如要查看所有工作的完整 (未遮蓋的) 詳細資料,您必須具備 bigquery.jobs.listAll 權限。
  • --min_creation_time 可用來列出在已提供的時間戳記值之後的工作。
  • --max_creation_time 可用來列出在已提供的時間戳記值之前的工作。
  • -n 可限制結果數。根據預設,結果上限數為 100,000 筆。
bq ls -j -a \
--min_creation_time integer1 \
--max_creation_time integer2 \
-n integer3 \
project_id

其中:

  • 「integer1」是一個整數,代表時間戳記。
  • 「integer2」是一個整數,代表時間戳記。
  • 「integer3」是一個整數,指出傳回的工作數。
  • 「project_id」是專案 ID,該專案含有您要列出的工作。如果您設定預設專案,則不需要提供「project_id」參數。

範例:

以下指令會列出當前使用者的所有工作。執行這個指令需要 bigquery.jobs.list 權限。

bq ls -j myproject

以下指令會列出所有使用者的全部工作。執行這個指令需要 bigquery.jobs.listAll 權限。

bq ls -j -a myproject

以下指令會列出 myproject 中 10 個最新的工作:

bq ls -j -a -n 10 myproject

以下指令列出在 2018 年 10 月 18 日下午 4:04:53 之前提交的所有工作。這個時間戳記 (以毫秒為單位) 等於下列整數值:1539903893000

bq ls -j --max_creation_time 1539903893000

API

呼叫 jobs.list,並提供 projectId 參數。如要列出所有使用者的工作,請將 allUsers 參數設為 true。將 allUsers 設為 true 需要 bigquery.jobs.listAll 權限。

Go

在試行這個範例之前,請按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 相關設定指示操作。詳情請參閱 BigQuery Go API 參考說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
it := client.Jobs(ctx)
for i := 0; i < 10; i++ {
	j, err := it.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		return err
	}
	state := "Unknown"
	switch j.LastStatus().State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	fmt.Printf("Job %s in state %s\n", j.ID(), state)
}

Java

在試行這個範例之前,請按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 相關設定指示操作。詳情請參閱 BigQuery Java API 參考說明文件

Page<Job> jobs = bigquery.listJobs(JobListOption.pageSize(100));
for (Job job : jobs.iterateAll()) {
  // do something with the job
}

Python

在嘗試此範例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# project = 'my_project'  # replace with your project ID
# client = bigquery.Client(project=project)
import datetime

# List the 10 most recent jobs in reverse chronological order.
# Omit the max_results parameter to list jobs from the past 6 months.
print("Last 10 jobs:")
for job in client.list_jobs(max_results=10):  # API request(s)
    print(job.job_id)

# The following are examples of additional optional parameters:

# Use min_creation_time and/or max_creation_time to specify a time window.
print("Jobs from the last ten minutes:")
ten_mins_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=10)
for job in client.list_jobs(min_creation_time=ten_mins_ago):
    print(job.job_id)

# Use all_users to include jobs run by all users in the project.
print("Last 10 jobs run by all users:")
for job in client.list_jobs(max_results=10, all_users=True):
    print("{} run by user: {}".format(job.job_id, job.user_email))

# Use state_filter to filter by job state.
print("Jobs currently running:")
for job in client.list_jobs(state_filter="RUNNING"):
    print(job.job_id)

取消工作

您可透過以下方式取消 RUNNINGPENDING 工作:

  • 使用 GCP Console 或傳統網頁版 UI
  • 使用 CLI
  • 呼叫 jobs.cancel API 方法
  • 使用用戶端程式庫

請注意,並非所有工作類型都可以取消。如果工作無法取消,系統會傳回錯誤訊息。

即使是可以取消的工作,也不保證一定能成功取消。工作可能在提交取消要求時剛好完成,或工作也可能處於無法取消的階段。

所需權限

您至少要具備 bigquery.jobs.update 權限才能取消工作。以下是具有 bigquery.jobs.update 權限的預先定義 Cloud IAM 角色:

  • bigquery.admin

如果您授予帳戶 bigquery.admin 角色,則使用者可以取消任何符合條件的工作 (不管這些工作是由哪些人提交的)。

以下角色可以取消自建工作。這些使用者只能取消自己提交的工作:

  • bigquery.user
  • bigquery.jobUser

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱預先定義的角色和權限一文。

取消工作

取消工作的方式如下:

主控台

  1. 在導覽窗格中,按一下 [Job history] (工作記錄)。

  2. 在「Personal history」(個人記錄) 區段中,按一下您要取消的工作。最新的工作會顯示在清單頂端。

  3. 在工作詳細資料中,按一下 [Cancel Job] (取消工作)。

傳統版 UI

  1. 在導覽窗格中,按一下 [Job History] (工作記錄)。

  2. 在「Recent Jobs」(近期工作) 區段中,按一下您要取消的工作。最新的工作會顯示在清單頂端。

  3. 在工作詳細資料中,按一下 [Cancel Job] (取消工作)。

    取消工作

CLI

發出 bq cancel 指令並搭配使用 job_id 參數。您可以使用 --nosync 標記要求取消並立即傳回。根據預設,取消要求會等待完成。

當您提供工作 ID 時,可以使用完整 ID 或簡短格式。舉例來說,BigQuery 網頁版 UI 列出的工作 ID 是完整 ID,其中包含專案 ID 和位置:

my-project-1234:US.bquijob_123x456_123y123z123c

在指令列工作中列出的工作 ID 採用簡短格式,其中不含專案 ID 和位置:

bquijob_123x456_123y123z123c

如要指定工作位置,請提供 --location 標記,並將值設為您的位置。如果您使用完整工作 ID,則不一定要提供標記。如果您加入 --location 標記且使用的是完整工作 ID,則系統會忽略 --location 標記。

以下指令會要求取消工作並等待完成。如果提供完整工作 ID,則 --location 標記會被忽略。

bq --location=location cancel job_id

以下指令會要求取消工作並立即傳回。如果提供完整工作 ID,則 --location 標記會被忽略。

bq --location=location --nosync cancel job_id

其中:

  • 「location」是選用項目,指的是執行工作的位置。舉例來說,如果您是在東京地區使用 BigQuery,請將標記的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • 「job_id」是您要取消的工作 ID。如果您從 BigQuery 網頁版 UI 複製工作 ID,則專案 ID 和位置會併入工作 ID 中,例如 my-project-1234:US.bquijob_123x456_123y123z123c

範例:

以下指令會取消在 my-project-1234 中於 US 多地區位置執行的 my-project-1234:US.bquijob_123x456_123y123z123c 工作,並等待完成。因為使用的是完整工作 ID,所以未提供 location 標記。

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

以下指令會取消在 my-project-1234 中於 US 多地區位置執行的 bquijob_123x456_123y123z123c 工作,並等待完成。因為使用的是簡短格式的工作 ID,所以提供了 --location 標記。

bq --location=US cancel bquijob_123x456_123y123z123c

以下指令會取消在 my-project-1234 中於 US 多地區位置執行的 bquijob_123x456_123y123z123c 工作,並立即傳回。因為使用的是完整工作 ID,所以未提供 --location 標記。

bq --nosync cancel my-project-1234:US.bquijob_123x456_123y123z123c

API

呼叫 jobs.cancel,並提供 jobIdprojectId 參數。提供 location 參數,並將值設為執行工作的位置

Go

在試行這個範例之前,請按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 相關設定指示操作。詳情請參閱 BigQuery Go API 參考說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
job, err := client.JobFromID(ctx, jobID)
if err != nil {
	return nil
}
return job.Cancel(ctx)

Python

在嘗試此範例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.cancel_job(job_id, location=location)

重複執行工作

系統無法重新執行工作 ID 相同的工作,因此您必須使用相同的設定建立新工作。您可以在 GCP Console、傳統網頁版 UI 或 CLI 中提交新工作,系統會指派新的工作 ID。如果您使用 API 或用戶端程式庫來提交工作,則必須產生新的工作 ID。

所需權限

您至少要具備 bigquery.jobs.create 權限,才能執行工作。以下是具有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱預先定義的角色和權限一文。

重新執行工作

如要重複執行工作:

主控台

如要重複執行查詢工作:

  1. 在導覽窗格中,按一下 [Query History] (查詢記錄)。

  2. 在「Personal history」(個人記錄) 或「Project history」(專案記錄) 區段中,按一下您要重新執行的查詢,然後再按一下 [Open query in editor] (在編輯器中開啟查詢)

  3. 按一下 [Run] (執行)。

如何重複執行載入工作:

  1. 在導覽窗格中,按一下 [Job history] (工作記錄)。

  2. 在「Personal history」(個人記錄) 或「Project history」(專案記錄) 區段中,按一下您要重複執行的工作。最新的工作會顯示在清單頂端。

  3. 在工作詳細資料中,按一下 [Repeat load job] (重複載入工作)

傳統版 UI

如要重複執行查詢工作:

  1. 在導覽窗格中,按一下 [Query History] (查詢記錄)。

  2. 在「Queries」(查詢) 區段中,按一下查詢右側的 [Open Query] (開啟查詢)

  3. 按一下 [Run Query] (執行查詢)。

如何重複執行載入工作:

  1. 在導覽窗格中,按一下 [Job History] (工作記錄)。

  2. 在「Recent Jobs」(近期工作) 區段中,按一下您要重複執行的工作。最新的工作會顯示在清單頂端。

  3. 在工作詳細資料中,按一下 [Repeat Load Job] (重複載入工作)

CLI

重新發出指令,BigQuery 會自動產生具有新工作 ID 的工作。

API

沒有可以重複執行工作的一次呼叫方法;如要重複特定工作,請執行下列步驟:

  1. 呼叫 jobs.get 以擷取重複執行工作時所需的資源。

  2. 移除「id」、「status」和「statistics」欄位。將「jobId」 欄位更改為用戶端程式碼產生的新值。視需要更改任何其他欄位。

  3. 使用修改後的資源和新的工作 ID 呼叫 jobs.insert,以啟動新工作。

本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
需要協助嗎?請前往我們的支援網頁