CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Sync ハンズオン

はじめに

本資料は、CData Software Japanのハンズオン向けの資料です。本ドキュメントをもとに実機にCData Sync製品をインストールして手順に沿って操作する事で、SalesforceなどのクラウドサービスのデータをCSVファイルやMySQLといったデータベースに同期する方法、加えてCData Sync の機能を理解して頂くことを目的としています。

202202版はこちらから。

ハンズオンの内容

本ハンズオンでは以下の内容を行います。


第一部

CData Sync製品のインストール

f:id:sennanvolar44:20191124205824p:plain
最初にCData Sync をダウンロードします。こちらからダウンロードページを表示してください。

右上にダウンロードボタンがありますのでクリックします。
f:id:sennanvolar44:20191126101444p:plain

今回はWinowsマシンのため、左側のWindowsマーク配下の「DOWNLOAD NOW」をクリックします。
f:id:sennanvolar44:20191126101616p:plain

Eメールを入力し、ダウンロードボタンをクリックします。 f:id:sennanvolar44:20191202154126p:plain

そうしますと、 CDataSync.exe がダウンロードフォルダに入ってきますので、ダブルクリックしてインストールを開始します。
f:id:sennanvolar44:20191124210517p:plain

ライセンス契約書を確認後、次に進みます。
f:id:sennanvolar44:20191124210613p:plain

インストール先も支障がなければデフォルトのまま進みます。
f:id:sennanvolar44:20191124210808p:plain

デフォルトのまま次へ進みます。 f:id:sennanvolar44:20191124211009p:plain

デフォルトのまま次へ進みます。 f:id:sennanvolar44:20191124211108p:plain

CDataSync にログインする際のパスワードを設定します。今回は「password」で設定します。
f:id:sennanvolar44:20191124220922p:plain

ここまででインストールの準備が完了です。インストールボタンをクリックしてインストールを開始します。
f:id:sennanvolar44:20191124211132p:plain

以下の画面が表示されますと、インストールが完了となります。チェックボックスにチェックをつけたまま完了ボタンをクリックすることで、CDataSyncが起動されます。 f:id:sennanvolar44:20191124211259p:plain

起動するとWindowsのステータスバーにCData Sync のアイコンがこのように表示されます。
f:id:sennanvolar44:20191124215829p:plain


ライセンスのアクティベーション

CData Sync にログイン後、ヘッダーの情報タブをクリックします。今回は赤枠の「評価版をアクティベート」をクリックします。
f:id:sennanvolar44:20191124221252p:plain

名前・Eメール、ソフトウェア使用許諾契約書にチェックを入れ、「評価版をアクティベートする」をクリックします。 f:id:sennanvolar44:20191202154649p:plain

アクティベートが完了すると、赤枠のようにライセンスの種類、プロダクトキーに値がセットされます。なお、評価版は30日間まで無料でご利用いただけます。 f:id:sennanvolar44:20191124221855p:plain


Salesforce のデータをCSVファイルにSync

f:id:sennanvolar44:20191124230410p:plain まずはSaaSデータをCSVファイルへの同期を行います。 同期処理を行うためには、「①同期元へのコネクションを作成」、「②同期先へのコネクションを作成」、「③同期ジョブを作成」の3つを設定する必要があります。

今回のハンズオンでは Salesforce にある取引先のデータをレプリケートしていきます。(デモ用のSalesforceデータを使用)
f:id:sennanvolar44:20191127172134p:plain

では、順に設定していきましょう。

Salesforce へのコネクションを作成

ヘッダーで「接続」をクリックし、以下の画面で Salesforce のアイコンをクリックします。
f:id:sennanvolar44:20191124231116p:plain

Salesfroce へのコネクションの設定画面が表示されるので、名前を任意の名称(例:Salesforce)に変更して、User、Password、SecurityTokenを設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更を保存」ボタンをクリックして作成したコネクション情報を保存してください。 当ハンズオンでは以下の通り入力願います。

f:id:sennanvolar44:20191202154836p:plain

CSV へのコネクションを作成

Salesforce の接続設定と同じように接続設定画面を表示させ、同期先タブをクリック後、CSVファイルを選択します。
f:id:sennanvolar44:20191125100647p:plain

CSVへのコネクションの設定画面が表示されるので、当ハンズオンでは以下の内容で入力してください。入力後、「接続のテスト」をクリックし接続が成功しましたら、右上の「変更を保存」をクリックして接続情報を保存します。

  • 名前:CSV
  • フォーマット設定:プロパティリスト
  • Destination Folder:C:\Work\20191128
  • Include Column Headers:True

f:id:sennanvolar44:20191125101225p:plain

ジョブの作成

ヘッダーの「ジョブ」を選択後、右側にあります「ジョブを追加」をクリックします。
f:id:sennanvolar44:20191125103002p:plain

