LoginSignup
3
1

BQのスケジュールクエリの認証情報をサービスアカウントに切り替える

Last updated at Posted at 2023-12-25

背景

BigQueryのスケジュールクエリを個人の認証情報で実行している場合、退職などで認証情報が無効になると、クエリの実行が停止することになります。

そのため認証情報の見直しとサービスアカウントへの切り替えを検討していましたが、スケジュールクエリの設定画面では変更が反映されず、データ転送側での変更もうまくいかなかったため、調査メモを備忘録として残しておきます。

ポイント

スケジュールクエリの認証情報をサービスアカウントに切り替える際のポイントは以下の通りです。

  • スケジュールクエリの設定画面ではサービスアカウントに変更できない。
  • DDLで宛先テーブルを指定していない場合、データ転送側から変更できる。
  • DDLで宛先テーブルを指定している場合、データ転送側の変更ではエラーが発生するため、BQコマンドを使用する必要がある。

スケジュールクエリの設定画面からは変更できない

この画像のようにスケジュールクエリの設定画面にはサービスアカウントを選択するUIがありますが、ここで選択しても反映されません。つまり、機能していません。

スクリーンショット 2023-12-25 13.26.22.png

Cloudコンソール上で認証情報をサービスアカウントに変更することは仕様上不可能のようです。

スケジュールされたクエリで使用される認証情報をサービス アカウントに変更する操作は、Google Cloud コンソールではサポートされていません。

データ転送側から設定できそう?

スケジュールクエリは「データ転送」の一部であるため、データ転送側からサービスアカウントへの変更が可能かもしれません。

スクリーンショット 2023-12-25 13.27.48(2).png

データ転送の設定項目

設定項目ではサービスアカウントを指定できますが、スケジュールクエリの設定画面と異なりデータセット名が必須項目です。

スクリーンショット 2023-12-25 13.32.01.png

私の場合DDLで CREATE OR REPLACE TABLE を使用していたので同じデータセットを指定しましたが、以下のエラーが発生しスケジュールクエリが無効になりました。(設定を削除し新たに設定し直す必要がありました)

エラーメッセージ

Dataset specified in the query ('') is not consistent with Destination dataset DATASET_ID

どうやらデータ転送から設定すると「クエリ結果の宛先テーブルを設定する」が強制的に有効になるようです。

test2.png

そしてこの設定は無効にすることができず、DDL文を含んだスケジュールクエリの場合には壊れてしまいます。

DDLがなければ更新可能

CREATE TABLEを含まない(宛先テーブルの指定のない)SQLではサービスアカウントへの切り替えが可能でした。

解決策:bq コマンドで変更

とういわけでCloudコンソール側だけではどうにもならなかったので、Cloud Shellを用いてbqコマンドで変更します。

スケジュールクエリの一覧を確認

以下のコマンドで設定されているスケジュールクエリの一覧が確認できます。
※LOCATIONは任意のロケーションを指定してください。

bq ls --transfer_config --transfer_location=LOCATION --filter='dataSourceIds:scheduled_query'

スクリーンショット 2023-12-25 13.46.01(2).png

認証情報をアップデート

bq update で任意のサービスアカウントと転送IDと指定します。

bq update \
--transfer_config \
--update_credentials \
--service_account_name=hogehoge@fugafuga.iam.gserviceaccount.com projects/XXXXX/locations/asia-northeast1/transferConfigs/YYYYY \

転送構成の確認

無事サービスアカウントに切り替わっていました。めでたしめでたし。

test.png

3
1
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
3
1