永久保存する必要のないデータにおすすめ。
日付ごとのテーブルを追加していく必要もないし、有効期限が切れたパーティションを自動で削除してくれる。
テーブル作成
BigQueryのWebUIでテーブルを作成する。
構成例:
プロジェクト:sample-project
データセット:sample-dataset
作成するテーブル:user_login
[
{
"name": "date",
"type": "TIMESTAMP",
"mode": "REQUIRED"
},
{
"name": "user_id",
"type": "INTEGER",
"mode": "REQUIRED"
}
]
テキスト編集に切り替えてJSONコードを貼りつけます。
最初はフォームで設定した後にJSONコードを出力してみるといいでしょう。
慣れたら自分でJSONコード作って貼りつけた方が早いと思います。
詳細オプションでパーティションの対象となるカラムを選択します。
今回は「date」
自動作成も可能です。(カラム名は「_PARTITIONTIME」になる)
リアルタイムにデータを挿入する場合は自動でもよいでしょう。
バッチ等で後から異なる日付で登録する場合は、今回の「date」のようにTIMESTAMP型のカラムを作ります。
全件取得することがなければ「パーティションフィルタを要求」にチェックをつけます。
チェックをつけるとデータ取得時に日付で絞り込みをしないとエラーになります。
(これで間違えて全件取得してしまう事故も防げます)
※注意点
・BigQueryのデフォルトタイムゾーンは「UTC」
・分割テーブルあたりの最大パーティション数 4000(※執筆時点)
https://cloud.google.com/bigquery/quotas?hl=ja#partitioned_tables
パーティションに有効期限を設定
WebUIで操作できない項目なのでコマンドラインツールを使います。
https://cloud.google.com/sdk/docs/?hl=ja
インストールした後にコンソール起動するとgoogleに認証を求められるので(勝手にブラウザが起動します)
BigQueryのアカウントとパスワードでログインしてください。
その後コンソールでどのプロジェクトを操作するのか聞かれるので選択します。
今回は「sample-project」
設定が終わったらコンソールで以下のコマンドを打ちます。
bq update --time_partitioning_expiration 2592000 sample-project:sample-dataset.user_login
これでパーティションの有効期限が30日になりました。
スキーマの詳細を見ると「パーティションの有効期限」という項目が増えていて設定値が「30日」になっているのが分かります。