以下の画面が表示されますので、ジョブ名、ソース、同期先を入力したら「作成」をクリックします。

  • ジョブ名:SalesforceToCSV
  • ソース:Salesforceを選択
  • 同期先:CSVを選択

f:id:sennanvolar44:20191125103200p:plain

次に、Salesforce内のテーブル(オブジェクト)を選択するために「+テーブルを追加」をクリックします。 f:id:sennanvolar44:20191125103758p:plain

Salesforce内のテーブル(オブジェクト)リストが表示されるので、今回は、取引先であるAccountを選択して、「+選択したテーブルを追加」をクリックします。 f:id:sennanvolar44:20191125104018p:plain

テーブルとクエリに自動的にAccountテーブルを同期する内容が設定されました。ここでいう"テーブル" と書いてある箇所は同期先に作成するテーブル名(ファイル名)となります。"クエリ" はどういう内容で Salesforce からデータを抽出するかという意味になります。REPLICATE とは Account テーブル内容をそのまま同期することを意味しています。ジョブ内容の確認が終わりましたら、右上にある「変更を保存」をクリックし、ジョブを保存します。以上でジョブの作成が完了です。
f:id:sennanvolar44:20191125104358p:plain

ジョブの実行

それでは、アドホックSalesforceのテーブルのSyncを実行してみます。上記手順で作成したジョブのチェックボックスをチェックし、実行ボタンをクリックします。しばらくたつと、上部に薄緑のメッセージボックスで「ジョブ[ジョブ名] は正常に完了しました。Records affected: 13 ・・・」といったメッセージが表示されれば成功です。

f:id:sennanvolar44:20191125110829p:plain

同期したCSVファイルを確認

CSVファイルの接続設定で、出力先を"C:\Work\20191128" にしてましたので、エクスプローラーより参照すると、Account.csv が作成されているのが確認できました。 f:id:sennanvolar44:20191125111547p:plain

中身を参照すると、以下のように1行目にカラム名、2行目以降にSalesforceのデータが同期されました。 f:id:sennanvolar44:20191125112509p:plain
以上がCDataSync の基本的な操作内容となります。同期先がデータベースであっても設定内容はほとんど同じ内容で行うことができます。

Salesforce のデータをMySQLにSync

f:id:sennanvolar44:20191125113555p:plain ここでも同じように接続情報とジョブを作成する必要がありますが、Salesforceの接続情報は既に作成済みですので、MySQLの接続情報のみを作成していきます。

MySQL へのコネクションを作成

同期先タブをクリックし、MySQLを選択します。
f:id:sennanvolar44:20191125114000p:plain

MySQL は各仮想マシン上にインストールしてありますので、以下の接続情報を設定してください。

  • 名前:MySQL
  • フォーマット設定:プロパティリスト
  • Server:MySQLのIPもしくはホスト名
  • Port:3306
  • Database:データベース名
  • User:ユーザ
  • Password:パスワード

入力が終わりましたら、「接続のテスト」をクリックし接続確認を行います。接続ができましたら右上の「変更を保存」をクリックし接続情報を保存します。
f:id:sennanvolar44:20191202155503p:plain

ジョブの作成

先ほどと同じようにトップ画面から「ジョブを追加」をクリックし、以下の内容を設定します。同期先にCSVMySQLが表示されますが、MySQLを選択してください。選択後、作成ボタンをクリックします。

  • ジョブ名:SalesforceToMySQL
  • ソース:Salesforceを選択
  • 同期先:MySQLを選択

f:id:sennanvolar44:20191125115305p:plain

今回もSalesforce のAccount テーブルを同期することにしますので、「テーブルを追加」をクリックし、Accountテーブルを選択してください。そうしますと、先ほどと同じようにジョブが作成されます。
f:id:sennanvolar44:20191125120126p:plain

ジョブの実行

ジョブにチェックをつけ「実行」ボタンをクリックしてください。実行後、成功すれば CSV への同期のように13件同期したメッセージが表示されます。
f:id:sennanvolar44:20191125120906p:plain

同期したMySQLを確認

MySQL のデータベースに正しく同期されたことを確認するため、タスクバーの赤枠にあるMySQL Workbench をクリックし、MySQLのデータベースを参照します。 f:id:sennanvolar44:20191125122511p:plain

Local Instanse を選択後、パスワードにroot を入力しOKボタンをクリックしてください。
f:id:sennanvolar44:20191125124155p:plain

handson データベース内にaccount テーブルが作成され、テーブルの中には13件データが表示されているのが確認できました。

f:id:sennanvolar44:20191125124726p:plain

SQLServer から MySQL にSync

