ジョブの管理

BigQuery ジョブの送信後に、ジョブデータの表示ジョブの一覧表示ジョブのキャンセル、またはジョブの再実行を行うことができます。

ジョブが送信されると、次の 3 つの状態のいずれかになります。

  • PENDING - スケジュール済み
  • RUNNING
  • DONE - SUCCESS または FAILURE(ジョブがエラーを伴って完了した場合)として報告

ジョブデータの表示

GCP Console、従来のウェブ UI、CLI、および API を使用して、ジョブデータおよびメタデータを表示できます。このデータには、ジョブタイプ、ジョブの状態、ジョブを実行したユーザーなどの詳細情報が含まれます。

必要な権限

ジョブデータおよびメタデータを取得するには bigquery.jobs.get 権限が必要です。次の定義済みのプロジェクト レベルの IAM 役割には bigquery.jobs.get 権限が含まれます。

アカウントに bigquery.admin 役割を付与すると、そのユーザーは誰がジョブを送信したかに関係なく、プロジェクト内のすべてのジョブデータを表示できます。

次の役割には、自己作成ジョブに対する bigquery.jobs.get 権限が付与されています。これらのユーザーは、自分が送信したジョブのジョブデータのみを表示できます。

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。

ジョブに関する情報の表示

ジョブに関する情報を表示するには:

従来の UI

  1. ナビゲーション ペインで [Job History] をクリックします。

  2. [Recent Jobs] セクションで、詳細を表示するジョブをクリックします。

CLI

-j フラグおよび job_id パラメータを指定して bq show コマンドを発行します。--location フラグを指定して、その値を該当するロケーションに設定します。

次のコマンドは、ジョブに関する情報をリクエストします。

bq --location=[LOCATION] show -j [JOB_ID]

ここで

  • [LOCATION] は、ジョブが実行されるロケーションの名前です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • [JOB_ID] はジョブの ID です。

例:

次のコマンドは、US マルチリージョン ロケーションの myproject で実行されているジョブ bquijob_123x456_123y123z123c に関する要約情報を取得します。

bq --location=US show -j myproject: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 --location=US show --format=prettyjson -j myproject: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"
}

次のコマンドは、asia-northeast1 リージョンの myproject で実行中のジョブ bquijob_123x456_123y123z123c に関する要約情報を取得します。

bq --location=asia-northeast1 show -j myproject:bquijob_123x456_123y123z123c

API

jobs.get を呼び出して、jobId パラメータと projectId パラメータを渡します。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 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))

プロジェクト内のジョブの一覧表示

プロジェクトには、過去 6 か月間に作成されたすべてのジョブの履歴が保持されています。50 日以上経過したジョブの自動削除をリクエストについては、サポートにお問い合わせください。

Google Cloud Platform Console、従来のウェブ UI、CLI、または API を使用して、BigQuery ジョブの履歴を表示できます。この履歴には、RUNNING 状態のジョブと、(SUCCESS または FAILURE として報告された)DONE 状態のジョブが含まれます。

必要な権限

ジョブを一覧表示するには bigquery.jobs.list 権限が必要です。次のプロジェクト レベルの定義済みの IAM 役割には bigquery.jobs.list 権限が含まれています。

bigquery.jobs.list 権限が付与されている場合、プロジェクト内のすべてのジョブを一覧表示できますが、他のユーザーから送信されたジョブについては、詳細とメタデータが除去されます。bigquery.jobs.list 権限により、自己作成ジョブの詳細を確認できます。

他のユーザーが作成したジョブの詳細など、すべてのジョブの一覧表示するには、bigquery.jobs.listAll 権限が必要です。bigquery.jobs.listAll 権限があるのは bigquery.admin の役割だけです。

次の役割では、自己作成ジョブのみに対する bigquery.jobs.list 権限が付与されます。これらのユーザーは、自分が送信したジョブのみを一覧表示できます。

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。

ジョブの一覧表示

プロジェクトでジョブを一覧表示する際に、ロケーションを指定する必要はありません。現在のところ、すべてのロケーションのジョブが一覧表示されます。

プロジェクト内のジョブを一覧表示するには:

