ジョブの管理

BigQuery ジョブを送信した後、ジョブの詳細の表示ジョブの一覧表示ジョブのキャンセルジョブの繰り返しジョブのメタデータの削除を行うことができます。

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

  • PENDING: ジョブはスケジュールされ、実行を待機しています。
  • RUNNING: ジョブは進行中です。
  • DONE: ジョブが完了しました。ジョブがエラーなしで完了した場合は、この状態を SUCCESS として BigQuery により報告されます。ジョブがエラーを伴って完了した場合は、この状態を FAILURE として BigQuery により報告されます。

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。タスクの実行に必要な権限(存在する場合)は、タスクの「必要な権限」セクションに記載されています。

ジョブの詳細を表示

ジョブの詳細は、Google Cloud コンソール、bq コマンドライン ツール、または API を使用して表示できます。詳細には、ジョブの種類、ジョブの状態、ジョブを作成したユーザーなどのデータとメタデータが含まれます。

必要な権限

ジョブの詳細を表示するには、bigquery.jobs.get の IAM 権限が必要です。作成したジョブには、この権限が自動的に付与されます。

次の各事前定義 IAM ロールには、ジョブの詳細を表示するために必要な権限が含まれています。

  • roles/bigquery.admin(プロジェクト内のすべてのジョブの詳細を表示できます)
  • roles/bigquery.user(自分が所有するジョブの詳細を表示できます)
  • roles/bigquery.jobUser(自分が所有するジョブの詳細を表示できます)

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

ジョブの詳細を表示

ジョブの詳細を表示する手順は次のとおりです。

Console

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. 表示するジョブ履歴の種類を選択します。

    • 最近のジョブの情報を表示するには、[個人履歴] をクリックします。
    • プロジェクトの最近のジョブの情報を表示するには、[プロジェクト履歴] をクリックします。
  3. ジョブの詳細を表示するには、ジョブをクリックします。

bq

--job=true フラグとジョブ ID を指定して bq show コマンドを発行します。

ジョブ ID を指定するとき、完全修飾 ID と短縮形のどちらを使用してもかまいません。たとえば、Google Cloud コンソールに一覧表示されているジョブ ID は完全修飾されています。つまり、それらにはプロジェクトとロケーションが含まれています。

my-project-1234:US.bquijob_123x456_123y123z123c

コマンドライン ツールのジョブ ID は短縮形で一覧表示されます。プロジェクト ID とロケーションは含まれません。

bquijob_123x456_123y123z123c

ジョブのロケーションを指定するには、--location フラグを使用して該当するロケーションを設定します。完全修飾ジョブ ID を使用する場合、このフラグは省略できます。--location フラグを指定して完全修飾ジョブ ID を使用した場合、--location フラグは無視されます。

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

bq --location=LOCATION show --job=true JOB_ID

次のように置き換えます。

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

例:

次のコマンドは、myproject で実行されているジョブ US.bquijob_123x456_123y123z123c の概要を取得します。

bq show --job=true 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 --job=true 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 のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

def get_job(
    client: bigquery.Client,
    location: str = "us",
    job_id: str = "abcd-efgh-ijkl-mnop",
) -> None:
    job = client.get_job(job_id, location=location)

    # All job classes have "location" and "job_id" string properties.
    # Use these properties for job operations such as "cancel_job" and
    # "delete_job".
    print(f"{job.location}:{job.job_id}")
    print(f"Type: {job.job_type}")
    print(f"State: {job.state}")
    print(f"Created: {job.created.isoformat()}")

ジョブのトラブルシューティングを行うための詳細情報が必要な場合は、INFORMATION_SCHEMA.JOBS* ビューログをご覧ください。

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

BigQuery では、プロジェクトのすべてのジョブについて 6 か月分のジョブ履歴が保存されます。

ジョブ履歴は、次の方法で確認できます。

  • Google Cloud コンソールの使用
  • bq ls コマンドを使用する。
  • jobs.list API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

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

必要な権限

プロジェクト内のジョブを一覧表示するには、bigquery.jobs.list の IAM 権限が必要です。bigquery.jobs.list 権限を使用すると、プロジェクト内のすべてのジョブを一覧表示できます。ただし、他のユーザーが送信したジョブの場合、詳細は削除されます。自分が作成したジョブについてのみ、完全な詳細情報を確認できます。

次の各事前定義 IAM ロールには、ジョブを一覧表示するために必要な権限が含まれています。

  • roles/bigquery.admin(プロジェクト内のすべてのジョブを一覧表示できます)
  • roles/bigquery.user(プロジェクト内のすべてのジョブを一覧表示できます)
  • roles/bigquery.jobUser(自分が所有するジョブを一覧表示できます)

