BigQueryの大容量クエリ調査

BigQueryを使っていると思った以上に高い料金が発生していることがあります。
そんなときは、Stackdriver Loggingで調べることができます。

Stackdriver Logging

Stackdriver Logging のログビューア画面で
リソースに「BigQuery」ログの種類に「cloudaudit.googleapis.com/data_access」を
選択すれば直近1時間のログが表示されます。

一定の容量以上のクエリを抽出

基本条件のみだと大量に表示されすぎてわかりにくいので、
大容量のクエリのみに絞り込みたい場合

高度なフィルタ入力のモードに切り替え、
「protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes」の条件を加えます。

resource.type="bigquery_resource"
logName="projects/dmm-games-data-infrastructure/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes>="100000000000"

これで100MB以上のクエリのみが表示されます。

特定のユーザーのクエリを抽出

特定のユーザーのログを表示する場合は 「protoPayload.authenticationInfo.principalEmail」の条件を加えます。

protoPayload.authenticationInfo.principalEmail="xxxxxxxxxxxxxxxxx@xxxxx.xxx"

これで指定したユーザーのログのみ表示されます。

最後に

フィルタの条件として使えるキーの情報がホントわかりにくいですね。
JSON構造そのままかと思えば微妙に違ってたりするのがイヤらしい。

よく使う条件とかは今度まとめてみるのもいいかも

データの集計とかする場合はBigQueryのテーブルにエクスポートもできるみたいなので
また今度やってみようかと思います。