PythonでBigQueryにスケジュールされたクエリを一覧・削除してみた

2022.05.24

データアナリティクス事業本部の鈴木です。

Pythonから、BigQueryにスケジュールしたクエリを確認・削除したいことがありました。

今回は以下のPython Client for BigQuery Data Transfer APIを使用した方法を試してみたので、ご紹介します。

準備

前提

今回、PythonスクリプトはCloudShellから実行しました。

CloudShellにはクライアントがインストールされていなかったので、以下のコマンドでインストールしました。

python3 -m pip install google-cloud-bigquery-datatransfer

使用したツールのバージョンは以下になります。

  • python: 3.9.2
  • google.cloud.bigquery: 3.0.1
  • google-cloud-bigquery-datatransfer: 3.6.1

データ転送の設定

一覧取得方法をみていくのに、なにも設定されていないと結果が分からないので、2件スケジュールを設定しておきました。

  • スケジュールされたクエリ1件
  • Google Cloud Storageからのデータ転送1件

ポイントが分かりやすいよう、スケジュールされたクエリに加えて、Google Cloud Storageからのデータ転送を設定しておきました。

今回設定の詳細は気にしなくても大丈夫なので割愛します。概要としては、BigQueryにsample_datasetという適当なデータセットを作っておき、その下に適当なテーブルを作っておきました。そのテーブルをSELECTして、別名で保存するようなクエリをスケジュール設定しておきました。Google Cloud Storageからのデータ転送は、適当なCSVファイルをこのデータセットにスケジュールに合わせて転送するようなものを作成しておきました。

各々、以下のようなものができました。

スケジュールされたクエリ

作成したスケジュールしたクエリ

Google Cloud Storageからのデータ転送

作成したGCSからのデータ転送

ソースの欄が種類に合ったものになっているところが、後でポイントになります。

もし設定方法が気になる場合は、以下のガイドをご覧ください。

やってみる

スケジュールしたクエリの表示

まず、list_transfer_configsでデータ転送の情報を取得してみました。

ガイドのうち、以下の記載を参考に、コードを作成・実行してみました。

コードは以下になります。

from google.cloud import bigquery_datatransfer

client = bigquery_datatransfer.DataTransferServiceClient()
# Initialize request argument(s)
request = bigquery_datatransfer.ListTransferConfigsRequest(parent="projects/プロジェクトID/locations/asia-northeast1")
# Make the request
page_result = client.list_transfer_configs(request=request)
# Handle the response
for response in page_result:
    print(response)

parentには、一覧を表示する対象のプロジェクト情報を渡しました。プロジェクトIDはクエリをスケジュールしたプロジェクトIDを記載します。また、リージョンは今回東京リージョンに設定したので、asia-northeast1を入れておきました。

page_resultListTransferConfigsPagerオブジェクトで、反復処理することでデータ転送の情報を取得することが可能です。データ転送の情報については、以下のドキュメントのTransferConfigの値を参照しました。

例えば、以下のようなコードで、転送構成のリソース名・表示名・データソースのIDを取得することが出来ました。

from google.cloud import bigquery_datatransfer

client = bigquery_datatransfer.DataTransferServiceClient()
# Initialize request argument(s)
request = bigquery_datatransfer.ListTransferConfigsRequest(parent="projects/プロジェクトID/locations/asia-northeast1")
# Make the request
page_result = client.list_transfer_configs(request=request)
# Handle the response
for response in page_result:
    print(response.name)
    print(response.display_name)
    print(response.data_source_id)

結果は以下のようになります。

ちょうど2つ設定していたので、全て取得できていることが分かりました。

転送設定の個々の情報を参照する

特に、data_source_idの値は、準備のセクションでみたデータソースのIDに対応しているので、これを使うことで、スケジュールされたクエリだけなど、特定の種別をフィルタすることもできそうでした。

スケジュールしたクエリの削除

転送構成のリソース名を取得することで、BigQuery Data Transfer APIからスケジュールしたクエリを削除することが可能そうでしたのでやってみました。

ガイドのうち、以下のdelete_transfer_configの記載を参考に、コードを作成・実行してみました。

コードは以下になります。転送構成のリソース名には、上記で取得した転送構成のリソース名を入れます。これはコンソールからでも確認できます。

from google.cloud import bigquery_datatransfer

# Create a client
client = bigquery_datatransfer.DataTransferServiceClient()

# Initialize request argument(s)
request = bigquery_datatransfer.DeleteTransferConfigRequest(
    name="転送構成のリソース名",
)

# Make the request
client.delete_transfer_config(request=request)

実行すると、クエリのスケジュール設定が削除されることが確認できました。

削除後のスケジュールされたクエリ画面

最後に

今回はPython Client for BigQuery Data Transfer APIを使って、すでに設定されているデータ転送の一覧と、その中からスケジュールされたクエリの設定を確認する方法をやってみました。また、取得した転送構成のリソース名を使って、クエリのスケジュール設定を削除してみました。

特に一覧取得時には、種別が分かるようになっているので、その値によって管理することができそうでよかったです。