こんにちは、プロダクトチームの宮本です!
今回は CData Sync V24 で追加された REPLICATE_LASTMODTIME() と REPLICATE_NEXTINTERVAL() という関数についてご紹介したいと思います。と言ってもこちらの関数を通常の差分更新できるようなケースでは使う機会はありません。利用ケースとしては、CDC を有効化してないようなデータベースでも差分でデータ取得したいという要件だったり、SaaS 系でも API 制約で1リクエスト最大30日間までの期間指定のみだけど全期間のデータを取得したいというケースにて、追加された2つの関数を使う機会が出てきます。それではこの関数について見ていきましょう。
REPLICATE_LASTMODTIME()とREPLICATE_NEXTINTERVAL()
まずはREPLICATE_LASTMODTIME() についてです。こちらは、Syncで各レプリケートタスクごと差分判定用に保持している日時の値を参照できる関数となります。具体的には、Syncの設定情報が保存されているDB(Derby) の sync_status というテーブルにある LASTMODTIME カラムを参照しています。
次に REPLICATE_NEXTINTERVAL() は、名前のとおりレプリケート時の期間指定を指定できる関数でして、ジョブ画面の差分レプリケーション編集にあるレプリケーション間隔を参照しています。
この値は自由に変更できます。上記設定の場合、30日間ずつ現在日時までデータを取得しにくような指定となっています。では、実際に試してみましょう。
使い方
この関数を使うためには以下の項目の設定と、レプリケートクエリに両方の関数を指定する必要があります。
ジョブ画面の差分レプリケーション設定
レプリケートクエリ
例:
REPLICATE [Account] SELECT * FROM [Account] WHERE [LastModifiedDate] >= REPLICATE_LASTMODTIME() AND [LastModifiedDate] <= REPLICATE_NEXTINTERVAL()
MySQL から PostgreSQL へのレプリケーションで検証
MySQL には4月、5月、6月の更新日時を持ったレコードが5件存在しています。
ジョブの設定は、差分開始日を2024/06/01 から、レプリケーション間隔を7日にしました。
実行結果は想定通り6月の更新日時のレコード2件となりました。
実際にMySQLへ発行したSQLは以下のように7日間ずつ現在日時まで取得しにいきます。
SELECT * FROM [account_mysql] WHERE ([LastModifiedDate] >= '2024-06-01 00:00:00.000') AND ([LastModifiedDate] <= '2024-06-08 00:00:00.000')
SELECT * FROM [account_mysql] WHERE ([LastModifiedDate] >= '2024-06-08 00:00:00.000') AND ([LastModifiedDate] <= '2024-06-15 00:00:00.000')
SELECT * FROM `account_mysql` WHERE (`LastModifiedDate` >= '2024-06-15 00:00:00.000') AND (`LastModifiedDate` <= '2024-06-17 07:56:01.625')
では、2回目を実行してみますと1件の取得に変わりました。
実際の発行したSQLをログファイルで確認してみると、以下のように条件で指定した期間が動いていることが確認できました。
(間隔をあけずに実行したので分レベルでしか変化ありませんが)
SELECT * FROM `account_mysql` WHERE (`LastModifiedDate` >= '2024-06-16 08:52:36.000') AND (`LastModifiedDate` <= '2024-06-17 08:09:18.654')
今回の条件は全て指定時刻のレコードも含めるクエリでしたので、毎回実行しても最終レコードが取得される形になりましたが、同期先でMergeされるので重複エラーは発生しません。(同期先がBigQuery の場合は別途パラメータ設定が必要です)
なので、クエリベースでDBの差分レコード取得、および同期先への更新が簡単に指定できるようになりました。もちろんデータソースが SaaS の場合でも指定可能です。
おわりに
いかがでしたでしょうか。今回ご紹介した関数を用いることで動的な期間指定が行えるようになったので、色々なユースケースで使える場面があるかと思います。CDataSync は30日間の無償トライアルが可能です。ぜひお試しくださいませ!
CData Sync | ノーコードで始めるETL / ELT パイプラ
関連コンテンツ