11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BigQuery 日付で自動的にパーティションを区切り有効期限を設定する

Posted at

永久保存する必要のないデータにおすすめ。
日付ごとのテーブルを追加していく必要もないし、有効期限が切れたパーティションを自動で削除してくれる。

テーブル作成

BigQueryのWebUIでテーブルを作成する。

構成例:
プロジェクト:sample-project
データセット:sample-dataset
作成するテーブル:user_login

user_login
[
    {
        "name": "date",
        "type": "TIMESTAMP",
        "mode": "REQUIRED"
    },
    {
        "name": "user_id",
        "type": "INTEGER",
        "mode": "REQUIRED"
    }
]

テキスト編集に切り替えてJSONコードを貼りつけます。
最初はフォームで設定した後にJSONコードを出力してみるといいでしょう。
慣れたら自分でJSONコード作って貼りつけた方が早いと思います。
eade80b1c8026d97501dd2dd8bd82bf4.png
詳細オプションでパーティションの対象となるカラムを選択します。
今回は「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日」になっているのが分かります。

483f5aec29e13cd447723a44ffd79bb1.png

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?