「世の中には難しいことが多い!」と感じることが多い私が、様々な用語を、初学者向けにわかりやすく全力で解説します。
解説する用語
Bigqueryのパーティショニングについて解説をします。
Bigqueryは大量のデータを扱うため、意図せず多くのコストが発生してしまう可能性があります。
パーティショニングをすることで、Bigqueryのコストを抑えることが出来るのでぜひ理解してみてください。
Bigqueryのパーティショニングとは
パーティショニングとは、1つのテーブルを特定の列の値に基づいて分割する機能です。テーブルを分割することでクエリ実行時に全データを読み込む必要がないため、処理時間が短縮され、コストも削減できます。
詳細に説明するよ
Bigqueryのパーティショニングについて詳細に説明していきます。
Bigqueryの料金体系
Bigqueryの料金は主に以下の2つの要素で構成されています。
- BigQueryのデータの保存料
- Bigqueryに実行するクエリの処理にかかる費用
Bigqueryはクエリを実行した際の読み込んだデータの量だけ料金がかかります。そのため、大量のデータに対してクエリを実行すると多くの料金がかかってしまいます。
Bigqueryでは大量のデータを保存する機会が多いため、クエリ実行時に多くの料金が発生する可能性が高いです。
パーティショニングとは
Bigqueryで以下のようなテーブルとデータがあるとします。
このテーブルを日付を基準にパーティショニングをすると以下のようになります。
日付を基準にパーティショニングすると、Bigqueryの内部で右側のように日付で整理されます。このようにパーティションが適用されたテーブルのことをパーティション分割テーブルと呼びます。
パーティショニングのメリット
パーティショニングを行うとクエリ実行時の読み取りの量を少なくすることが出来ます。読み取りの量が少なくなることで、クエリ実行時の処理速度が向上し、かつ料金が安くなります。
例えば、以下のSQLクエリを実行して、2025年7月1日のdeviceが「スマホ」の人を表示させたいとします。
SELECT
*
FROM
mydataset.mytable
WHERE
purchase_dt = "2025-07-01"
AND
device = "スマホ"
パーティショニングする前のデータで実行すると、すべてのデータの読み込みが発生します。右側が実行結果として取得したデータです。
パーティショニング後のデータで実行することで「2025-07-01」のデータのみに読み込みが発生します。読み込みの量が少なくなることが分かりますね。
パーティショニングするための分割基準
パーティションは以下のような基準で分割することが出来ます。
整数範囲パーティショニング
特定のINTEGER型の整数列の値の範囲に基づいてテーブルを分割できます。分割するための範囲を指定可能です。
以下の画像ではidをもとに4つの間隔でパーティショニングしています。
時間単位列パーティショニング
テーブルの DATE、TIMESTAMP または DATETIME 列で分割できます。
TIMESTAMP列とDATETIME 列では、パーティションを時間単位、日単位、月単位、年単位のいずれで作成できます。DATE列の場合、パーティションは日単位、月単位、年単位で作成できます。
取り込み時間パーティショニング
取り込み時間でパーティション分割されたテーブルを作成すると、BigQueryはデータが取り込まれたタイミングで時間を割り当てます。
取り込み時間パーティショニングも時間単位、日単位、月単位、年単位のいずれで作成できます。
取り込み時間パーティション分割テーブルには、「_PARTITIONTIME」という名前の疑似列があります。「_PARTITIONTIME」には設定した基準値(時間単位、日単位)で切り捨てられた各行の取り込み時間です。
例えば、時間単位でパーティション分割テーブルを作成した場合、取り込み時間が「2025-07-01 17:22:00」であれば、_PARTITIONTIMEには「2025-07-01 17:00:00」が割り当てられます。
取り込み時間 | _PARTITIONTIME | パーティション(時間単位) |
2025-07-01 17:22:00 | 2025-07-01 17:00:00 | 2025070117 |
パーティション分割テーブルには有効期限を設定できる
取り込み時間または時間単位の列で分割されたパーティション分割テーブルには有効期限を設定することが出来ます。有効期限が過ぎたデータは自動的に削除されます。
例えば、テーブルの期限を7日間とすると、7日間を過ぎたデータは削除されます。
まとめ
- パーティショニングとは、1つのテーブルを特定の列の値に基づいて分割する機能です
- パーティショニングにより、Bigqueryの処理時間を短縮し、コストを抑えることが出来ます
参考
本サイトでの注意事項
本サイトではなんとなく理解することを目的としているため正確性に欠ける表現があります。より正確な情報を詳しく知りたい場合は公式ドキュメントを参照ください。