f:id:sennanvolar44:20191127164228p:plain
これまでは SaaS のデータを軸に、ファイルであったりDBに同期を行ってきました。今度は DB から DB への同期も行っていきます。

SQLServer へのコネクションを作成

データソースタブをクリックし、SQLServer を選択します。
f:id:sennanvolar44:20191125184537p:plain

SQLServer は各仮想マシン上にインストールしてありますので、以下の接続情報を設定してください。

  • 名前:SQLServer
  • フォーマット設定:プロパティリスト
  • Server:SQLServerのIPもしくはホスト名
  • Port:1433
  • Database:データベース名
  • User:ユーザ
  • Password:パスワード

入力が終わりましたら、「接続のテスト」をクリックし接続確認を行います。接続ができましたら右上の「変更を保存」をクリックし接続情報を保存します。
f:id:sennanvolar44:20191202155338p:plain

ジョブの作成

トップ画面から「ジョブを追加」をクリックし、以下の内容を設定します。

  • ジョブ名:SQLServerToMySQL
  • ソース:SQLServerを選択
  • 同期先:MySQLを選択

f:id:sennanvolar44:20191125185114p:plain

事前にSQLServer には Contact テーブルを登録してありますので、今回はこちらをMySQL に同期します。Contact テーブルにチェックをつけましたら、 「選択したテーブルを追加」ボタンをクリックします。
f:id:sennanvolar44:20191125190617p:plain

以下のように MySQLSQLServerのContact テーブルを同期するジョブが作成されます。

f:id:sennanvolar44:20191125192039p:plain

ジョブの実行

また同じようにジョブにチェックをつけ「実行」ボタンをクリックします。正常に処理が終了しますと、緑色のメッセージが表示されます。
f:id:sennanvolar44:20191125191526p:plain

同期したMySQLを確認

MySQL Workbench より handson データベース内にcontact テーブルが作成されているのを確認できました。
f:id:sennanvolar44:20191125193040p:plain

また、以下のようにPrimary Key も引き継がれていることが確認できます。
f:id:sennanvolar44:20191125193647p:plain

以上でDB から DB への同期処理が完了しました。

第二部

差分更新

CData Sync では差分更新を行うことができます。対応しているデータソースはここから確認できます。

以下キャプチャの赤枠部分をご参照ください。ここが★マークになっているものが差分更新に対応しているデータソースとなります。
f:id:sennanvolar44:20191125194915p:plain

今回使っている Salesforce も差分更新に対応しています。
f:id:sennanvolar44:20191125195308p:plain

Salesforce で差分更新

では、実際に Salesforce のデータを差分更新しましょう。先ほど作成した「SalesforceToMySQL」ジョブを開いてください。
今の時点ではステータスの箇所に「Records affected: 13」となっています。これが最後に実行したジョブ内容です。では、チェックボックスをオンにして、実行ボタンをクリックしてください。
f:id:sennanvolar44:20191125200012p:plain

「Records affected: 0」で実行結果が終了したと思います。これは最後に同期処理を行ってから、Salesforce のAccountオブジェクトで何も変更がなかったため、MySQLへの連携は0件ということでした。
f:id:sennanvolar44:20191125200535p:plain

この差分更新はデフォルトで行われるようになっていますが、差分更新をしたくない場合もあります。そのオンオフは以下の画面で設定することができます。

ジョブ設定の画面中段にある「Advanced」タブを選択すると表示されます。ここの「テーブルを削除」、「テーブルデータを削除」にチェックがないと差分更新を行うようになります。 f:id:sennanvolar44:20191126072020p:plain

では、「テーブルを削除」にチェックを入れてデータを再度同期してみましょう。チェック後は右上の変更を保存を忘れずにお願いします。先ほどは差分更新機能が有効だったため、同期件数は0件でしたが、今度は全件が同期されるはずです。ジョブ「SalesforceToMySQL」を開き、ジョブを実行してください。
f:id:sennanvolar44:20191126072937p:plain

オリジナルのクエリを実行

いままでは自動的に作成されたクエリで同期処理を行ってきましたが、ユーザ自身でオリジナルのクエリを設定することができます。
ジョブ設定画面の「カスタムクエリを追加」ボタンをクリックしてください。
f:id:sennanvolar44:20191126073555p:plain

クエリ入力画面が表示されます。ですが、もう少し簡単に入力できる画面があります。今回はそちらを使います。「閉じる」ボタンをクリックしてください。
f:id:sennanvolar44:20191126073713p:plain

ジョブ設定画面のクエリが書かれている赤枠あたり、もしくはクエリ右端の編集ボタンをクリックしてみてください。
f:id:sennanvolar44:20191126074006p:plain

以下の画面が表示されますので、赤枠の「Advanced」タブをクリックしてください。
f:id:sennanvolar44:20191126075608p:plain

