kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

BigQueryのテーブルを一定期間経過後削除する defaultTableExpirationMs

Google BigQuery 便利ですね。

テーブルを日毎に分割してデータを貯めていっているのですが、ある程度経過したらまぁ消してもよいかなと思うデータもあります。

そんなときに、GCSやS3のObject Lifecycle Management的なものがあると、自前でcronまわして削除するという手間とか何らかのリソースが不要になって嬉しいなということで、調べてやってみた話です。

答えはちゃんと公式ドキュメントに書いてあって、 defaultTableExpirationMs というプロパティを設定すれば良いようです。

GitHub - GoogleCloudPlatform/gcloud-ruby: Google Cloud Client Library for Ruby 使って設定するコードは以下のような感じです。

require "gcloud"

gcloud = Gcloud.new "project-id", "/path/to/keyfile.json"
bigquery = gcloud.bigquery

dataset = bigquery.dataset "mydataset"
dataset.default_expiration = 3600000

ドキュメントの通り、単位はmsecで、設定以降に作られたテーブルは、その作成した時間から上記設定時間経過後に自動的に削除されます。作成済みのテーブルには反映されませんし、作成済みのテーブル個別に対して削除期限を変更する設定はないようです(これこれで欲しいのですが)。また、1時間より短い設定はできません。

あと注意として、Datasetに対してオーナーの権限(Is owner)を持ったキー(上記のコードでいうkeyfile.json)でないと設定できませんでした。編集権限(Can edit)では設定できませんでした。

現状ではUIからは1日で削除するか否かの設定はできますが、細かい指定をするには上記のようにAPIを使って設定するしかなさそうです。

が、これでテーブルの管理の一手間が減って大変助かりますね。