
CData Sync ではPostgreSQL, MySQL, Oracle, SQL Server などのDB をデータソースとするデータ連携のケースでは、CDC ジョブにすることでデータソース側で削除されたデータのキャプチャが可能となります。ただし削除されたデータの連携は_cdatasync_deleted というカラムにTRUE (1) もしくはFALSE (0) の値が連携され、物理削除ではなく論理削除となります。同期先も物理削除する場合は、CData Sync の変換機能で対応することができます。本記事では変換機能を用いてデータソースで削除されたレコードを同期先も物理削除するための方法について解説します。
CDCジョブの詳細については Change Data Capture(CDC)とは?CDC の基本から仕組み、各種手法を完全解説 をご参照ください。
検証環境 / シナリオ
本記事で検証しているCData Sync のバージョンは25.2.9306.0 となります。シナリオとしては、PostgreSQL からSnowflake への連携で、初回連携後にPostgreSQLの連携テーブルからレコードを削除し、2回目の連携時にSnowflake からも該当のレコードを物理削除する流れとなります。今回のシナリオではデータソースにPostgreSQL を使用していますが、CDC ジョブが利用できる他のデータソースでも同様の手順で物理削除の連携が可能です。
データの事前準備
予めPostgreSQL とSnowflake の接続を作成しPostgreSQL からSnowflake へ連携するジョブを作成しておきます。PostgreSQL に次のようなSQL を実行し連携するテーブルを作成しておきます。
CREATE TABLE example_user (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO example_user (username, email) VALUES
('user1', 'user1@example.com'),
('user2', 'user2@example.com'),
('user3', 'user3@example.com');
設定方法
変換タブから[変換を追加] -> [新しい変換を追加]をクリックします。

フォームに次のように入力します。
- 名前: 任意の変換名
- 種類: SQL
- 同期先: [連携先の接続]

画面右のトリガーセクション内の設定をクリックし、次のようにトリガーを設定します。
- 種類: ジョブ後
- ジョブ: [レコードを物理削除するテーブルが含まれるCDC ジョブ]

次にクエリタブ -> [クエリを追加]をクリックし次のようなクエリを追加します。
DELETE FROM {同期先テーブル名} WHERE "_cdatasync_deleted" = true
※上記クエリは本検証で動作確認したものです。ジョブ・接続の設定値、接続先に応じて、ダブルクォーテーションが不要になるなどの修正が必要になる場合がございます。変換先DBで有効なSQLを設定ください。

これで設定は完了しました。
検証
初回のジョブを実行後、PostgreSQL で次のようなクエリを実行しレコードを削除します。
DELETE FROM example_user WHERE username = 'user3';
再度CDCのジョブを実行した後に、作成した変換が実行され、ステータスがSuccessfulになっていることを確認します。

Snowflake上で連携先のテーブルを参照するとレコードが削除されていることを確認できます。

まとめ
本記事では、CData Sync のCDC 連携における削除レコードの物理削除の方法について説明しました。CData Sync でその他お困りのことがありましたら弊社テクニカルサポートまでお問い合わせください。