BigQueryのパーティションとクラスタリングはどちらもクエリのパフォーマンスを向上させるための機能ですが、その仕組みは異なります。
本記事にて、パーティションとクラスタリングの違いについてまとめます。
ソース
まとめ
機能 | パーティション | クラスタリング |
---|---|---|
仕組み | テーブルを分割 | データを並べ替える |
効果 | クエリ対象を絞り込む | 関連データを近くに配置 |
適用列 | 1列 | 最大4列 |
よく使われる列 | 日付、タイムスタンプ | ユーザーID、商品IDなど |
パーティション
- テーブルを特定の列(パーティションキー)の値に基づいて複数のセグメントに分割する。
- クエリにパーティションキーが含まれる場合、BigQueryは該当するパーティションのデータのみを読み取る。
- 分割基準は、時間(日、月、年など)、取り込み時間、整数範囲など。
- メリット
- クエリのパフォーマンス向上
- コスト削減(スキャンするデータ量を減らすため)
- テーブル管理の効率化
クラスタリング
- 特定の列(クラスタリングキー)の値に基づいて、テーブル内のデータをソートする。
- クラスタリングキーの値が近いデータは、物理的に近い場所に格納される。
- メリット
- クエリのパフォーマンス向上 (特に、WHERE句やGROUP BY句でクラスタリングキーを使用する場合)
- コスト削減(スキャンするデータ量を減らすため)
例
Webサイトのアクセスログを格納するテーブルを例にします。
- パーティション:
date
列をパーティションキーにすることで、特定の日付のデータに効率的にアクセスできる。-
WHERE date = '2024-01-01'
のようなクエリは、2024年1月1日のパーティションのみを読み取る。
-
- クラスタリング:
user_id
列をクラスタリングキーにすることで、特定のユーザーのアクセスログに効率的にアクセスできる。-
WHERE user_id = 123
のようなクエリは、ユーザーID 123 のデータが格納されているブロックのみを読み取る。
-
どちらを使うべきか
- クエリで頻繁にフィルタリングする列がある場合は、パーティションを使用することを検討する。
- クエリで頻繁にグループ化したり、ソートしたりする列がある場合は、クラスタリングを使用することを検討する。
- 両方のメリットを活かしたい場合は、パーティションとクラスタリングを併用することも可能だ。