Snowflake の増分転送を設定する

このガイドでは、Snowflake から BigQuery への増分データ転送を構成する方法について説明します。増分転送では、前回の転送実行以降に変更されたデータのみを転送できるため、転送時間とコストを削減できます。

制限事項

Snowflake の増分転送には、次の制限があります。

  • upsert 書き込みモードを使用するには、主キー列を指定する必要があります。詳細については、増分転送の主キーを定義するをご覧ください。
  • 主キーはソーステーブル内で一意である必要があります。重複が存在する場合、BigQuery の統合オペレーションの結果に一貫性がなく、ソースデータと一致しない可能性があります。
  • 増分転送によるスキーマ変更の自動処理はサポートされていません。ソーステーブルのスキーマが変更された場合は、BigQuery テーブルのスキーマを手動で更新する必要があります。
  • 増分転送は、ソースデータの変更が少数のパーティションに集中している場合に最適です。更新がソーステーブル全体に分散している場合、多くのパーティションをスキャンする必要があるため、増分転送のパフォーマンスが大幅に低下する可能性があります。データ転送間で変更される行が多い場合は、代わりに完全転送を使用することをおすすめします。
  • Snowflake の一部のオペレーション(CREATE OR REPLACE TABLECLONE など)では、元のテーブル オブジェクトとそれに関連付けられた変更追跡履歴が上書きされる可能性があります。これにより、既存のデータ転送が古くなり、増分転送を再開するには新しい完全同期が必要になります。
  • 増分転送は、変更の追跡のために Snowflake のデータ保持期間内に収まるように、十分な頻度で実行する必要があります。最後の転送がこの期間外に実行された場合、次の転送は完全転送になります。

増分転送を構成する

Snowflake 転送を設定するときに、転送構成で [増分] の書き込み設定を選択することで、増分転送を構成できます。

データ転送で [増分] を選択した場合は、[追加] または [Upsert] の書き込みモードで転送できます。これらのモードは、データの増分転送中に BigQuery にデータを書き込む方法を定義します。[Upsert] 書き込みモードを有効にするには、カスタム スキーマ ファイルで主キーを定義する必要があります。主キーが定義されていない場合、転送はデフォルトで Append 書き込みモードになります。以降のセクションでは、使用可能な書き込みモードについて説明します。

[追加] 書き込みモード

追加書き込みモードでは、宛先テーブルに新しい行のみが挿入されます。このオプションでは、ソーステーブルに挿入された新しい行のみが厳密にアンロードされ、既存のレコードをチェックせずに転送されたデータが追加されるため、このモードでは宛先テーブルでデータが重複する可能性があります。

[Upsert] 書き込みモード

upsert 書き込みモードでは、主キーを使用して宛先テーブルのレコードを更新、挿入、削除できます。指定された主キーが宛先 BigQuery テーブルに存在する場合、Snowflake コネクタはレコードを正しく挿入、更新、削除して、変更を反映します。主キーが宛先テーブルに存在しない場合、コネクタはソースの挿入または更新に対して新しいレコードを挿入します。この場合、削除はスキップされます。

増分データ転送で upsert 書き込みモードを使用するには、カスタム スキーマ ファイルで主キーを定義する必要があります。主キーを選択する際は、次の点に注意してください。

  • 主キーは、更新するレコードをコネクタが識別するために必要なテーブルの 1 つ以上の列です。

  • テーブルのすべての行で一意の null 以外の値を含む列を選択します。システムが生成した識別子、一意の参照コード(自動増分式の ID など)、不変の時間ベースのシーケンス ID を含む列をおすすめします。

  • データの損失や破損を防ぐため、選択する主キー列には一意の値が必要です。選択した主キー列の一意性に疑問がある場合は、代わりに [追加] 書き込みモードまたは完全取り込みを使用することをおすすめします。

スキーマ変更の動作

増分転送ではスキーマの進化はサポートされていません。列の追加、削除、名前変更、列のデータ型の変更など、ソーステーブル スキーマを変更すると、後続の増分転送の実行が失敗します。ソーススキーマの変更が発生した場合は、完全なデータ転送を実行してデータを再同期する必要があります。

増分転送用のカスタム スキーマ ファイル

カスタム スキーマ ファイルを使用して、増分転送の主キーを定義し、スキーマ マッピングをカスタマイズできます。カスタム スキーマ ファイルは、ソーススキーマとターゲット スキーマを記述する JSON ファイルです。

Upsert モードの増分転送では、1 つ以上の列を主キーとして指定する必要があります。これを行うには、カスタム スキーマ ファイルで PRIMARY_KEY 使用タイプを使用して列にアノテーションを付けます。

次の例は、O_ORDERKEYO_ORDERDATEorders テーブルの主キーとして定義するカスタム スキーマ ファイルを示しています。


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

変更の追跡を有効にする

増分 Snowflake 転送を設定する前に、次のコマンドを使用して、各ソーステーブルで変更の追跡を有効にする必要があります。

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

テーブルで変更追跡が有効になっていない場合、Snowflake コネクタはデフォルトでそのテーブルの完全なデータ転送を行います。

次のステップ

Snowflake の増分転送に必要なすべての手順を構成したら、Snowflake の転送構成で増分転送を有効にできます。詳細については、Snowflake 転送を設定するをご覧ください。