CData Software Blog

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

【CData Sync ハンズオン】Google BigQuery を軸にしたデータ分析基盤をCDataSyncで構築してみよう!

f:id:sennanvolar44:20200923125718p:plain

はじめに

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

ハンズオンの内容

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

  • データソースの接続設定
  • 同期先の接続設定
  • Salesforce → BigQuery へのレプリケート
  • kintone → BigQuery へのレプリケート
  • BigQuery → MySQL へのレプリケート
  • その他機能の紹介

CData Sync製品のインストール&アクティベート

今回はCDataSyncのインストールは行いません。
必要であれば以下の記事を参考にインストールを行ってください。

www.cdatablog.jp

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

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

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

f:id:sennanvolar44:20200922181349p:plain

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

Sync では、レプリケートジョブを実行時に同期先DBに対してテーブルを自動で作成するようになりますが、その際にBigQueryの情報として必要なのがプロジェクトIDとデータセットIDになりますので、この情報をBigQueryのコネクション設定画面で入力します。

ヘッダーで「接続」をクリックして以下の画面を表示後、「同期先」→「BigQuery」の順でクリックしていきます。
f:id:sennanvolar44:20200922210441p:plain

今回、BigQuery への接続にはサービスアカウントを使用します。接続情報ファイルの内容をコピーして以下項目に設定お願いします。

