Help us understand the problem. What is going on with this article?

CData Sync の変数設定、スケジューリング、オプション(一部)について

本記事は、CData Software Advent Calendar 2019 6日目の記事です。

はじめに

CData Sync ではデータソース、同期先DBへのコネクション作成、ジョブ作成がメイン作業になりますが、今回はジョブに変数をセットする方法や、スケジューリングやレプリケートオプションにフォーカスして紹介します。

コネクションやジョブの作成については前回の記事を参照ください。
https://qiita.com/miyamon44/items/7aebb96c5bf5ca271504

ジョブに変数をセット

各ジョブごとに前処理、後処理としてコードを入れることができます。これにより、ジョブ実行時の日付をテーブル名などに設定したり、別なバッチを起動することもできるようになります。

「イベント」タブを選択することで、以下の画面が表示されます。また、右側にあるスニペットの挿入をクリックすると、いくつかサンプルコードが自動的にセットされます。
image.png

テーブル名に年月を付与

今回は上記赤枠のように、以下のコードを<!-- Code goes here -->の下あたりにセットして確認してみます。

<api:set attr="out.env:currentdate"  value="[null | now() | todate('yyyyMMdd')]" />
<api:push item="out"/>

currentdateには実行日が入ってきますので、ジョブ設定画面で以下のようにクエリ内にセットします。
こうすることで、Accountテーブルの後ろに実行年月日が入ってきますので、月ごとのテーブルをレプリケート先に作成することができます。

REPLICATE [Account{env:currentdate}] SELECT * FROM [Account]

実行後、レプリケート先には正しく実行日が付与されたテーブル名が作成されています。
image.png

年月日カラムを追加して複合主キーとして登録

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列に実行日がセットされています。
image.png

スケジューリング

作成したジョブに対してスケジューリング設定を行うことができます。「スケジュール」タブを選択後、チェックボックスをオンにすることで設定エリアが有効になります。
image.png

上の画面では、「Run Job」の下は「毎時何分」という項目でしたが、下の画面では「分」になっています。その切り替えは「Run Job」で行っており、選択した内容で変わるようになっています。
image.png

「Run Job」で選択できる内容と、下の項目で選択できる内容は以下の通りです。

■「Run Job」:Minute
選択値:10, 15, 20, 25, 30

■「Run Job」:Hourly
選択値:0 ~ 59

■「Run Job」:Daily
選択値:hh:mm 形式で。

■「Run Job」:Weekly
image.png

■「Run Job」:Monthly
image.png

■「Run Job」:Advanced
Cron式で設定が可能です。そのため、Minuteで設定できる10分間隔よりも短い間隔で設定することが可能になります。以下は5分間隔で設定した内容。
image.png

スケジューリングすることでトップ画面のジョブ一覧に次の実行タイミングが表示されるようになります。
image.png

ジョブ単位のオプション

「Advanced」タブを選択すると、以下のオプション画面が表示されます。ジョブごとに各種機能を設定することが可能ですので、ここでいくつかご紹介します。
image.png

レプリケート間隔、単位

レプリケート間隔とは、データソースへアクセスする頻度を期間で指定することができます。
例えば、以下画面の設定の場合、先頭レコードの更新日付から2か月単位に刻みながらAPIへのアクセスを行っていく設定になります。例えば、SalesforceのAccountオブジェクトの場合、LastModifiedDate の最も古い日付が2019-04-23 なので、それから60日毎に区切ってAPIへアクセスするようCData Sync で制御するようになっています。
※差分更新対象のデータソースのみ
image.png

レプリケート開始日

その名の通り、レプリケート対象となるレコードの範囲を期間で指定できます。差分更新ではないが、全件レプリケートは不要な際に便利です。
image.png

以下は、Accountオブジェクトの中身になりますが、上記画面で2019-08-20からのデータをレプリケート対象とするよう指定していますので、連携されるデータは以下の2件となります。
image.png

テーブル削除

レプリケート前にテーブルを削除することを意味していますので、テーブル構造から全て再作成したいときに便利です。逆にオフの場合は、差分だけの更新になります。
image.png

以下のリンクよりCData Syncのコネクタ一覧がみれますので、アイコン右上に★マークがあるものが差分更新できるデータソースになります。
https://www.cdata.com/jp/sync/connections/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away