注意:こちらの記事の情報はCData Sync の過去バージョンにもとづいています。最新のハンズオン手順については、こちらの最新記事をご参照ください。
はじめに
本資料は、CData Software Japanのハンズオン向けの資料です。本ドキュメントをもとに実機にCData Sync製品をインストールして手順に沿って操作する事で、SalesforceなどのクラウドサービスのデータをCSVファイルやMySQLといったデータベースに同期する方法、加えてCData Sync の機能を理解して頂くことを目的としています。
202202版はこちらから。
ハンズオンの内容
本ハンズオンでは以下の内容を行います。
- Salesforce → CSVファイルへのアーカイブ
- Salesforce → MySQLへのレプリケート
- SQLServer → MySQLへのレプリケート
- 差分更新
- オリジナルのクエリを実行
- APIで実行
第一部
CData Sync製品のインストール
最初にCData Sync をダウンロードします。こちらからダウンロードページを表示してください。
右上にダウンロードボタンがありますのでクリックします。
今回はWinowsマシンのため、左側のWindowsマーク配下の「DOWNLOAD NOW」をクリックします。
Eメールを入力し、ダウンロードボタンをクリックします。
そうしますと、 CDataSync.exe がダウンロードフォルダに入ってきますので、ダブルクリックしてインストールを開始します。
ライセンス契約書を確認後、次に進みます。
インストール先も支障がなければデフォルトのまま進みます。
デフォルトのまま次へ進みます。
デフォルトのまま次へ進みます。
CDataSync にログインする際のパスワードを設定します。今回は「password」で設定します。
ここまででインストールの準備が完了です。インストールボタンをクリックしてインストールを開始します。
以下の画面が表示されますと、インストールが完了となります。チェックボックスにチェックをつけたまま完了ボタンをクリックすることで、CDataSyncが起動されます。
起動するとWindowsのステータスバーにCData Sync のアイコンがこのように表示されます。
ライセンスのアクティベーション
CData Sync にログイン後、ヘッダーの情報タブをクリックします。今回は赤枠の「評価版をアクティベート」をクリックします。
名前・Eメール、ソフトウェア使用許諾契約書にチェックを入れ、「評価版をアクティベートする」をクリックします。
アクティベートが完了すると、赤枠のようにライセンスの種類、プロダクトキーに値がセットされます。なお、評価版は30日間まで無料でご利用いただけます。
Salesforce のデータをCSVファイルにSync
まずはSaaSデータをCSVファイルへの同期を行います。 同期処理を行うためには、「①同期元へのコネクションを作成」、「②同期先へのコネクションを作成」、「③同期ジョブを作成」の3つを設定する必要があります。
今回のハンズオンでは Salesforce にある取引先のデータをレプリケートしていきます。(デモ用のSalesforceデータを使用)
では、順に設定していきましょう。
Salesforce へのコネクションを作成
ヘッダーで「接続」をクリックし、以下の画面で Salesforce のアイコンをクリックします。
Salesfroce へのコネクションの設定画面が表示されるので、名前を任意の名称(例:Salesforce)に変更して、User、Password、SecurityTokenを設定して、「接続のテスト」ボタンをクリックします。上段に「接続に成功しました。」のメッセージが出たら成功です。「変更を保存」ボタンをクリックして作成したコネクション情報を保存してください。 当ハンズオンでは以下の通り入力願います。
- 名前:Salesforce
- フォーマット設定:プロパティリスト
- User:Salesforce のアカウント
- Password:Salesforceのパスワード
- Security Token:Salesforceより発行されたセキュリティトークン
CSV へのコネクションを作成
Salesforce の接続設定と同じように接続設定画面を表示させ、同期先タブをクリック後、CSVファイルを選択します。
CSVへのコネクションの設定画面が表示されるので、当ハンズオンでは以下の内容で入力してください。入力後、「接続のテスト」をクリックし接続が成功しましたら、右上の「変更を保存」をクリックして接続情報を保存します。
- 名前:CSV
- フォーマット設定:プロパティリスト
- Destination Folder:C:\Work\20191128
- Include Column Headers:True
ジョブの作成
ヘッダーの「ジョブ」を選択後、右側にあります「ジョブを追加」をクリックします。
以下の画面が表示されますので、ジョブ名、ソース、同期先を入力したら「作成」をクリックします。
- ジョブ名:SalesforceToCSV
- ソース:Salesforceを選択
- 同期先:CSVを選択
次に、Salesforce内のテーブル(オブジェクト)を選択するために「+テーブルを追加」をクリックします。
Salesforce内のテーブル(オブジェクト)リストが表示されるので、今回は、取引先であるAccountを選択して、「+選択したテーブルを追加」をクリックします。
テーブルとクエリに自動的にAccountテーブルを同期する内容が設定されました。ここでいう"テーブル" と書いてある箇所は同期先に作成するテーブル名(ファイル名)となります。"クエリ" はどういう内容で Salesforce からデータを抽出するかという意味になります。REPLICATE とは Account テーブル内容をそのまま同期することを意味しています。ジョブ内容の確認が終わりましたら、右上にある「変更を保存」をクリックし、ジョブを保存します。以上でジョブの作成が完了です。
ジョブの実行
それでは、アドホックにSalesforceのテーブルのSyncを実行してみます。上記手順で作成したジョブのチェックボックスをチェックし、実行ボタンをクリックします。しばらくたつと、上部に薄緑のメッセージボックスで「ジョブ[ジョブ名] は正常に完了しました。Records affected: 13 ・・・」といったメッセージが表示されれば成功です。
同期したCSVファイルを確認
CSVファイルの接続設定で、出力先を"C:\Work\20191128" にしてましたので、エクスプローラーより参照すると、Account.csv が作成されているのが確認できました。
中身を参照すると、以下のように1行目にカラム名、2行目以降にSalesforceのデータが同期されました。
以上がCDataSync の基本的な操作内容となります。同期先がデータベースであっても設定内容はほとんど同じ内容で行うことができます。
Salesforce のデータをMySQLにSync
ここでも同じように接続情報とジョブを作成する必要がありますが、Salesforceの接続情報は既に作成済みですので、MySQLの接続情報のみを作成していきます。
MySQL へのコネクションを作成
同期先タブをクリックし、MySQLを選択します。
MySQL は各仮想マシン上にインストールしてありますので、以下の接続情報を設定してください。
- 名前:MySQL
- フォーマット設定:プロパティリスト
- Server:MySQLのIPもしくはホスト名
- Port:3306
- Database:データベース名
- User:ユーザ
- Password:パスワード
入力が終わりましたら、「接続のテスト」をクリックし接続確認を行います。接続ができましたら右上の「変更を保存」をクリックし接続情報を保存します。
ジョブの作成
先ほどと同じようにトップ画面から「ジョブを追加」をクリックし、以下の内容を設定します。同期先にCSVとMySQLが表示されますが、MySQLを選択してください。選択後、作成ボタンをクリックします。
- ジョブ名:SalesforceToMySQL
- ソース:Salesforceを選択
- 同期先:MySQLを選択
今回もSalesforce のAccount テーブルを同期することにしますので、「テーブルを追加」をクリックし、Accountテーブルを選択してください。そうしますと、先ほどと同じようにジョブが作成されます。
ジョブの実行
ジョブにチェックをつけ「実行」ボタンをクリックしてください。実行後、成功すれば CSV への同期のように13件同期したメッセージが表示されます。
同期したMySQLを確認
MySQL のデータベースに正しく同期されたことを確認するため、タスクバーの赤枠にあるMySQL Workbench をクリックし、MySQLのデータベースを参照します。
Local Instanse を選択後、パスワードにroot を入力しOKボタンをクリックしてください。
handson データベース内にaccount テーブルが作成され、テーブルの中には13件データが表示されているのが確認できました。
SQLServer から MySQL にSync
これまでは SaaS のデータを軸に、ファイルであったりDBに同期を行ってきました。今度は DB から DB への同期も行っていきます。
SQLServer へのコネクションを作成
データソースタブをクリックし、SQLServer を選択します。
SQLServer は各仮想マシン上にインストールしてありますので、以下の接続情報を設定してください。
- 名前:SQLServer
- フォーマット設定:プロパティリスト
- Server:SQLServerのIPもしくはホスト名
- Port:1433
- Database:データベース名
- User:ユーザ
- Password:パスワード
入力が終わりましたら、「接続のテスト」をクリックし接続確認を行います。接続ができましたら右上の「変更を保存」をクリックし接続情報を保存します。
ジョブの作成
トップ画面から「ジョブを追加」をクリックし、以下の内容を設定します。
- ジョブ名:SQLServerToMySQL
- ソース:SQLServerを選択
- 同期先:MySQLを選択
事前にSQLServer には Contact テーブルを登録してありますので、今回はこちらをMySQL に同期します。Contact テーブルにチェックをつけましたら、 「選択したテーブルを追加」ボタンをクリックします。
以下のように MySQL へSQLServerのContact テーブルを同期するジョブが作成されます。
ジョブの実行
また同じようにジョブにチェックをつけ「実行」ボタンをクリックします。正常に処理が終了しますと、緑色のメッセージが表示されます。
同期したMySQLを確認
MySQL Workbench より handson データベース内にcontact テーブルが作成されているのを確認できました。
また、以下のようにPrimary Key も引き継がれていることが確認できます。
以上でDB から DB への同期処理が完了しました。
第二部
差分更新
CData Sync では差分更新を行うことができます。対応しているデータソースはここから確認できます。
以下キャプチャの赤枠部分をご参照ください。ここが★マークになっているものが差分更新に対応しているデータソースとなります。
今回使っている Salesforce も差分更新に対応しています。
Salesforce で差分更新
では、実際に Salesforce のデータを差分更新しましょう。先ほど作成した「SalesforceToMySQL」ジョブを開いてください。
今の時点ではステータスの箇所に「Records affected: 13」となっています。これが最後に実行したジョブ内容です。では、チェックボックスをオンにして、実行ボタンをクリックしてください。
「Records affected: 0」で実行結果が終了したと思います。これは最後に同期処理を行ってから、Salesforce のAccountオブジェクトで何も変更がなかったため、MySQLへの連携は0件ということでした。
この差分更新はデフォルトで行われるようになっていますが、差分更新をしたくない場合もあります。そのオンオフは以下の画面で設定することができます。
ジョブ設定の画面中段にある「Advanced」タブを選択すると表示されます。ここの「テーブルを削除」、「テーブルデータを削除」にチェックがないと差分更新を行うようになります。
では、「テーブルを削除」にチェックを入れてデータを再度同期してみましょう。チェック後は右上の変更を保存を忘れずにお願いします。先ほどは差分更新機能が有効だったため、同期件数は0件でしたが、今度は全件が同期されるはずです。ジョブ「SalesforceToMySQL」を開き、ジョブを実行してください。
オリジナルのクエリを実行
いままでは自動的に作成されたクエリで同期処理を行ってきましたが、ユーザ自身でオリジナルのクエリを設定することができます。
ジョブ設定画面の「カスタムクエリを追加」ボタンをクリックしてください。
クエリ入力画面が表示されます。ですが、もう少し簡単に入力できる画面があります。今回はそちらを使います。「閉じる」ボタンをクリックしてください。
ジョブ設定画面のクエリが書かれている赤枠あたり、もしくはクエリ右端の編集ボタンをクリックしてみてください。
以下の画面が表示されますので、赤枠の「Advanced」タブをクリックしてください。
右上にある「Add rule」ボタンをクリックすると、項目と条件式、条件を入力するエリアが表示されますので、以下の内容で入力してみてください。
- 項目:BillingCountry を選択
- 条件式:equal を選択
- 条件:USA
入力を終えると、画面下部にあるクエリ部分に自動で反映されたことがわかります。
また、自分自身でクエリを書くこともできます。左側の「カスタムクエリを記述」のチェックボックスにチェックを入れますと、グレーで非活性となっていたクエリ部分が活性となり入力可能となります。
では、並び順を制御するために「order by Id」と加えてみます。入力後、右下のOKボタンをクリックします。
クエリ部分に先ほど入力した内容が反映されているのが確認できました。
これまでと同じようにジョブを実行しますと、今度は2件の同期が完了しました。
同期したMySQLを確認
account テーブルを見ると、Idが昇順になっているのと、BillingCountry はUSA だけのレコードが連携されてきたのが確認できました。
orderby 以外にもJOINでテーブル結合したり、GroupBy で集約したりなどをこの方法で行うことができます。
作成したジョブをコマンドでAPIを実行
作成したジョブはAPIを用いて実行することが可能です。
ヘッダーメニューからAPIを選択しますと、左側にエンドポイントが表示されます。ジョブの作成から実行、コネクションの作成など、一通りの機能をAPIで行うことができます。
API実行ユーザーの作成
ではまず初めに、APIを実行する場合はAPIを実行できるUserを作成する必要がありますので、ヘッダーの「設定」→「ユーザー」→「追加」ボタンの順でクリックします。
ユーザー:userとし、パスワードに任意のパスワードを入力、API接続にチェックを入れます。
また、APIで実行する際に認証トークンが必要となりますので、認証トークンの欄をクリックしコピーしたものをエディタなどに貼り付けてください。
以上を終えたら、「追加」をクリックしてください。
すると、ユーザーが追加されます。
実行するAPIの確認
今度はAPIを確認します。ヘッダーの「API」をクリック後、左下の /api.rsc/executeJob をクリックします。
初期表示はJavaScript で実行する内容が表示されています。右のプルダウンで「cURL」を選択すると、httpリクエストができるcurlコマンドが表示されます。
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"
変更しましたら、コマンドプロンプトに貼り付けて実行しましょう。
処理が完了すると、実行結果が返ってきます。
CDataSyncのジョブ画面(SalesforceToMySQL)をご参照ください。最後の更新が今の時間に変更されたのが確認できました。
ちなみに、API を使わなくてもコマンドラインで実行できます。ジョブ設定画面の「スケジュール」タブを選択後、コマンドライントリガーと書かれているコマンドとパラメータで実行することが可能です。実際、Windowsバッチの中に組み込んで使っているユーザさまも多いです。
スケジューリングして実行
スケジューリング機能はジョブ設定の「スケジュール」タブを選択し、「スケジューラーを有効にする」にチェックを入れますと設定することができます。設定内容は、分~月や、cron式での柔軟な設定を行うことができます。今回はスケジュールの設定だけになりますがやってみましょう。
トップ画面に戻ってください。次の実行が設定されているのが確認できます。
おわり
以上でハンズオンは終了となります。長時間お疲れ様でした。
追加 JDBC Driver for Salesforce でDVBisualizer からSalesforce データを管理
DbVisualizer で Salesforce データに連携しクエリを作成
関連コンテンツ