プロジェクト内のすべてのジョブ(詳細を含む)を一覧表示するには、bigquery.jobs.listAll の IAM 権限が必要です。

次の各事前定義 IAM ロールには、すべてのジョブ(詳細を含む)を一覧表示するために必要な権限が含まれています。

  • roles/bigquery.admin
  • roles/bigquery.resourceAdmin

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

ジョブのリスト表示

BigQuery では、すべてのロケーションのジョブが一覧表示されます。

プロジェクト内のジョブを一覧表示する手順は次のとおりです。

Console

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. プロジェクトのすべてのジョブを一覧表示するには、[プロジェクト履歴] をクリックします。プロジェクトのオーナー以外のユーザーは、プロジェクトのすべてのジョブを表示する権限がない場合があります。最新のジョブが最初に表示されます。

  3. 自分が所有するジョブを表示するには、[個人履歴] をクリックします。

bq

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

  • --jobs=true または -j は、表示するリソースのタイプとしてジョブを指定する場合に使用します。
  • --all=true または -a を指定すると、すべてのユーザーのジョブが一覧表示されます。すべてのジョブの完全な詳細を表示するには、bigquery.jobs.listAll 権限が必要です。
  • --min_creation_time を使用すると、指定したタイムスタンプ以降のジョブが一覧表示されます。
  • --max_creation_time を使用すると、指定したタイムスタンプ以前のジョブが一覧表示されます。
  • --max_results または -n は、結果を制限します。デフォルトは 50 件です。
bq ls --jobs=true --all=true \
--min_creation_time=MIN_TIME \
--max_creation_time=MAX_TIME \
--max_results=MAX_RESULTS \
PROJECT_ID

次のように置き換えます。

  • MIN_TIME は、タイムスタンプを表す整数です。
  • MAX_TIME は、タイムスタンプを表す整数です。
  • MAX_RESULTS は、取得するジョブの数を指定する整数です。
  • PROJECT_ID は、一覧表示するジョブが含まれているプロジェクトの ID です。デフォルト プロジェクトを設定している場合、PROJECT_ID パラメータを指定する必要はありません。

例:

次のコマンドは、現在のユーザーのすべてのジョブを一覧表示します。このコマンドを実行するには、bigquery.jobs.list 権限が必要です。

bq ls --jobs=true myproject

次のコマンドは、すべてのユーザーのすべてのジョブを一覧表示します。このコマンドを実行するには、bigquery.jobs.listAll 権限が必要です。

bq ls --jobs=true --all=true myproject

以下のコマンドは、myproject で最近の 10 件のジョブを一覧表示します:

bq ls --jobs=true --all=true --max_results=10 myproject

次のコマンドは、2018 年 10 月 18 日午後 4:04:53 より前に送信されたすべてのジョブを一覧表示します。このタイムスタンプ(ミリ秒数)に該当するのは、整数 1539903893000 です。

bq ls --jobs=true --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 のジョブをキャンセルできます。

  • Google Cloud コンソールの使用
  • bq cancel コマンドを使用する。
  • SQL クエリで BQ.JOBS.CANCEL システム プロシージャを使用する。
  • jobs.cancel API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

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

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

必要な権限

ジョブをキャンセルするには、bigquery.jobs.update の IAM 権限が必要です。作成したジョブには、この権限が自動的に付与されます。

次の各事前定義 IAM ロールには、ジョブのキャンセルに必要な権限が含まれています。

  • roles/bigquery.admin(プロジェクト内のどのジョブもキャンセルできます)
  • roles/bigquery.user(自分が所有するジョブをキャンセルできます)
  • roles/bigquery.jobUser(自分が所有するジョブをキャンセルできます)

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

ジョブのキャンセル

通常、ジョブのキャンセルは 1 分未満で完了します。

ジョブをキャンセルする手順は次のとおりです。

Console

  1. BigQuery ページに移動します。

    BigQuery に移動

  2. [クエリを新規作成] をクリックしてクエリを入力します。

  3. クエリを実行するには、[実行] をクリックします。

  4. ジョブをキャンセルするには、[キャンセル] をクリックします。

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 によってジョブがキャンセルされます。ジョブがすでに成功または失敗している場合は、この手順を行ってもジョブはキャンセルできません。

bq

JOB_ID 引数を指定して、bq cancel コマンドを発行します。キャンセルをリクエストしてすぐに戻るには、--nosync=true フラグを使用します。デフォルトでは、キャンセル リクエストが完了するまで待機します。

JOB_ID 引数を指定する場合は、完全修飾 ID と短縮形のどちらを使用してもかまいません。たとえば、Google Cloud コンソールに一覧表示されているジョブ ID は完全修飾されています。つまり、それらにはプロジェクトとロケーションが含まれています。

