ノーコードでクラウド上のデータとの連携を実現。
詳細はこちら →CData Sync のヒストリーモードを使ってレコードの変更履歴を同期先DB に保持:Salesforce -> MySQL を例に
Jonathan HikitaCData Sync でレコードの変更履歴を保持したい
CData Sync は、Salesforce やkintone などのSaaS データをお好みのDB/DWH にレプリケーションしてくれるデータパイプラインツールです。400を超えるSaaS/DB データに対応しています。
CRM の案件管理データなどを扱う際に最新のデータを見るだけではなく、「この顧客はいつ確度が上がったか」「受注ターゲット日付は後ろ倒しになっていないか」などのデータの動きに注目するマネージャーは少なくありません。CData Sync のデフォルトの使い方ですと常にSalesforce などから最新のデータをDB に同期します。差分更新が実現されており、変更があったレコードは既存のレコードを上書きします。CData Sync のヒストリーモード
以下のようなテーブルがDB にSync されたとします。
ID | UserName | Amount | Probability |
1 | Taro | 1,000,000 | 20% |
2 | Jiro | 2,000,000 | 40% |
3 | Saburo | 3,000,000 | 60% |
4 | Shiro | 4,000,000 | 80% |
5 | Goro | 5,000,000 | 100% |
翌月に担当がデータを修正してSync がデータを更新します。従来の方法。
ID | UserName | Amount | Probability |
1 | Taro | 1,000,000 | 80% |
2 | Jiro | 2,000,000 | 80% |
3 | Saburo | 10,000,000 | 60% |
4 | Shiro | 4,000,000 | 80% |
5 | Goro | 5,000,000 | 100% |
最新のデータをDB から見ることができるので、良いのですが、レコードの変更履歴で動きを見たい場合にはこのままでは不足です。
すでにCData Sync では、「スナップショット機能」を使って、Sync のジョブ実行時に毎回別の実行日付きのテーブルを保存することが可能でした。サンプル記事(https://www.cdata.com/jp/blog/sync-yahooads-bigquery)
今回のヒストリーモードは、一つのテーブル内にレコードがいつ変更されたかがわかる形でデータが保存されていきます。テーブル内の変更がないレコードについては1レコードとして保存され続けるので、スナップショット機能と比べて保存されるデータの容量がぐっと少なくなります。また、同一テーブル内で編子履歴を含むデータとして保存されるので、分析時にJOIN クエリを行わなくて良い点もとっても便利です。
先ほどと同じ案件データについては、CData Sync のヒストリーモードを使って同期をすると以下のような形でデータが同期されます。
ID | UserName | Amount | Probability | _cdatasync_active | _cdatasync_start | _cdatasync_end |
1 | Taro | 1,000,000 | 80% | 1 | 2022/8/30 0:00 | |
2 | Jiro | 2,000,000 | 80% | 1 | 2022/8/30 0:00 | |
3 | Saburo | 10,000,000 | 60% | 1 | 2022/8/30 0:00 | |
1 | Taro | 1,000,000 | 20% | 0 | 2022/7/31 0:00 | 2022/8/30 0:00 |
2 | Jiro | 2,000,000 | 40% | 0 | 2022/7/31 0:00 | 2022/8/30 0:00 |
3 | Saburo | 3,000,000 | 60% | 0 | 2022/7/31 0:00 | 2022/8/30 0:00 |
4 | Shiro | 4,000,000 | 80% | 1 | 2022/7/31 0:00 | |
5 | Goro | 5,000,000 | 100% | 1 | 2022/7/31 0:00 |
CData Sync のヒストリーモードの挙動
CData Sync のヒストリーモードには以下の3つのカラムが同期先テーブルに追加されます:
- _cdatasync_active:そのレコードがActive な(ジョブ実行時点で存在している)かを示します。
- _cdatasync_start:そのレコードがSync された日付です。差分更新の最初の日付です。
- _cdatasync_end:そのレコードがActive ではなくなった日付です。レコードが更新されて、別のActive なレコードが同期された日付となります。
上の例では、ID1 のTaro さんは、8/30 のデータ更新で、案件確度が20%から80%にあがりましたので、旧レコードのActive フラグが0になり、非Active になり、_cdatasync_end になりました。同時にID1 のActive なレコードとして案件確度が80%のレコードが新たに8/30スタートのレコードとして生成されています。
もし最新のレコードだけを参照したい際は WHERE _cdatasync_active = TRUE にしていすれば重複なく最新レコードを参照できます。もし同じデータの/もしくはテーブル内のデータ全体の動きを見たい場合にはstart / end の日付を使って動きを見ることが可能です。
挿入された行:同期先テーブルに行が追加されます。_cdatasync_active はTrue に設定され、_cdatasync_start は差分チェックカラムの値に設定されます。
更新された行:①同期先の現在の行が更新されます。_cdatasync_active はFalse に設定され、_cdatasync_end は差分チェックカラムの値に設定されます。②同期先テーブルに新しい行が挿入されます。_cdatasync_active はTrue に設定され、_cdatasync_start は差分チェックカラムの値に設定されます。
削除された行: 同期先の現在の行が更新されます。_cdatasync_active はFalse に設定されます。
CData Sync のヒストリーモードの使い方
CData Sync のヒストリーモードの使い方は、ジョブの設定で[ヒストリーモードを有効化]にチェックを入れるだけです。
- CData Sync の管理コンソールで、[接続]タブからデータソースと同期先の接続を作成します。
- [ジョブ]タブで、新しいジョブを作成します。
- ジョブ設定画面で、[タスク]をクリックして、同期するテーブルを選択します。
- ジョブ設定画面に戻り[Advance]タブをクリックし、[ヒストリーモード有効化]にチェックを入れます。
- 設定を保存します。
これだけの設定でヒストリーモードとして同期が可能です。
実際にヒストリーモード実際にしてSync の同期を実行するとこのようなデータになります。