本記事は、CData Software Advent Calendar 2019 6日目の記事です。
はじめに
CData Sync ではデータソース、同期先DBへのコネクション作成、ジョブ作成がメイン作業になりますが、今回はジョブに変数をセットする方法や、スケジューリングやレプリケートオプションにフォーカスして紹介します。
コネクションやジョブの作成については前回の記事を参照ください。
https://qiita.com/miyamon44/items/7aebb96c5bf5ca271504
ジョブに変数をセット
各ジョブごとに前処理、後処理としてコードを入れることができます。これにより、ジョブ実行時の日付をテーブル名などに設定したり、別なバッチを起動することもできるようになります。
「イベント」タブを選択することで、以下の画面が表示されます。また、右側にあるスニペットの挿入をクリックすると、いくつかサンプルコードが自動的にセットされます。
テーブル名に年月を付与
今回は上記赤枠のように、以下のコードをの下あたりにセットして確認してみます。
<api:set attr="out.env:currentdate" value="[null | now() | todate('yyyyMMdd')]" />
<api:push item="out"/>
currentdateには実行日が入ってきますので、ジョブ設定画面で以下のようにクエリ内にセットします。
こうすることで、Accountテーブルの後ろに実行年月日が入ってきますので、月ごとのテーブルをレプリケート先に作成することができます。
REPLICATE [Account{env:currentdate}] SELECT * FROM [Account]
実行後、レプリケート先には正しく実行日が付与されたテーブル名が作成されています。
年月日カラムを追加して複合主キーとして登録
snapshot_date というカラムを追加し、その中に実行年月日が格納されるようにします。加えて、(snapshot_date VARCHAR(10) PRIMARY KEY) と設定することで複合主キーとして登録することができます。
REPLICATE [Account_wk] (snapshot_date VARCHAR(10) PRIMARY KEY) SELECT id, name, {env:currentdate} as [snapshot_date] FROM [Account]
実行結果がこちらです。赤枠左側を見ますと、snapshot_date という項目が追加されPKになっていることが確認できます。また右側の赤枠では、snapshot_date列に実行日がセットされています。
スケジューリング
作成したジョブに対してスケジューリング設定を行うことができます。「スケジュール」タブを選択後、チェックボックスをオンにすることで設定エリアが有効になります。
上の画面では、「Run Job」の下は「毎時何分」という項目でしたが、下の画面では「分」になっています。その切り替えは「Run Job」で行っており、選択した内容で変わるようになっています。
「Run Job」で選択できる内容と、下の項目で選択できる内容は以下の通りです。
■「Run Job」:Minute
選択値:10, 15, 20, 25, 30
■「Run Job」:Hourly
選択値:0 ~ 59
■「Run Job」:Daily
選択値:hh:mm 形式で。
■「Run Job」:Advanced
Cron式で設定が可能です。そのため、Minuteで設定できる10分間隔よりも短い間隔で設定することが可能になります。以下は5分間隔で設定した内容。
スケジューリングすることでトップ画面のジョブ一覧に次の実行タイミングが表示されるようになります。
ジョブ単位のオプション
「Advanced」タブを選択すると、以下のオプション画面が表示されます。ジョブごとに各種機能を設定することが可能ですので、ここでいくつかご紹介します。
レプリケート間隔、単位
レプリケート間隔とは、データソースへアクセスする頻度を期間で指定することができます。
例えば、以下画面の設定の場合、先頭レコードの更新日付から2か月単位に刻みながらAPIへのアクセスを行っていく設定になります。例えば、SalesforceのAccountオブジェクトの場合、LastModifiedDate の最も古い日付が2019-04-23 なので、それから60日毎に区切ってAPIへアクセスするようCData Sync で制御するようになっています。
※差分更新対象のデータソースのみ
レプリケート開始日
その名の通り、レプリケート対象となるレコードの範囲を期間で指定できます。差分更新ではないが、全件レプリケートは不要な際に便利です。
以下は、Accountオブジェクトの中身になりますが、上記画面で2019-08-20からのデータをレプリケート対象とするよう指定していますので、連携されるデータは以下の2件となります。
テーブル削除
レプリケート前にテーブルを削除することを意味していますので、テーブル構造から全て再作成したいときに便利です。逆にオフの場合は、差分だけの更新になります。
以下のリンクよりCData Syncのコネクタ一覧がみれますので、アイコン右上に★マークがあるものが差分更新できるデータソースになります。
https://www.cdata.com/jp/sync/connections/