TalendよりSalesforceに3rdベンダJDBCドライバを組み込んでアクセス

#TalendなどEAI/ETL製品に3rdベンダJDBCドライバを組み込んで、Salesforceにアクセス

EAI/ETL製品の特長は、様々なデータソースにノンコーディングでアクセスできることですが、対応していないデータソースもあります。そんな時に3rdベンダ製のJDBCドライバを組み込める機能があったりしますので、少し試してみました。

## オープンソースETLのTalendで検証
商用のETL/EAIツールは、DataSpider、SQL Server Integration Services、PowerCenter、Asteria Warpなど様々な製品がありますが、今回はOSSのTalendで検証してみました。(Talendはインストール済の前提)

　・Talend Open Studio for Data Integration (7.3.1)
   https://jp.talend.com/products/talend-open-studio/

# TalendにProgress DataDirect JDBC for Salesforceを組み込む

<a href="https://www.ashisuto.co.jp/datadirect/app_download/" target="_blank">https://www.ashisuto.co.jp/datadirect/app_download/</a>　からJDBCドライバを入手し、インストーラを実行して導入しておきます。

Talend Open Studioを起動し、リポジトリ・タブの[メタデータ]→[DB接続定義]を開きます。

![図1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/182a288a-7086-41e6-0476-6c438dc7e935.jpeg)

JDBC URLには、「jdbc:datadirect:sforce://login.salesforce.com」を入力し、ドライバとしてDataDirectを追加します。ドライバの＋ボタンをクリックして、モジュールを追加していきます。

![図2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/397f2367-a76d-d736-6829-e270f67c9322.jpeg)

「アーティファクトリポジトリ」のラジオボックスを有効にし、「新規モジュールのインストール」の「…」からインストールされているDataDirectのJDBCドライバの場所を指定します。

![図3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/780fba8a-cbb1-2c5c-a1a8-3d0f32c4abe9.jpeg)

DataDirectをインストールしたディレクトリのlib配下にあるsforce.jarがドライバです。

![図4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/e4c30f24-44ab-8f66-2ae5-be412c06569a.jpeg)

モジュールがインストールできたら、「ドライバ・クラス」を
「com.ddtek.jdbc.sforce.SForceDriver」に指定します。

![図5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/bafd2696-4058-6714-89ad-ac063b667a97.jpeg)

SalesforceのユーザIDとパスワードを入力します。ここで注意点がありますが、パスワードは、「パスワード+セキュリティ・トークン」の文字列として入力するのがポイントです。TalendのSalesforceコネクタには、セキュリティ・トークンだけ入力するボックスがあるのですが、あくまで汎用JDBCということで用意はされていないということですね。
「Test connection」で成功したら、作成した接続定義を使って「スキーマの取得」を行いましょう。

![図6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/35d0d648-a4ff-c6f7-7e62-245bac02194d.jpeg)

無事に、今回検索したい「ACCOUNT」オブジェクトが見えてますね。
なお今回、「ACCOUNT」オブジェクトにダミーデータを12,000件ほど入れておきました。

# Talend ジョブからデータ取得

Talendジョブを作成してデータを取得します。今回は、SalesforceのACCONTオブジェクトから全件を取得して、ローカルのCSVファイルに出力するジョブです。
tDBInputとtFileOutputDelimitedをつなげるだけのシンプルなジョブになります。
さて、テスト実行してみると・・・・

![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/ff84ee87-2f0a-cb61-0380-fe60106171ff.png)

無事、12,179行のACCOUNTオブジェクトのデータがローカルのCSVファイルに出力されました。
かかった時間は、14.39sとあります。

ちなみに、TalendのSalesforceオプションでジョブを作り直して同じジョブを実行したところ、、、

![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/3404b3f2-1719-5082-c111-cc75f60402fa.png)

18.21sで、若干DataDirectのほうが高速です。
何度か実施しましたが、DataDirectのほうが概ね高速ですが、性能は一概には言えない面もあるので、あくまで参考情報として考えておいてください。


## 接続プロパティ
さて、わざわざTalendに備わっているSalesforceコネクタを使わずに、DataDirectを使う理由はありません。しかし、DataDirectの特徴として、多様な接続プロパティが設定できるという点があります。このあたりの接続プロパティに魅力を感じられるようなら、DataDirectを組み込むという選択肢はありうるのかなと思います。

https://documentation.progress.com/output/DataDirect/jdbcsalesforcehelp/index.html#page/jdbcsalesforce%2Fconnection-property-descriptions.html%23wwID0EQMBQ

設定方法は、接続パラメータに追記していく形になります。

![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556649/2bf8dc87-5aed-21a0-d66a-40e53d69c73b.png)


やや不格好ですが、「login.salesforce.com」の後に「;」で区切りながら各種パラメータを設定していくことで有効になります。

## まとめ

EAI/ETLは多種多様なデータソースへ接続できるというメリットがありますが、併せてDataDirectのような3rdパーティJDBCを組み込む機能を使うと、さらに接続の幅が広がったり、細かい機能が追加できたり痒いところに手が届く感じになります。また、ライセンス体系として、コネクタは別売りのEAI/ETLツールが多いと思いますので、接続したいデータソースのコネクタが高額ということであれば、DataDirectを検討してもいいかもしれません。