複数指定した場合、単純な「どちらかの値が大きければすべて取得する」というOR条件ではなく、「1番目に指定したカラムの更新を最優先し、同じ日時のデータがある場合は、2番目に指定したカラムの大きさで判定する」というルール(タイブレークの仕組み)で抽出されます。
例えば同じ時刻に大量のデータ更新が発生した場合でも、データの抜け漏れを防ぎながら正確に新しいデータだけを特定できます。
画面での設定イメージ
設定画面では、もっとも基準にしたいカラムが一番左(1番目)に配置されるように指定してください。
1番目の判別カラム:
updated_at(日付・時刻型) ★最優先2番目の判別カラム:
id(数値型・文字列型など)
具体的な判定ルール
前回の転送処理で記録された最終レコードの最大値が、以下の状態だったとします。
updated_at(データ更新日)の最大値:2024-01-01idの最大値:100
この場合、次回の転送では以下のように判定されます。
| レコードのデータ(updated_at , id) | 転送の判定 | 判定の理由 |
|---|---|---|
2024-01-02 , 100 | 〇 | 最優先である1番目の「日付」が前回より進んでいるため、IDに関係なく新しいデータとみなされます。 |
2024-01-02 , 50 | 〇 | 最優先である1番目の「日付」が前回より進んでいるため、IDが小さくなっていても新しいデータとみなされます。 |
2024-01-01 , 101 | 〇 | 日付は前回と同じですが、2番目の「ID」が前回(100)より大きいため、まだ転送していない新しいデータとみなされます。 |
2024-01-01 , 99 | × | 日付が前回と同じで、IDも前回(100)以下であるため、すでに前回転送済みのデータとみなされます。 |
最優先は1番目に指定した「日付・時刻」が新しいかどうかです。
日付・時刻が全く同じデータが複数あったときだけ、2番目に指定した「ID」が前回より大きいかをチェックして、未転送のデータを見つけ出します。
補足
内部的には、TROCCOが前回の最終ジョブ実行時に記録した各カラムの最大値(履歴値)をもとに、転送元のデータベースに対して以下のような WHERE 句の条件式を自動生成してデータを抽出しています。
WHERE (updated_at > '2024-01-01')
OR (updated_at = '2024-01-01' AND id > 100)
このように、1番目のカラム(updated_at)が同値だった場合のみ、2番目のカラム(id)の大小比較が評価されるロジック(タイブレーク)となっています。
コメント
0件のコメント
記事コメントは受け付けていません。