BigQueryで時間単位の列でのパーティション分割テーブルを作成する

背景

BigQueryでパーティショニングテーブルを作成することになりました。以前も作ったのですが、2度目作るにあたって情報がまとまってないことに気づいたのでこちらに記載していきます。

BigQueryのパーティショニング

BigQueryのパーティショニングの種類は以下のページにまとまっています。

https://cloud.google.com/bigquery/docs/partitioned-tables

今回のデータは日単位で集計したいと思っています。かつ、BigQueryでは標準時間になってしまうので、こちらで指定したカラムにdate型のデータを保持して、そのカラムの値を基準にパーティショニングしたいと思います。

分割テーブルの作成

では実際に作成していきます

スキーマの作成

スキーマはjsonファイルにまとめます

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"name": "id",
"type": "STRING",
"mode": "REQUIRED"
},
{
"name": "created_date",
"type": "DATE",
"mode": "REQUIRED"
}
]

created_dateというカラムを基準にパーティショニングします。test.jsonというファイルで保存します。

テーブルの作成

bqコマンドでテーブルを作成します。コマンドのオプションについてはこちらに記載があります。

オプションにはいろんな種類がありますが、利用するのは--schema--time_partitioning_fieldだけです。(--time_partitioning_typeはデフォルトがDAYのため)

1
2
$ bq mk --table --schema test.json --time_partitioning_field created_date project:dataset.test
Table 'project:dataset.test' successfully created.

テーブルの作成が終わったので内容を確認します。GCPのコンソールから作成したテーブルを選択、右の詳細タブを選択します。

表の情報の中にパーティションに関する情報が表示されます

1
2
3
4
テーブルタイプ         分割
パーティショニングの基準 Day
フィールドで分割     created_date
パーティション フィルタ 不要

正しく作成できました。

まとめ

BigQueryでパーティションテーブルを作成する方法をまとめました。次回からはスムーズに行えると思います。