LoginSignup
3
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-02

最初に

Dr.Sum とは

【詳細はこちら】**Dr.Sum**は10億件のデータを1秒台で集計できる超高速データベースツールです。
高速のディスク集計と、ハイブリッドで使える超高速のメモリ集計をつかいながら、最適な運用コストでのパフォーマンスを実現します。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e8924330-f537-38f2-e276-ecdd0d96341d.png)

また、Dr.Sumは集計速度だけでなく、データベース構築経験の少ない方でもGUI操作でDBをつくったり、データを取り込んだりできます。
データベース周りにそこまで強くないぼくのような人間でも、気軽にデータハンドリングができるところが素敵です。

さて、Dr.Sumという製品は単純にデータベースがあるだけではなく、様々なオプション製品を加えることで、多様な使い方が可能です。

image.png

詳しくは公式ホームページをご参照いただきたいのですが、
✅ データを抜いて
✅ データを加工して
✅ データを貯めて
✅ データを高速集計する
ことが可能となります。

製品の一覧はこちら

Dr.Sum Connect とは

【詳細はこちら】 Dr.Sum Connectはデータを抽出・加工・取り込みをするETLツールです。

下図のように様々な環境からデータを取得して、加工して、Dr.Sumに投げ込むことのできるツールです。

image.png

エラーになったらログを吐いたり、メールを飛ばしたり、だいたいGUIで操作できるので、プログラムを書かずとも連携の仕組みを作ることができます。

基本的なスクリプトのつくり方についてはこちらの解説記事をお読みください。
Dr.Sum ConnectをつかったETLのスクリプトのつくり方

Dr.Sum ConnectはDataSpiderのOEM製品です。
以降の記事ではConnectと書きます。

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のタイムアウトに負けない運用もございます。
こちらはまた別記事で解説します。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1