my-project-1234:US.bquijob_123x456_123y123z123c

bq コマンドライン ツールのジョブ 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 です。Google Cloud コンソールからジョブ 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

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 のリファレンス ドキュメントをご覧ください。

from google.cloud import bigquery

def cancel_job(
    client: bigquery.Client,
    location: str = "us",
    job_id: str = "abcd-efgh-ijkl-mnop",
) -> None:
    job = client.cancel_job(job_id, location=location)
    print(f"{job.location}:{job.job_id} cancelled")

ジョブのメタデータを削除する

特定のジョブのメタデータを削除するには、bq コマンドライン ツールと BigQuery API を使用します。BigQuery は、過去 6 か月間に実行されたジョブの履歴を保持します。この方法では、クエリ ステートメントに含まれている可能性のある機密情報を削除できます。ジョブのメタデータを削除できるのは、ジョブの完了後のみです。ジョブが子ジョブを作成している場合は、子ジョブも削除されます。子ジョブを削除することはできません。削除できるのは、親または最上位のジョブのみです。

必要な権限

ジョブのメタデータを削除するには、bigquery.jobs.delete の IAM 権限が必要です。

事前定義 IAM ロール roles/bigquery.admin には、ジョブのメタデータを削除するために必要な権限が含まれています。

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

ジョブのメタデータを削除する

bq

-j フラグとジョブ ID を指定して bq rm コマンドを発行します。

ジョブ ID を指定するとき、完全修飾 ID と短縮形のどちらを使用してもかまいません。たとえば、Google Cloud コンソールに一覧表示されているジョブ ID は完全修飾されています。つまり、それらにはプロジェクトとロケーションが含まれています。

my-project-1234:US.bquijob_123x456_123y123z123c

コマンドライン ツールのジョブ ID は短縮形で一覧表示されます。プロジェクト ID とロケーションは含まれません。

bquijob_123x456_123y123z123c

ジョブのロケーションを指定するには、--location フラグを使用して該当するロケーションを設定します。完全修飾ジョブ ID を使用する場合、このフラグは省略できます。--location フラグを指定して完全修飾ジョブ ID を使用した場合、--location フラグは無視されます。

ジョブの削除は、次のコマンドで行います。

bq --location=location \
   --project_id=project_id \
   rm -j job_id

Python

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

from google.cloud import bigquery
from google.api_core import exceptions

# TODO(developer): Set the job ID to the ID of the job whose metadata you
#                  wish to delete.
job_id = "abcd-efgh-ijkl-mnop"

# TODO(developer): Set the location to the region or multi-region
#                  containing the job.
location = "us-east1"

client = bigquery.Client()

client.delete_job_metadata(job_id, location=location)

try:
    client.get_job(job_id, location=location)
except exceptions.NotFound:
    print(f"Job metadata for job {location}:{job_id} was deleted.")

ジョブの繰り返し

同じジョブ ID を使用してジョブを繰り返すことはできません。代わりに、同じ構成で新しいジョブを作成します。Google Cloud コンソールまたは bq コマンドライン ツールで新しいジョブを送信すると、新しいジョブ ID が割り当てられます。API またはクライアント ライブラリを使用してジョブを送信する場合は、新しいジョブ ID を生成する必要があります。

必要な権限

ジョブを実行するには、bigquery.jobs.create の IAM 権限が必要です。

次の IAM 事前定義ロールには、ジョブの実行に必要な権限が含まれています。

  • roles/bigquery.admin
  • roles/bigquery.user
  • roles/bigquery.jobUser

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

ジョブを繰り返す

ジョブを繰り返す手順は次のとおりです。

Console

  • クエリジョブを繰り返す手順は次のとおりです。

    1. BigQuery ページに移動します。

      BigQuery に移動

    2. 自分のジョブをすべて一覧表示するには、[個人履歴] をクリックします。プロジェクト内のすべてのジョブを一覧表示するには、[プロジェクト履歴] をクリックします。

    3. クエリジョブをクリックしてジョブの詳細を開きます。

    4. クエリを繰り返すには、[新しいクエリとして開く] をクリックします。

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

  • 読み込みジョブを繰り返す手順は次のとおりです。

    1. BigQuery ページに移動します。

      BigQuery に移動

    2. 自分のジョブをすべて一覧表示するには、[個人履歴] をクリックします。プロジェクト内のすべてのジョブを一覧表示するには、[プロジェクト履歴] をクリックします。

    3. 読み込みジョブをクリックしてジョブの詳細を開きます。

    4. ジョブを繰り返すには、[読み込みジョブを繰り返す] をクリックします。

bq

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

API

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

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

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

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