0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【BigQuery】PythonでBQジョブを表示・キャンセルする方法

0
Last updated at Posted at 2025-06-19

はじめに

こんにちは!
BigqueryのPython用APIを使用し、実行中のBQジョブをキャンセルする機能を実装したので、その際に使用したメソッドについてまとめます。

参考:公式サイト

参考:公式サンプルコード

・ジョブのリスト表示
・ジョブをキャンセルする
・ジョブ プロパティを取得する

Bigqueryジョブとは

BigQueryにおいて、データのロード、クエリの実行、エクスポートなど、データに対する操作は「ジョブ」として実行されます。

実行中のジョブを一覧表示する:list_jobs

プロジェクト内で実行中、または最近実行されたジョブを一覧で取得するには、client.list_jobs()メソッドを使用します。

基本使用例
from google.cloud import bigquery

client = bigquery.Client()

for job in client.list_jobs():
    print(f"  ジョブID: {job.job_id}")
    print(f"  タイプ: {job.job_type}")

フィルタリングとページネーション

list_jobs()には、ジョブのフィルタリングやページネーションを制御するための引数が用意されています。一部を紹介します。

引数 説明
project プロジェクトを指定します
all_users Trueに設定すると、プロジェクト内のすべてのユーザーが開始したジョブを取得します
[min/max]_creation_time ジョブの作成日時で範囲を指定します
state_filter 特定のステータスのジョブのみをフィルタリングします (PENDING, RUNNING, DONE)

all_usersをTrueにして実行するにはbigquery.job.listAllの権限が必要です。

引数でフィルタリングする例
from google.cloud import bigquery

project_name=XXX
hours_ago=XXX
client = bigquery.Client()

for job in client.list_jobs(
    project=project_name,
    all_users=True,
    min_creation_time=hours_ago,
    state_filter=["PENDING","RUNNING"]
):
    #例:タイプがcopyやloadの場合は宛先テーブルを出力
    if job.job_type in ("copy", "load"):
        print(f"  宛先プロジェクト: {job.destination.project}")
        print(f"  宛先データセット: {job.destination.dataset_id}")
        print(f"  宛先テーブル: {job.destination.table_id}")
        
    #例:タイプがqueryの場合はクエリ内容を出力
    if job.job_type == "query":
        print(f"  クエリ内容: {job.query}")
    

公式サンプルコード(ジョブのリスト表示)もご覧ください。

実行中ジョブをキャンセルする:cancel_job

ジョブを中断するには、client.cancel_job()メソッドを使用します。
このメソッドは、指定されたジョブIDのジョブを強制的に終了させます。

基本使用例
from google.cloud import bigquery

client = bigquery.Client()

job = client.cancel_job('キャンセルしたいジョブID')

公式サンプルコード(ジョブをキャンセルする)もご覧ください。

cancel_job()は呼び出し後すぐにジョブが停止するわけではありません。
そのため、次に紹介するメソッドを使用してキャンセルされたことを確認しました。

特定のジョブの詳細を取得する:get_job

ジョブIDを使って特定のジョブの詳細情報を取得するには、client.get_job()メソッドを使用します。

基本使用例
from google.cloud import bigquery

client = bigquery.Client()

job = client.get_job('詳細を表示したいジョブID')
    print(f"  ステータス: {job.state}")

ジョブをキャンセルした場合でも、ステータスはDONEになります。

公式サンプルコード(ジョブ プロパティを取得する)もご覧ください。

おわりに

今回はBigqueryのPython用APIを使用して、BigQueryジョブを表示・キャンセルする方法についてまとめました。

株式会社ジールはMicrosoft Azure やAWS(Amazon Web Services)、Google Cloud Platform(GCP)、Oracle Cloud Infrastructure(OCI)など、多彩なクラウドプラットフォーム構築・運用の知見を有しています。そのため、複数のクラウドサービスを組み合わせるマルチクラウド環境においても、ベンダーロックインを回避し、お客様のご要望に応じた最適なクラウドプラットフォームの構築・運用への対応が可能です。​

最後までご覧いただき、ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?