右上にある「Add rule」ボタンをクリックすると、項目と条件式、条件を入力するエリアが表示されますので、以下の内容で入力してみてください。

  • 項目:BillingCountry を選択
  • 条件式:equal を選択
  • 条件:USA

入力を終えると、画面下部にあるクエリ部分に自動で反映されたことがわかります。
f:id:sennanvolar44:20191126104124p:plain

また、自分自身でクエリを書くこともできます。左側の「カスタムクエリを記述」のチェックボックスにチェックを入れますと、グレーで非活性となっていたクエリ部分が活性となり入力可能となります。

では、並び順を制御するために「order by Id」と加えてみます。入力後、右下のOKボタンをクリックします。
f:id:sennanvolar44:20191126105735p:plain

クエリ部分に先ほど入力した内容が反映されているのが確認できました。
f:id:sennanvolar44:20191126110323p:plain

これまでと同じようにジョブを実行しますと、今度は2件の同期が完了しました。
f:id:sennanvolar44:20191126110641p:plain

同期したMySQLを確認

account テーブルを見ると、Idが昇順になっているのと、BillingCountry はUSA だけのレコードが連携されてきたのが確認できました。
f:id:sennanvolar44:20191126111327p:plain

orderby 以外にもJOINでテーブル結合したり、GroupBy で集約したりなどをこの方法で行うことができます。

作成したジョブをコマンドでAPIを実行

作成したジョブはAPIを用いて実行することが可能です。
ヘッダーメニューからAPIを選択しますと、左側にエンドポイントが表示されます。ジョブの作成から実行、コネクションの作成など、一通りの機能をAPIで行うことができます。

API実行ユーザーの作成

ではまず初めに、APIを実行する場合はAPIを実行できるUserを作成する必要がありますので、ヘッダーの「設定」→「セキュリティ」→「追加」ボタンの順でクリックします。
f:id:sennanvolar44:20191126142702p:plain

ユーザー:userとし、権限は制限がかけられますが、全てチェックしたのち「変更を保存」ボタンをクリックします。
f:id:sennanvolar44:20191126143031p:plain

ユーザーを作成しますと、認証トークンが作成されます。APIで実行する際に認証トークンが必要となりますので、コピーしたものをエディタなどに貼り付けてください。
f:id:sennanvolar44:20191126143633p:plain

実行するAPIの確認

今度はAPIを確認します。ヘッダーの「API」をクリック後、左下の /api.rsc/executeJob をクリックします。
f:id:sennanvolar44:20191126134827p:plain

初期表示はJavaScript で実行する内容が表示されています。右のプルダウンで「cURL」を選択すると、httpリクエストができるcurlコマンドが表示されます。

f:id:sennanvolar44:20191126135253p:plain

Curlコマンドで実行

今回はcurlコマンドをコマンドプロンプトから実行してみます。まずはタスクバーにあるコマンドプロンプトを起動してください。起動しましたら、以下のコマンドをコピーし、エディタなどに貼り付けてください。貼り付けましたら、x-cdata-authtoken: XXXXXXXXの”XXXXXXXX”に、先ほど作成したユーザーの認証トークンに変更してください。

curl --header "x-cdata-authtoken: XXXXXXXX" -X POST -H "Content-Type: application/json" -d "{ \"JobName\": \"SalesforceToMySQL\"}" "http://localhost:8019/api.rsc/executeJob"

変更しましたら、コマンドプロンプトに貼り付けて実行しましょう。
処理が完了すると、実行結果が返ってきます。 f:id:sennanvolar44:20191126152457p:plain

CDataSyncのジョブ画面(SalesforceToMySQL)をご参照ください。最後の更新が今の時間に変更されたのが確認できました。
f:id:sennanvolar44:20191126152634p:plain

ちなみに、API を使わなくてもコマンドラインで実行できます。ジョブ設定画面の「スケジュール」タブを選択後、コマンドライントリガーと書かれているコマンドとパラメータで実行することが可能です。実際、Windowsバッチの中に組み込んで使っているユーザさまも多いです。

スケジューリングして実行

スケジューリング機能はジョブ設定の「スケジュール」タブを選択し、「スケジューラーを有効にする」にチェックを入れますと設定することができます。設定内容は、分~月や、cron式での柔軟な設定を行うことができます。今回はスケジュールの設定だけになりますがやってみましょう。

f:id:sennanvolar44:20191126133347p:plain

トップ画面に戻ってください。次の実行が設定されているのが確認できます。 f:id:sennanvolar44:20191127165558p:plain

おわり

以上でハンズオンは終了となります。長時間お疲れ様でした。

追加 JDBC Driver for Salesforce でDVBisualizer からSalesforce データを管理

DbVisualizer で Salesforce データに連携しクエリを作成