DataSpider(Dr.Sum Connect)でSalesforceのデータをDr.Sumに取り込んでみる
Dr.Sum ConnectはSalesforce接続用のドライバーをオプションで販売しています。
Salesforceに入っているデータをリアルタイム分析するのであればMotionBoard Cloud for Salesforceがございますが、データの加工やSalesforce以外のデータと合わせて分析するときなどはDr.Sumが必要になります。
そのためにConnectなどのETLツールでSalesforceデータを分析環境に取り込むニーズはこれから出てくるかと思います。
余談ですが、この世の中に容易に加工・分析のできる仮想統合基盤ができるまでは、DWHは残るんじゃないかな、と思っています。
データ取得までの流れを確認しよう
1つのオブジェクトのデータをDr.Sumに入れるまで、手厚い処理をするのであれば、下図の構成がオススメです。
最小構成は赤枠のコンポーネント4つです。
①truncate_table
Dr.Sumの該当テーブルのデータを全件削除します
②get_data
Salesforceからデータを抽出します
③mapping
抽出したデータを加工します
④bulk_insert_table
加工したデータを高速でDr.SumにInsertします
ひとつずつ見ていきましょう。
①truncate_table
まず、Dr.Sumの該当テーブルのデータを全件削除します。
UPDATE処理とかを入れたいところですが、Dr.Sumは更新系の処理があまり強くなく、更新にはかなりの処理時間がかかってしまうため、ぼくはよくBulkInsertをつかいます。
BulkInsertをつかうためには事前にTrancate(テーブル内のデータ削除)をしなければならないので、そのための処理になります。
コンポーネント群の中から[アプリケーション]→[Dr.Sum]→[Truncate]を選択します。
[Truncate]コンポーネントから、該当テーブルを選択します。
これでOKです。
get_data
Salesforceからデータを取得します。
コンポーネント群から[クラウド]→[Salesforce]→[データ読み取り(クエリー)]を選択します。
ここから、下図のように設定をします。
赤枠:グローバルリソースで設定した接続先を選択します。
緑枠:テーブル名を選択します。
青枠:[スキーマの作成]をクリックすると緑枠で選んだテーブルの選択画面が出てきます。
Dr.Sumに取り込みたい項目を選んで[↓選択]をクリックし、指定をします。
選択が終わりましたら[了解]をクリックします。
続いては抽出条件の設定です。
SalesforceのAPIは大量データを取得する際、タイムアウトエラーが起こりがちなので、なるべくデータの件数をしぼると良いでしょう。
[SOQLの作成]をクリックします。
画面に従って、赤枠箇所のように抽出条件をセットすると、緑枠のようなSOQLが自動で記述されます。
問題なければ[了解]をクリックします。
これでSalesforceからのデータ抽出の設定はOKです。
mapping
さて、今度は加工です。
ただし、対Salesforceの場合、あまりマッピングはしないでしょう。
ここで複雑な加工をするよりもDr.Sumに入れてしまってから処理をした方が、スピードアップが図れます。
今回も単純な移行となります。
bulk_insert_table
今回はこちらのBulkInsertを使用します。
高速処理のBulkInsertですが、設定は単純ですね。
設定は以上となります。
ワークテーブルをつかおう
さて、最小で4コンポーネントSalesforceからのデータの取り込みはできました。
しかしBulkInsertをつかうとちょっと不安な点があります。
この構成だと、get_data実行時にエラーになると、事前に仕掛けたTruncateのためにDr.Sumテーブルのデータが消えた状態になるという点です。
Salesforceなどのクラウド製品とAPI接続をする場合、気を付けないとならないのがタイムアウト。
データ抽出量やそのときのクラウド製品の負荷状況次第ではタイムアウトエラーが起きます。
エラーが起きたら、Dr.Sumのテーブルは空になる、これは最悪です。
そのため、今の処理は全てワークテーブルで行うようにしましょう。
そして登場するのはこの緑枠の後続処理たちです。
上の4コンポーネントはDr.Sumのワークテーブルに入れます。
ワークテーブルは本番テーブルとまったく同じ形の別テーブルです。
上記4コンポーネントの処理が成功したら、下の3コンポーネントで、ワークテーブルのデータを本番テーブルに入れ替えます。
⑤truncate_table_data
[Truncate]コンポーネントで本番テーブルのデータを削除します。
⑥get_table_data
ワークテーブルのデータを読み込みます。
⑦bulk_insert_table_data
本番テーブルにBulkInsertします。
この3コンポーネントでエラーになることは・・・考える限り、ないです。
テーブルがない、とかそれくらいですかね。
上の4コンポーネントでエラーになっても本番テーブルは傷つきません。
これでエラーが発生しても安心な設計となります。
さいごに
try-catchやエラーログの処理などがあるので、コンポーネントの数はまだありますが、主要なものは7つです。
今回はSalesforceのデータの取り方をお伝えしましたが、SalesforceのAPIのタイムアウトに負けない運用もございます。
こちらはまた別記事で解説します。
Discussion