ジョブの管理

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

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

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

ジョブデータの表示

ジョブデータとメタデータを表示するには、Cloud Console、従来のウェブ UI、コマンドライン インターフェース、API を使用します。このデータには、ジョブタイプ、ジョブの状態、ジョブを実行したユーザーなどの詳細情報が含まれます。

必要な権限

ジョブデータとメタデータを取得するユーザーには、少なくとも bigquery.jobs.get 権限が付与されている必要があります。bigquery.jobs.get 権限は、次の事前定義された IAM ロールに含まれています。

  • bigquery.admin

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

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

  • bigquery.user
  • bigquery.jobUser

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

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

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

Console

  1. ナビゲーション パネルで [ジョブ履歴] または [クエリ履歴] をクリックして、クエリジョブに関する情報を表示します。

  2. [個人履歴] をクリックして、ジョブの詳細を表示します。[プロジェクト履歴] をクリックして、プロジェクトで実行されたすべてのジョブに関する詳細を表示します。

従来の UI

  1. ナビゲーション パネルで [Job history] または [Query history] をクリックして、クエリジョブに関する情報を表示します。

  2. [Recent Jobs] セクションで、詳細を表示するジョブをクリックします。クエリジョブの場合は、[Query history] タブをクリックしてクエリジョブの詳細を表示します。

bq

-j フラグおよび job_id パラメータを指定して bq show コマンドを実行します。

ジョブ ID を指定するとき、完全修飾 ID と短縮形のどちらを使用してもかまいません。たとえば、BigQuery ウェブ UI に一覧表示されているジョブ 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 は任意です。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://bigquery.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 を呼び出して、jobId パラメータと projectId パラメータを渡します。(省略可)location パラメータを使用して、ジョブが実行されるロケーションを指定します。ロケーションを含む完全修飾ジョブ ID を使用する場合(例: my-project-1234:US.bquijob_123x456_123y123z123c)、このパラメータは省略できます。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の手順に従って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// getJobInfo demonstrates retrieval of a job, which can be used to monitor
// completion or print metadata about the job.
func getJobInfo(w io.Writer, projectID, jobID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	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.Fprintf(w, "Job %s was created %v and is in state %s\n",
		jobID, status.Statistics.CreationTime, state)
	return nil
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;

// Sample to get a job
public class GetJob {

  public static void runGetJob() {
    // TODO(developer): Replace these variables before running the sample.
    String jobName = "MY_JOB_NAME";
    getJob(jobName);
  }

  public static void getJob(String jobName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      JobId jobId = JobId.of(jobName);
      Job job = bigquery.getJob(jobId);
      System.out.println("Job retrieved successfully");
    } catch (BigQueryException e) {
      System.out.println("Job not retrieved. \n" + e.toString());
    }
  }
}

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function getJob() {
  // Get job properties.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const jobId = "existing-job-id";

  // Create a job reference
  const job = bigquery.job(jobId);

  // Retrieve job
  const [jobResult] = await job.get();

  console.log(jobResult.metadata.jobReference);
}

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 か月間に作成されたすべてのジョブの履歴が保持されます。

BigQuery のジョブ履歴は、次の方法で表示できます。

  • Google Cloud Console または従来のウェブ UI を使用する
  • コマンドライン インターフェースを使用する
  • jobs.list API メソッドを呼び出す
  • クライアント ライブラリを使用する

ジョブ履歴には、RUNNING 状態のジョブと、すでに DONE になったジョブが含まれます(これらは SUCCESS 状態または FAILURE 状態として報告されます)。

必要な権限

ジョブを一覧表示するユーザーには、少なくとも bigquery.jobs.list 権限が付与されている必要があります。次の事前定義済みの IAM ロールには bigquery.jobs.list 権限が含まれています。

  • bigquery.user
  • bigquery.admin

次のロールには、自分で作成したジョブのみに対する bigquery.jobs.list 権限が付与されています。この役割を付与されたエンティティは、エンティティ自身が送信したジョブのみを一覧表示できます。

  • bigquery.jobUser

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

