🛠️

Dr.Sum ConnectでSalesforceのデータをDr.Sumに取り込んでみる

2021/11/10に公開約4,300字

Dr.Sum ConnectはSalesforce接続用のドライバーをオプションで販売しています。
Salesforceに入っているデータをリアルタイム分析するのであればMotionBoard Cloud for Salesforceがございますが、データの加工やSalesforce以外のデータと合わせて分析するときなどはDr.Sumが必要になります。

そのためにConnectなどのETLツールでSalesforceデータを分析環境に取り込むニーズはこれから出てくるかと思います。
余談ですが、この世の中に容易に加工・分析のできる仮想統合基盤ができるまでは、DWHは残るんじゃないかな、と思っています。

データ取得までの流れを確認しよう

1つのオブジェクトのデータをDr.Sumに入れるまで、手厚い処理をするのであれば、下図の構成がオススメです。

image.png

最小構成は赤枠のコンポーネント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]を選択します。
image.png

[Truncate]コンポーネントから、該当テーブルを選択します。
image.png

これでOKです。

get_data

Salesforceからデータを取得します。

コンポーネント群から[クラウド]→[Salesforce]→[データ読み取り(クエリー)]を選択します。
image.png

ここから、下図のように設定をします。
image.png

赤枠:グローバルリソースで設定した接続先を選択します。
緑枠:テーブル名を選択します。
青枠:[スキーマの作成]をクリックすると緑枠で選んだテーブルの選択画面が出てきます。

Dr.Sumに取り込みたい項目を選んで[↓選択]をクリックし、指定をします。
image.png

選択が終わりましたら[了解]をクリックします。

続いては抽出条件の設定です。
SalesforceのAPIは大量データを取得する際、タイムアウトエラーが起こりがちなので、なるべくデータの件数をしぼると良いでしょう。
[SOQLの作成]をクリックします。
image.png

画面に従って、赤枠箇所のように抽出条件をセットすると、緑枠のようなSOQLが自動で記述されます。
問題なければ[了解]をクリックします。
image.png

これでSalesforceからのデータ抽出の設定はOKです。

mapping

さて、今度は加工です。
ただし、対Salesforceの場合、あまりマッピングはしないでしょう。
ここで複雑な加工をするよりもDr.Sumに入れてしまってから処理をした方が、スピードアップが図れます。
今回も単純な移行となります。
image.png

bulk_insert_table

今回はこちらのBulkInsertを使用します。
image.png

高速処理のBulkInsertですが、設定は単純ですね。

image.png

設定は以上となります。

ワークテーブルをつかおう

さて、最小で4コンポーネントSalesforceからのデータの取り込みはできました。
しかしBulkInsertをつかうとちょっと不安な点があります。

この構成だと、get_data実行時にエラーになると、事前に仕掛けたTruncateのためにDr.Sumテーブルのデータが消えた状態になるという点です。
Salesforceなどのクラウド製品とAPI接続をする場合、気を付けないとならないのがタイムアウト。
データ抽出量やそのときのクラウド製品の負荷状況次第ではタイムアウトエラーが起きます。
エラーが起きたら、Dr.Sumのテーブルは空になる、これは最悪です。

そのため、今の処理は全てワークテーブルで行うようにしましょう。
そして登場するのはこの緑枠の後続処理たちです。
image.png

上の4コンポーネントはDr.Sumのワークテーブルに入れます。
ワークテーブルは本番テーブルとまったく同じ形の別テーブルです。
上記4コンポーネントの処理が成功したら、下の3コンポーネントで、ワークテーブルのデータを本番テーブルに入れ替えます。

truncate_table_data
[Truncate]コンポーネントで本番テーブルのデータを削除します。
image.png

get_table_data
ワークテーブルのデータを読み込みます。
image.png

bulk_insert_table_data
本番テーブルにBulkInsertします。
image.png

この3コンポーネントでエラーになることは・・・考える限り、ないです。
テーブルがない、とかそれくらいですかね。

上の4コンポーネントでエラーになっても本番テーブルは傷つきません。
これでエラーが発生しても安心な設計となります。

さいごに

try-catchやエラーログの処理などがあるので、コンポーネントの数はまだありますが、主要なものは7つです。

今回はSalesforceのデータの取り方をお伝えしましたが、SalesforceのAPIのタイムアウトに負けない運用もございます。
こちらはまた別記事で解説します。

Discussion

ログインするとコメントできます