Gluesync 2.3の新機能:Databricks ターゲットエージェント

Gluesync 2.3 では、新しい Databricks ターゲットエージェントが追加されました。スナップショットおよび CDC の変更は、Unity Catalog 内の Delta テーブルに、SQL ウェアハウス上のキー照合型 MERGE ステートメントとして取り込まれます。これには、Unity Catalog ボリュームからの一括スナップショット、および OAuth サービスプリンシパルまたは PAT 認証が利用されます。

Gluesync 2.3 では、新しい Databricks ターゲットエージェント が追加されました。これは、Databricks SQL ウェアハウスおよび Databricks SQL ステートメント実行 API を通じて、Unity Catalog に登録された Delta Lake テーブルにスナップショットや CDC の変更を反映します。すべての変更は、キーに基づいて照合される Delta MERGE であるため、挿入、更新、削除が行われても、テーブルはソースと常に一致した状態が保たれます。

DatabricksはGluesyncのターゲットです。サポートされているソースはすべて、Core Hub内のパイプラインを通じてDatabricksにデータを供給します。まずスナップショットが送信され、次にソースエージェントのCDCストリームが送信されます。Core Hubに必要なのは、ワークスペースへのアウトバウンドHTTPS接続のみです。JDBCドライバー、クラウドストレージの認証情報、外部ロケーションは一切不要です。

エージェントの動作

  • スナップショットおよびCDCの変更を、Unity Catalog内のDeltaテーブルに、キー照合されたMERGEステートメントとしてSQLウェアハウスに書き込みます
  • Unity Catalogボリュームから大規模なスナップショットを一括で読み込みます(1回の読み込みにつき1つのMERGEを実行)
  • OAuthサービスプリンシパル(M2M)または個人用アクセストークンを使用して認証を行います
  • Unity Catalogのinformation_schemaからスキーマ、Deltaテーブル、列、および主キーを検出します
  • 同じウェアハウス上でQuery Studioおよびデータ比較を実行します

AWS、Azure、Google Cloud上の、Unity CatalogとSQLウェアハウス(サーバーレス、Pro、またはClassic)を備えたあらゆるDatabricksワークスペース(Databricks Free Editionを含む)で動作します。

なぜキーによるMERGEなのか

デルタテーブルは、変更をMERGEで処理するのが最適です。そのため、すべてのバッチはこの方法で適用されます:

  • 挿入と更新: MERGE … WHEN MATCHED THEN UPDATE SET … WHEN NOT MATCHED THEN INSERT …。行は、変更前のキーに基づいてNULL安全に(<=>)照合されるため、キーを変更する更新が行われると、その行が移動します。
  • 削除: MERGE … WHEN MATCHED THEN DELETE。
  • TRUNCATE、および最初のスナップショットバッチ: TRUNCATE TABLE エンティティのすべてのテーブルに対して実行されます(スナップショット前のTRUNCATEを無効にするが設定されていない場合)。

デルタ MERGE は、2つのソース行が同じターゲット行と一致する場合に失敗し、CDCバッチは1つの行に何度もアクセスする可能性があります。Gluesyncは変更の順序を維持し、各キーが1回だけ出現するステートメントに分割します。行の後のイメージと前のイメージが同じ列を含む場合、後のイメージが前のイメージに置き換えられ、キーの変更や異なる列のセットがある場合は新しいステートメントが開始されます。各行の最後の変更がテーブルに残されます。

コネクタが書き込む各ステートメントは、同じ結果となる場合、2回実行されることがあります。レート制限(HTTP 429)、利用できないデータウェアハウス(HTTP 502~504)、および接続切断については、Retry-Afterに従い、バックオフを適用して最大5回再試行されます。失効したOAuthトークンは1回のみ置き換えられます。

Unity Catalog ボリュームからの一括スナップショット

エンティティでスナップショット作成中の一括操作を有効にすると、そのスナップショットが一括で読み込まれます:

  • 行は JSON Lines ファイルにステージングされ、Unity Catalog ボリュームから MERGE … USING read_files(…) を使用して、一括スナップショット読み込みあたりの行数(デフォルト 1,000,000)ごとに、およびスナップショットの最後に読み込まれます。
  • Gluesync は、ステージングされたトランザクションが読み込まれて初めてそれを確認するため、再起動後はそれらが再度送信され、一度書き込まれます。
  • ステージングされたファイルは、読み込みのたびに削除されます。
  • デフォルトのステージングボリュームは <catalog>.gluesync_staging.bulk_files であり、存在しない場合はコネクタによって作成されます。必要に応じて、一括スナップショット用のステージングボリューム を独自の catalog.schema.volume に指定することもできます。

CDCおよびマルチテーブルエンティティは、トランザクションごとのMERGEを使用します。

Gluesyncが生成するテーブル

CREATE TABLE IF NOT EXISTS <catalog>.<schema>.<table> (…) USING DELTA。キー列はNOT NULLであり、pk_<table>という名前の情報用PRIMARY KEY制約となります。スキーマ検出はこの情報を読み取るため、エンティティがテーブルにマッピングされる際にキーが再検出されます。

作成するテーブル

カタログ内の任意のDeltaテーブルをターゲットにできます。スキーマ、テーブル、および列は<catalog>.information_schemaから取得されます。列は、テーブルがその列に対してPRIMARY KEY制約を宣言している場合にキーとなります。そうでない場合、キーはエンティティのマッピングから取得されます。

列は明示的にマッピングされるため、テーブルをソースと同期させておく必要があります。変更が反映されている列がテーブルに存在しない場合、UNRESOLVED_COLUMNエラーにより書き込みが失敗します。

書き込み設定

  • MERGE文あたりの最大行数 (maxRowsPerStatement): エンティティあたりデフォルト1000行。また、ステートメントは3,000,000文字に達する前に切り詰められますが、これはDatabricksのステートメントが消費し得る16 MiBをはるかに下回ります。大規模なスナップショットの場合はこの値を増やしてください。
  • ステートメントのタイムアウト(秒単位) (statementTimeoutSeconds): デフォルトは 600 秒です。この時間が経過しても実行中のステートメントは、ウェアハウス上でキャンセルされます。
  • スナップショット前/後の SQL コマンドおよび CDC コマンド はエンティティごとに、ウェアハウス上で実行されます。これらは冪等性を保つようにしてください。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。