【設定タブ】

  • 名前:BigQuery
  • フォーマット設定:プロパティリスト
  • Auth Scheme:OAuth
  • Dataset Id:利用するBigQueryのデータセットID(RDBでいうスキーマ
  • Project Id:GCP のプロジェクトID

【Advancedタブ】

  • OAuth JWT Cert: p12ファイルのパス
  • OAuth JWT Cert Password:パスワード
  • OAuth JWT Cert Subject: *
  • OAuth JWT Cert Type:PFXFILE
  • OAuth JWT Issuer: サービスアカウント名

入力完了後、設定タブに戻って右下の接続ボタン押下をクリック
f:id:sennanvolar44:20200922210032p:plain

接続テストが正常に完了した場合は、画面に緑色の帯でSuccessなどと表示されますので、右上の「変更を保存」で保存を行います。
f:id:sennanvolar44:20200922210332p:plain

これでBigQueryのコネクション設定が完了です。

Salesforce の取引先データをBigQuery にSync

f:id:sennanvolar44:20200922173355p:plain

それでは実際にSalesforceからBigQueryへのレプリケートを行います。

ジョブの作成

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

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

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

f:id:sennanvolar44:20200922213153p:plain

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

f:id:sennanvolar44:20200922214329p:plain

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

f:id:sennanvolar44:20191125104018p:plain

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

なお、以下は今回レプリケートするSalesforceの取引先データの一部になります。合計で47件あります。
f:id:sennanvolar44:20200922220229p:plain

ジョブの実行

それでは作成したジョブを実行してみます。ジョブのチェックボックスをオンにし、実行ボタンをクリックします。しばらくたつと、上部に緑のメッセージボックスで「ジョブ[ジョブ名] は正常に完了しました。Records affected: 13 ・・・」といったメッセージが表示されれば成功です。
f:id:sennanvolar44:20200922215429p:plain

BigQuery コンソールより確認

では、BigQueryのコンソール画面にて、Salesforceのデータがレプリケートされているか確認してみます。
左のサイドメニューに表示されている「opendx01」というのがデータセットになりますが、その配下にAccountというテーブルが作成されているのが確認できます。
またSelect * from Account でAccountテーブルのレコードを参照すると、このようにSalesforceのレコードがレプリケートされていることがわかります。
f:id:sennanvolar44:20200922220434p:plain

日本語カラムのkintone のデータをBigQuery にSync

それでは、Salesforce → BigQuery のジョブ作成時と同じ要領で、kintone → BigQuery のレプリケートジョブを作成していきます。
f:id:sennanvolar44:20200922222552p:plain

kintone のコネクタを追加

デフォルトではkintoneコネクタが含まれてないので、手動で追加してあげる必要があります。
「接続」→ 「+Add More」をクリックします。
f:id:sennanvolar44:20200922223042p:plain

kintone と検索エリアに入力し、kintone アイコンをクリックします。
f:id:sennanvolar44:20200922223227p:plain

「ダウンロード&インストール」をクリックします。
f:id:sennanvolar44:20200922223259p:plain

kintone コネクタの追加が完了するとこのようにメッセージが表示されます。
f:id:sennanvolar44:20200922223444p:plain

OKボタン押下後、CDataSyncが再起動されます。その後ログイン画面よりログインを行い、また接続設定画面を表示してみると、このようにkintone アイコンが一覧に表示されるようになります。
f:id:sennanvolar44:20200922223719p:plain

kintone のコネクション設定

表示されたkintone アイコンをクリックして、他と同じようにコネクション設定を行います。
接続情報ファイルの内容をコピーして以下項目に設定お願いします。

  • 名前:kintone
  • フォーマット設定:プロパティリスト
  • URL:kintone のURL
  • User:kintoneユーザー名
  • Password:パスワード
  • Check For Subtables In:* (サブテーブルを検索するかどうか)
  • Subtable Separator Character:_ (サブテーブル区切り文字)

入力完了後、右下の接続ボタン押下をクリック
f:id:sennanvolar44:20200922225048p:plain

kintone からBigQueryへのレプリケートジョブを作成

ヘッダーの「ジョブ」から「ジョブを追加」をクリックし、以下のようにソースに「kintone」、同期先に「BigQuery」を設定して作成する。
f:id:sennanvolar44:20200922225849p:plain

「テーブルを追加」からkintone のアプリ一覧を表示させ、今回は「顧客管理(営業支援パック)」を選択します。
f:id:sennanvolar44:20200922230319p:plain

ちなみに以下はkintoneにある「顧客管理(営業支援パック)」アプリの中身になります。これをBigQuery にレプリケートしていきます。
f:id:sennanvolar44:20200922230908p:plain

kintone は上記キャプチャにもあるように項目名は日本語となっていますが、BigQueryでは日本語を含むマルチバイトの項目名を作成することができません。
なので事前に項目名は英字に変更しておく必要があります。

では、赤枠部分のクエリをクリックし以下の画面表示させます。
f:id:sennanvolar44:20200922230647p:plain

カラムマッピングタブをクリックすると、各項目同士の紐づけ状態を確認できるようになっています。ここで日本語項目のものを英字に直してあげます。
また真ん中の矢印にマウスホバーすると、右矢印かバツが表示されますので、連携不要な項目などはここでバツを設定してレプリケート対象外にしてみます。
f:id:sennanvolar44:20200922232546p:plain

BigQuery に設定するテーブル名も今は日本語のままなので、英字に変更しておきます。変更箇所は直接クエリを修正するか、一般タブのテーブル名で変更が可能です。

f:id:sennanvolar44:20200922233306p:plain

ジョブの実行

それでは作成したジョブを実行してみましょう。
f:id:sennanvolar44:20200922233430p:plain

ジョブのチェックボックスをオンにして実行ボタンをクリックします。
正常に終了すれば緑色の帯にメッセージが表示されます。
f:id:sennanvolar44:20200922233630p:plain

BigQuery コンソールよりkintone データの確認

では、BigQueryのコンソール画面にて、kintone のデータがレプリケートされているか確認してみます。 データセットの「opendx01」配下に「CustomerList_kintone」というテーブルが作成されているのが確認できます。
f:id:sennanvolar44:20200923103814p:plain

またSelect * from CustomerList_kintone で顧客管理(営業支援パック)テーブルのレコードを参照すると、このようにkintone のレコードがレプリケートされていることがわかります。

f:id:sennanvolar44:20200923104037p:plain

BigQuery からローカルDB(MySQL)にSync

今まではBigQuery にデータをレプリケートする内容をご紹介してきましたが、今度はBigQuery のデータをローカルにあるMySQL にレプリケートしてみます。
ちなみに、レプリケート先には主要RDBをはじめ、RedShiftやsnowflakeなどのクラウドデータウェアハウスやNoSQL系、Access、S3、CSVファイルなどへレプリケートすることが可能となっています。
f:id:sennanvolar44:20200923111905p:plain

MySQL のコネクション設定

接続設定画面のにて、「同期先」→「MySQLのアイコン」の順にクリックします。
f:id:sennanvolar44:20200923112103p:plain

接続情報ファイルの内容をコピーして以下項目に設定お願いします。

  • 名前:MySQL
  • フォーマット設定:プロパティリスト
  • Server:MySQL起動中のサーバ(localであればlocalhostの指定でOK)
  • Port:MySQL のポート
  • Database:MySQLのデータベース名
  • User:MySQLのユーザー
  • Password:MySQLユーザーのパスワード

f:id:sennanvolar44:20200923115236p:plain

BigQueryからローカルのMySQLへのレプリケートジョブを作成

ここからはジョブを作成していきますが、手順はこれまでの内容と同じです。
f:id:sennanvolar44:20200923115441p:plain

「テーブルを追加」から今回はSalesforceからレプリケートされたAccountテーブルをMySQLに連携させたいと思いますので、Account にチェックを入れ選択します。
f:id:sennanvolar44:20200923115734p:plain

作成されたクエリをクリックし、レプリケート対象の項目を絞ってみます。
f:id:sennanvolar44:20200925112101p:plain

赤枠の下矢印から「新規テーブルを作成」をクリックします。
※この画面で赤帯でエラーメッセージが表示されている場合がありますが、そのまま進めて頂いて構いません。
f:id:sennanvolar44:20200925112332p:plain

テーブル名は任意の名前で設定します。
f:id:sennanvolar44:20200925112558p:plain

次にレプリケート対象の項目を画面上から設定します。カラムマッピングタブをクリックして、以下の画面を表示させます。
矢印があるところにカーソルを当てると×印が表示されるので、それをクリックしますとレプリケート対象項目から除外されます。
f:id:sennanvolar44:20200925112915p:plain

対象項目を設定しましたら、画面下部にあるOKボタンをクリックします。
もし画面解像度などで下のOKボタンが見えない場合は他のタブに移動してからOKボタンをクリックでも大丈夫です。
f:id:sennanvolar44:20200925113505p:plain

ジョブの実行

それではBigQueryのデータをローカルのMySQLにレプリケートしてみます。作成したジョブの左にあるチェックボックスをオンにして実行ボタンよりレプリケートジョブを実行します。
f:id:sennanvolar44:20200925113747p:plain

正常に処理が完了しましたら、実際にMySQL WorkBench を使ってMySQLの中を見てみましょう。

MySQL WorkBench を使用してレプリケートデータを確認

画面下段にあるタスクバーよりMySQL WorkBench をクリックし、Localインスタンスへ接続する赤枠の接続先をクリックします。
f:id:sennanvolar44:20200923121013p:plain

handson というデータベースを選択してTablesをクリックすると、accountという先ほどCDataSyncで指定したテーブル名でテーブルが作成されているのが確認できました。 また、select文を実行すると、このようにBigQueryに格納されていたデータがMySQLにレプリケートされていることが確認できます。

f:id:sennanvolar44:20200923121505p:plain

その他機能の紹介

いろいろとあるCDataSync の機能について、いくつかピックアップしてご紹介します。

差分更新

CDataSync では一部のデータソースに対して差分更新を行うことができます。そのため差分更新モードがオンの場合、2回目からのレプリケート時は前回からの変更分のみが転送されるようになります。

差分更新モードのオンオフの判断は、以下ジョブオプションの「テーブルを削除」か「テーブルデータを削除」のどちらもチェックがついていない場合にオンとなります。
f:id:sennanvolar44:20200923123453p:plain

どのデータソースが差分更新対象なのかは以下WEBサイトのデータソース一覧にて、アイコンの右上に★マークがあるものが対象となります。
※★マークがないものについても手動で差分更新を行えるものもありますので、気になるデータソースがあればCData サポートまでご連絡下さい。
https://www.cdata.com/jp/sync/connections/
f:id:sennanvolar44:20200923123756p:plain

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

スケジューリング機能はジョブ設定の「スケジュール」タブを選択し、「スケジューラーを有効にする」にチェックを入れますと設定することができます。設定内容は、分~月や、cron式での柔軟な設定を行うことができます。
f:id:sennanvolar44:20191126133347p:plain

設定すると、ジョブ画面に次の実行予定日時が表示されるようになります。
f:id:sennanvolar44:20191127165558p:plain

データソース側で削除されたデータを同期先にも反映

CHECKCACHE コマンドというものを使用して、データソース側とレプリケート先で連携データの突合を行うことができます。
例えば、データソース側で削除されてしまったレコードは差分更新モードの場合、レプリケート先には基本的に反映されませんが、CHECKCACHE を実行することでデータソースを正にしてレプリケート先を修復してくれます。
www.cdatablog.jp

既存テーブルへのマッピング

既存システムなどのテーブルへもデータを連携させることができます。
また、1つのテーブルを作成し、そこにいくつかのデータソースのデータを集めるということもできるようになっています。
www.cdatablog.jp

おわりに

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

CDataSync は30日間無料でお試しいただけるようになっています。
当ハンズオンは一時的なVMになりますので別な環境で使用したい場合は、以下WebサイトよりCDataSync をダウンロードしてご利用ください。