Stackdriver Logging を用いて BigQuery テーブルの最終参照日を求める
Naofumi Yamada
Data Engineer#
やりたいことBigQuery テーブルの最終参照日を求めて、使ってないテーブルを整理したい。 最終更新日はテーブルのメタ情報に載っているが、参照日は載っておらず簡単に見ることはできない。 BigQuery のクエリログが全て載る Stackdriver Logging に集計処理をかけることで求めてみる。
#
寿命でよいのでは寿命が正しく設計できるなら問題ないが、後から追いたくなる場合は必ずある。
また、AutoML 推論で BigQuery に出力するとデータセットを見境なく作るため、寿命の設定ができない。
これらの問題に対処すべく、Stackdriver Logging を用いる。
ちなみに、AutoML 推論の大掃除には prediction_\w+_20\d\d_\d\d_\d\dT\d\d_\d\d_\d\d_\d\d\dZ
の正規表現を利用した。
#
Storage に移動するべきかAVRO データ圧縮率など無視すると、編集から 90 日より前なら Nearline 以下の、90 日以後なら Coldline 以下の Storage に移動すると価格を抑えられる。 無編集かつアクセスが年 1 未満なら Archive、年 1 程度なら Coldline が妥当なラインだと思われる。 それ以外は(サイズ次第ではあるが)作業時間に見合わなそうなため、 BigQuery にそのまま放置する。
#
準備#
Stackdriver Logging ログシンクの設定ログシンク設定は以下のフィルタで行う。参照可能な全てのプロジェクトから行う必要があるため、外部公開のデータセットについては、参照を追えない点に留意する。
#
掃除に必要な情報を得る#
最終参照日ログシンク先から BigQuery テーブルの最近参照日を出すクエリは以下の通り。 このクエリで参照日を見て、要不要の判断を行う。
#
依存 VIEW の洗い出しBigQuery View Analyzer を用いると、 BigQuery VIEW が依存するテーブルを再帰的に探索して可視化してくれる。 VIEW 中心に作っている場合には、こちらも実施する。
#
まとめ最終参照日 & 依存 VIEW の洗い出しで大体使っていないテーブルを見分けて整理できたはずだ。 自分の管理外のプロジェクトから呼ばれる公開データセットがある場合には、その告知も必要になるため気をつけて掃除を行ってほしい。