BigQueryの未実行クエリは復活できる
そう、Cloud Audit Logs ならね。
本記事は、BigQuery Advent Calendar 2021 の 14日目の記事です。
皆様がBigQueryを日々活用されるなかで、こんなことでお困りではありませんか?
BigQueryの書き途中のクエリが消えた!ページ更新した・されてしまった!
そんなときでも、Cloud Audit Logsで監査ログ生成をしていれば安心です。本記事では、Cloud Audit Logsの概要と、実際に実行前のクエリを復活させる方法を紹介します。
Cloud Audit Logsとは?
要はGoogleCloudサービスの監査ログを生成してくれるサービスです。
もちろんBigQueryの監査ログも生成できます。またBigQueryの監査ログは自動的にCloud Loggingへと転送されるので、コンソール画面から実行ログをすぐ確認できます。
さらにSDKを用いて gcloud logging sinks create
すれば、BigQueryの任意のデータセット配下に、日付別シャーディングテーブルもしくはパーティション分割テーブルの形式でニアリアルタイムに転送することも可能です。
どうやって復活させるのか?
要は、監査ログが生成されているので、あとはCloud LoggingかBigQueryテーブルを見にいくだけです。
皆さんがクエリを書かれている最中に、常にBigQueryがdryrunしてチェックしてくれますよね。実はこのときも監査ログが生成されていて、すぐにCloud Loggingに転送されています。
クエリを失った本人にCloud Loggingの閲覧権限があるときは、あとはログエクスプローラにてBigQueryのリソースタイプを指定して、下記のフィールドを見にいけば確認できます。
protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.query.destinationTable.query
↓のようにdryrunの情報が保存されています。あとはコピペすれば復活です。
またクエリを失った本人にCloud Loggingの閲覧権限がないときは、上述のsinkを設定していれば、BigQueryテーブルから復活できます。下記がsinkを設定したデータセットに対して実行するクエリの一例です。メールアドレスや失ったクエリの一部などをWHERE文に指定すると、より見つけやすいです。
select
timestamp
, protopayload_auditlog.authenticationInfo.principalEmail
, protopayload_auditlog.servicedata_v1_bigquery.jobInsertRequest.resource.jobConfiguration.query.query
from
`myproject.sink_dataset.audit_20211214`
where
protopayload_auditlog.authenticationInfo.principalEmail like '%my-email@gmail.com%'
order by
timestamp desc
limit
10
もしも読者の方がデータの民主化をされているのであれば、このクエリを論理テーブル保存しておくと、社内のBigQueryユーザーからとても重宝されると思います。
※監査ログテーブルは閲覧制限した方が良いので、行レベルのセキュリティや、authorized viewを用いることをお勧めします。
という訳で、BigQueryの未実行クエリは復活できます。
この記事を読まれた皆さんの安心感が増せば幸いです。今年もお疲れ様でした。
Discussion