従来の UI

  1. ナビゲーション ペインで [Job History] をクリックします。

  2. [Recent Jobs] セクションに、作成日時順にジョブが一覧表示され、最新のジョブが一番上に表示されます。この一覧では、現在のユーザーのジョブだけが表示されます。すべてのジョブを表示するには、コマンドライン ツールまたは API を使用します。

CLI

次のいずれかのフラグを付けて bq ls コマンドを発行します。

  • -j は、一覧表示するリソースとしてジョブを識別するために使用されます。
  • --all または -a を指定すると、すべてのユーザーのジョブが一覧表示されます。すべてのジョブの完全な詳細(未編集)を表示するには、bigquery.jobs.listAll 権限が必要です。
  • min_creation_time を使用すると、タイムスタンプの値を指定して、そのタイムスタンプ以降のジョブを一覧表示できます。
  • max_creation_time を使用すると、タイムスタンプの値を指定して、そのタイムスタンプ以前のジョブを一覧表示できます。
  • -n は結果を制限します。

    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 に設定します。allUserstrue に設定するには、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)

ジョブのキャンセル

GCP Console、従来のウェブ UI、CLI、または API を使用して、RUNNING 状態あるいは PENDING 状態のジョブをキャンセルできます。ただし、すべてのジョブタイプをキャンセルできるわけではありません。ジョブをキャンセルできない場合は、エラーが返されます。

ジョブをキャンセルできる場合でも、キャンセルが成功する保証はありません。キャンセル リクエストが送信されるまでにジョブがすでに完了している場合や、ジョブがキャンセルできない段階に到達している場合などがあります。

必要な権限

ジョブをキャンセルするには bigquery.jobs.update 権限が必要です。次のプロジェクト レベルの定義済みの IAM 役割には bigquery.jobs.update 権限が含まれています。

アカウントに bigquery.admin 役割を付与すると、そのユーザーは誰がジョブを送信したかに関係なく、プロジェクト内のすべてのジョブデータをキャンセルできます。

次の役割では、自己作成ジョブをキャンセルできます。これらのユーザーは、自分が送信したジョブのみをキャンセルできます。

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。

ジョブのキャンセル

ジョブをキャンセルするには:

従来の UI

  1. ナビゲーション ペインで [Job History] をクリックします。

  2. [Recent Jobs] セクションで、キャンセルするジョブをクリックします。最新のジョブがリストの一番上に表示されます。

  3. ジョブの詳細で [Cancel Job] をクリックします。

    ジョブをキャンセル

CLI

job_id パラメータを指定して bq cancel コマンドを実行します。キャンセルをリクエストしてすぐに戻るには、--nosync フラグを使用します。デフォルトでは、キャンセル リクエストは完了を待機します。

ジョブ ID を指定するときは、完全修飾 ID を使用することも、短縮形を使用することもできます。たとえば、BigQuery ウェブ UI に一覧表示されているジョブ 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)。

例:

次のコマンドは、US マルチリージョン ロケーションの my-project-1234 で実行中のジョブ my-project-1234:US.bquijob_123x456_123y123z123c をキャンセルし、完了を待機します。完全修飾ジョブ ID が使用されているため、ロケーション フラグは指定されていません。

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

次のコマンドは、US マルチリージョン ロケーションの my-project-1234 で実行中のジョブ bquijob_123x456_123y123z123c をキャンセルし、完了を待機します。短縮形のジョブ ID が使用されているため、--location フラグが指定されています。

bq --location=US cancel bquijob_123x456_123y123z123c

次のコマンドは、US マルチリージョン ロケーションの my-project-1234 で実行中のジョブ bquijob_123x456_123y123z123c をキャンセルし、即時に戻ります。完全修飾ジョブ ID が使用されているため、--location フラグは指定されていません。

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

API

jobs.cancel を呼び出し、jobId パラメータと projectId パラメータを渡します。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 権限が必要です。次のプロジェクト レベルの定義済み IAM 役割には bigquery.jobs.create 権限が含まれています。

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。

ジョブの再実行

ジョブを繰り返すには:

従来の 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 の各フィールドを削除します。クライアント コードによって生成された新しいジョブ ID を、jobId フィールドに設定します。必要に応じて他のフィールドを変更します。

  3. 変更したリソースと新しいジョブ ID を指定して jobs.insert を呼び出し、新しいジョブを開始します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。