クラスタ化テーブルの概要

このドキュメントでは、BigQuery でのテーブル クラスタリングのサポートの概要について説明します。

概要

BigQuery でクラスタ化テーブルを作成すると、テーブルのスキーマ内の 1 つ以上の列の内容に基づいてテーブルのデータが自動的に編成されます。指定した列は、関連するデータを同じ場所に配置するために使用されます。複数の列を使用してテーブルをクラスタ化する場合は、指定する列の順序が重要です。指定した列の順序によって、データの並べ替え順序が決まります。

クラスタリングは、フィルタ句を使用するクエリやデータを集計するクエリなど、特定のタイプのクエリのパフォーマンスを向上させることができます。クエリジョブまたは読み込みジョブによってデータがクラスタ化テーブルに書き込まれると、BigQuery はクラスタリング列の値を使用してデータを並べ替えます。これらの値は、BigQuery ストレージ内の複数のブロックにデータを整理するために使用されます。クラスタリング列に基づいてデータをフィルタする句を含むクエリを送信すると、BigQuery は並べ替えられたブロックを使用して不要なデータのスキャンを省略します。

同様に、クラスタリング列の値に基づいてデータを集計するクエリを送信すると、ブロックの並べ替えによって類似の値を持つ行が同じ場所に配置されるため、パフォーマンスが向上します。

クラスタリングを使用する場合

BigQuery では現在、分割テーブルのクラスタリングがサポートされています。次の場合に、分割テーブルにクラスタリングを使用します。

  • データがすでに日付列またはタイムスタンプ列によって分割されている。
  • 通常、クエリで特定の列に対するフィルタまたは集計を使用している。

テーブルのクラスタリングは、取り込み時間パーティション分割テーブルと、DATE 列または TIMESTAMP 列でパーティション分割テーブルの両方でサポートされています。現在、分割テーブル以外のテーブルではクラスタリングはサポートされていません。

クラスタリングとパーティショニングを併用すると、データは日付列またはタイムスタンプ列で分割され、異なる列のセットにクラスタ化されます。この場合、各パーティション内のデータは、クラスタリング列の値に基づいてクラスタ化されます。パーティショニングは、(スキャンされたパーティションに基づいて)クエリの正確なコスト見積もりを取得する方法を提供します。

分割テーブルのクラスタリング

日付列またはタイムスタンプ列で分割されたテーブルでは、各パーティションに 1 日分のデータが含まれます。データの格納時に、BigQuery は 1 つのブロック内のすべてのデータが単一のパーティションに属していることを確認します。パーティション分割テーブルは、テーブルを変更するすべてのオペレーション(クエリジョブ、データ操作言語(DML)のステートメント、データ定義言語(DDL)のステートメント、読み込みジョブ、コピージョブ)でこれらのプロパティを維持します。そのため、パーティション分割されていないテーブルより多くのメタデータを維持する必要があります。パーティションの数が増えると、メタデータのオーバーヘッドが増加します。

データをグローバルに分割することにより、さらに多くのメタデータを維持する必要がありますが、BigQuery はクエリを実行する前にそのクエリで処理されるバイト数をより正確に見積もることができます。このコスト計算は、クエリの最終コストの上限を提供します。

クラスタ化テーブルでは、BigQuery はクラスタリング列の値に基づいてデータを自動的に並べ替えて、最適なサイズのストレージ ブロックにデータを整理します。クラスタ化と分割が行われるテーブルを作成することで、より詳細な並べ替えを実現できます。クラスタ化テーブルは、テーブルを変更する各オペレーションのコンテキストの中で並べ替えプロパティを維持します。その結果、BigQuery は、クエリで処理されるバイト数、またはクエリの費用を正確に見積もることができない場合があります。クエリ中にデータのブロックが削除されるときには、BigQuery はクエリの費用が最大限削減されるようにベスト エフォート型の処理を行います。

自動再クラスタリング

データがクラスタ化されたテーブルに追加されると、新しく挿入されたデータは、すでに書き込まれているブロックのキー範囲と重複するキー範囲を含むブロックに書き込まれる場合があります。これらの重複するキーは、テーブルの sort プロパティを弱めます。

クラスタ化されたテーブルのパフォーマンス特性を維持するため、BigQuery はバック グラウンドで自動再クラスタリングを実行し、テーブルのソート プロパティを復元します。パーティション分割テーブルでは、各パーティションの範囲内のデータに対してクラスタリングが維持されます。

クラスタ化テーブルの割り当てと上限

分割テーブルとともにクラスタ化テーブルの機能を使用すると、分割テーブルの制限が適用されます。

割り当てと制限は、クラスタ化テーブルに対して実行される次のようなさまざまな種類のジョブにも適用されます。

すべての割り当てと制限の詳細については、割り当てと制限をご覧ください。

クラスタ化テーブルの料金

BigQuery でクラスタ化テーブルを作成して使用する場合、テーブルに格納されるデータの量とデータに対して実行するクエリに基づいて料金が発生します。

クラスタ化テーブルへのデータの読み込み、テーブルとパーティションのコピー、データのエクスポートなど、クラスタ化テーブルのオペレーションの多くは無料です。ただし、BigQuery の割り当てと制限が適用されます。すべての無料オペレーションについては、料金ページの無料のオペレーションをご覧ください。

クラスタ化テーブルの料金設定の例について詳しくは、料金ページをご覧ください。

開発中の機能

次の機能は開発中ですが、現時点では利用できません。

  • 分割テーブル以外のテーブルでのクラスタリングのサポート。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。