Datastream を使用して BigQuery のパーティション分割テーブルにデータを取り込む

クエリのパフォーマンスを向上させ、費用を制御するために、BigQuery テーブルを小さなセグメントに分割する必要がある場合があります。Datastream は BigQuery のテーブルのパーティション分割テーブルをサポートしていないため、ストリームを開始する前にパーティションを手動で追加する必要があります。BigQuery でのパーティショニングの概要については、パーティション分割テーブルの概要をご覧ください。

BigQuery のパーティション分割テーブル

BigQuery でテーブルをパーティショニングするには、ユースケースに応じて、以降のセクションで説明するオプションのいずれかを使用します。

オプション 1: テーブルが BigQuery にすでに存在し、ストリームに含まれている

  1. ストリームのソース構成からテーブルを除外します。ソース構成へのオブジェクトの追加と除外の詳細については、ソース データベースを構成するをご覧ください。
  2. 数分待って、Datastream がテーブルのすべてのイベントの処理を完了したことを確認します。
  3. BigQuery でパーティション分割テーブルを作成します。元の BigQuery テーブルにすでに存在していたデータを保持する場合は、テーブルに一時的に別の名前を付けます。
  4. 元のテーブルから新しいパーティション分割テーブルにデータをコピーします。
  5. 元のテーブルを削除または名前変更した。
  6. 新しいテーブルの一時的な名前を元のテーブルの名前に変更します。
  7. ソーステーブルをストリームの構成に追加します

オプション 2: テーブルが BigQuery に存在しない

  1. 次のいずれかの方法を使用して 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)
      
  2. パーティション分割テーブルを作成したら、max_staleness 値が要件に従って設定されていることを確認します。値を設定しない場合は、0 のデフォルト値が設定されます。この値を 0 に設定すると、最新のデータが保証されますが、コストが大幅に増加します。テーブルの最適な値を見つける方法については、max_staleness オプションで BigQuery テーブルを使用するをご覧ください。

  3. ソーステーブルをストリームの構成に追加します

  4. 必要に応じて、ストリームに手動バックフィルを設定した場合は、テーブルのバックフィルを開始します。