他のユーザーが作成したジョブの詳細を含むすべてのジョブを一覧表示するには、bigquery.jobs.listAll 権限が必要です。bigquery.jobs.listAll 権限を持つのは bigquery.admin ロールと bigquery.resourceAdmin ロールだけです。

BigQuery での IAM のロールと権限について詳しくは、事前定義されたロールと権限をご覧ください。

ジョブのリスト化

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

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

Console

  1. ナビゲーション ペインで [ジョブ履歴] をクリックします。

  2. [個人履歴] セクションに、作成日時の新しい順にジョブが一覧表示されます。この一覧では、現在のユーザーのジョブだけが表示されます。プロジェクトのすべてのジョブを表示するには、[プロジェクト履歴] をクリックします。(そのプロジェクトのオーナー以外のユーザーは、プロジェクトのすべてのジョブを表示する権限がない場合があります)。

従来の UI

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

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

bq

次のいずれかのフラグを指定して 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 に設定します。allUserstrue に設定するには bigquery.jobs.listAll 権限が必要です。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の手順に従って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listJobs demonstrates iterating through the BigQuery jobs collection.
func listJobs(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	it := client.Jobs(ctx)
	// List up to 10 jobs to demonstrate iteration.
	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.Fprintf(w, "Job %s in state %s\n", j.ID(), state)
	}
	return nil
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;

// Sample to get list of jobs
public class ListJobs {

  public static void runListJobs() {
    listJobs();
  }

  public static void listJobs() {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Page<Job> jobs = bigquery.listJobs(BigQuery.JobListOption.pageSize(10));
      if (jobs == null) {
        System.out.println("Dataset does not contain any jobs.");
        return;
      }
      jobs.getValues().forEach(job -> System.out.printf("Success! Job ID: %s", job.getJobId()));
    } catch (BigQueryException e) {
      System.out.println("Jobs not listed in dataset due to error: \n" + e.toString());
    }
  }
}

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function listJobs() {
  // Lists all jobs in current GCP project.

  // List the 10 most recent jobs in reverse chronological order.
  //  Omit the max_results parameter to list jobs from the past 6 months.
  const options = {maxResults: 10};
  const [jobs] = await bigquery.getJobs(options);

  console.log('Jobs:');
  jobs.forEach(job => console.log(job.id));
}

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の手順に従って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。


from google.cloud import bigquery

import datetime

# Construct a BigQuery client object.
client = bigquery.Client()

# 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("{}".format(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("{}".format(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("Last 10 jobs done:")
for job in client.list_jobs(max_results=10, state_filter="DONE"):
    print("{}".format(job.job_id))

ジョブのキャンセル

次の方法で、RUNNING または PENDING のジョブをキャンセルできます。

  • Cloud Console または従来のウェブ UI を使用する
  • コマンドライン インターフェースを使用する
  • SQL クエリで BQ.JOBS.CANCEL システム プロシージャを使用する
  • jobs.cancel API メソッドの呼び出し
  • クライアント ライブラリを使用する

すべてのジョブタイプをキャンセルできるわけではありません。ジョブをキャンセルできない場合は、エラーが返されます。

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

必要な権限

ジョブをキャンセルするには、少なくとも bigquery.jobs.update 権限が付与されている必要があります。bigquery.jobs.update 権限は、次の事前定義された IAM ロールに含まれています。

  • bigquery.admin

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

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

  • bigquery.user
  • bigquery.jobUser

BigQuery での IAM のロールと権限について詳しくは、事前定義されたロールと権限をご覧ください。

ジョブをキャンセルする

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

Console

  1. ナビゲーション ペインで [ジョブ履歴] をクリックします。

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

  3. ジョブの詳細で [ジョブをキャンセル] をクリックします。

従来の UI

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

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

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

    ジョブのキャンセル

bq

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 は任意です。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 が使用されているため、location フラグは指定されていません。

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

SQL

BQ.JOBS.CANCEL のシステム プロシージャを使用します。

CALL BQ.JOBS.CANCEL('job_id');

job_id は、キャンセルするジョブの ID に置き換えます。

キャンセルするジョブと同じリージョンにある別のプロジェクトを使用している場合は、プロジェクト ID も含める必要があります。

CALL BQ.JOBS.CANCEL('project_id.job_id');

