クエリのパフォーマンスを向上させ、費用を制御するために、BigQuery テーブルを小さなセグメントに分割する必要がある場合があります。Datastream は BigQuery のテーブルのパーティション分割テーブルをサポートしていないため、ストリームを開始する前にパーティションを手動で追加する必要があります。BigQuery でのパーティショニングの概要については、パーティション分割テーブルの概要をご覧ください。
BigQuery のパーティション分割テーブル
BigQuery でテーブルをパーティショニングするには、ユースケースに応じて、以降のセクションで説明するオプションのいずれかを使用します。
オプション 1: テーブルが BigQuery にすでに存在し、ストリームに含まれている
- ストリームのソース構成からテーブルを除外します。ソース構成へのオブジェクトの追加と除外の詳細については、ソース データベースを構成するをご覧ください。
- 数分待って、Datastream がテーブルのすべてのイベントの処理を完了したことを確認します。
- BigQuery でパーティション分割テーブルを作成します。元の BigQuery テーブルにすでに存在していたデータを保持する場合は、テーブルに一時的に別の名前を付けます。
- 元のテーブルから新しいパーティション分割テーブルにデータをコピーします。
- 元のテーブルを削除または名前変更した。
- 新しいテーブルの一時的な名前を元のテーブルの名前に変更します。
- ソーステーブルをストリームの構成に追加します
オプション 2: テーブルが BigQuery に存在しない
次のいずれかの方法を使用して BigQuery にテーブルを作成します。
- BigQuery 移行ツールキットを使用します。
Datastream と互換性のある BigQuery テーブルを手動で作成します。たとえば、テーブルを作成し、
TIMESTAMP列に基づいてデータをパーティショニングする場合は、次のようなクエリを使用できます。CREATE TABLE dataset.partitioned_table ( 'id' INT64, 'name' STRING 'update_date' DATETIME, 'datastream_metadata' STRUCT<'uuid' STRING, 'source_timestamp' INT64>, PRIMARY KEY ('id') NOT ENFORCED ) PARTITION BY TIMESTAMP(update_date)
パーティション分割テーブルを作成したら、
max_staleness値が要件に従って設定されていることを確認します。値を設定しない場合は、0のデフォルト値が設定されます。この値を0に設定すると、最新のデータが保証されますが、コストが大幅に増加します。テーブルの最適な値を見つける方法については、max_stalenessオプションで BigQuery テーブルを使用するをご覧ください。必要に応じて、ストリームに手動バックフィルを設定した場合は、テーブルのバックフィルを開始します。