ここで

  • project_id は、キャンセルするジョブを含むプロジェクトの ID です。
  • job_id は、キャンセルするジョブの ID です。

プロシージャはすぐに返され、その後すぐに BigQuery によってジョブがキャンセルされます。ジョブがすでに成功または失敗している場合、この手順は効果がありません。

API

jobs.cancel を呼び出して、jobId パラメータと projectId パラメータを指定します。location パラメータを使用して、ジョブが実行されるロケーションを指定します。

Go

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の手順に従って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// cancelJob demonstrates how a job cancellation request can be issued for a specific
// BigQuery job.
func cancelJob(projectID, jobID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	job, err := client.JobFromID(ctx, jobID)
	if err != nil {
		return nil
	}
	return job.Cancel(ctx)
}

Java

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import java.util.UUID;

// Sample to cancel a job
public class CancelJob {

  public static void runCancelJob() {
    // TODO(developer): Replace these variables before running the sample.
    String query = "SELECT country_name from `bigquery-public-data.utility_us.country_code_iso`";
    cancelJob(query);
  }

  public static void cancelJob(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Specify a job configuration to set optional job resource properties.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // The location and job name are optional,
      // if both are not specified then client will auto-create.
      String jobName = "jobId_" + UUID.randomUUID().toString();
      JobId jobId = JobId.newBuilder().setLocation("us").setJob(jobName).build();

      // Create a job with job ID
      bigquery.create(JobInfo.of(jobId, queryConfig));

      // Get a job that was just created
      Job job = bigquery.getJob(jobId);
      if (job.cancel()) {
        System.out.println("Job canceled successfully");
      } else {
        System.out.println("Job was not canceled");
      }
    } catch (BigQueryException e) {
      System.out.println("Job was not canceled.\n" + e.toString());
    }
  }
}

Node.js

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function cancelJob() {
  // Attempts to cancel a job.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const jobId = "existing-job-id";

  // Create a job reference
  const job = bigquery.job(jobId);

  // Attempt to cancel job
  const [apiResult] = await job.cancel();

  console.log(apiResult.job.status);
}

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 を使用してジョブを再実行することはできません。代わりに、同じ構成で新しいジョブを作成します。Cloud Console、従来のウェブ UI、またはコマンドライン インターフェースで新しいジョブを送信すると、新しいジョブ ID が割り当てられます。API またはクライアント ライブラリを使用してジョブを送信する場合は、新しいジョブ ID を生成する必要があります。

必要な権限

ジョブを実行するには、少なくとも bigquery.jobs.create 権限が付与されている必要があります。次の事前定義済みの IAM ロールには bigquery.jobs.create 権限が含まれています。

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

BigQuery での IAM のロールと権限について詳しくは、事前定義されたロールと権限をご覧ください。

ジョブの再実行

ジョブを繰り返すには:

Console

クエリジョブを繰り返すには:

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

  2. [個人履歴] または [プロジェクト履歴] のセクションで、再実行するクエリをクリックし、[クエリをエディタで開く] をクリックします。

  3. [実行] をクリックします。

読み込みジョブを繰り返すには:

  1. ナビゲーション ペインで [ジョブ履歴] をクリックします。

  2. [個人履歴] または [プロジェクト履歴] のセクションで、繰り返したいジョブをクリックします。最新のジョブがリストの一番上に表示されます。

  3. ジョブの詳細で、[読み込みジョブを繰り返す] をクリックします。

従来の UI

クエリジョブを繰り返すには:

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

  2. クエリの右側にある [Queries] セクションで、[Open Query] をクリックします。

  3. [Run Query] をクリックします。

読み込みジョブを繰り返すには:

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

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

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

bq

コマンドをもう一度実行すると、BigQuery が自動的にジョブを生成し、新しいジョブ ID が割り当てられます。

API

ジョブを繰り返す単一の呼び出しメソッドはありません。特定のジョブを繰り返すには、次のようにします。

  1. jobs.get を呼び出して、繰り返すジョブのリソースを取得します。

  2. id、status、statistics の各フィールドを削除します。 クライアント コードによって生成された新しいジョブ ID を、jobId フィールドに設定します。必要に応じて他のフィールドを変更します。

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