はじめに
Apache Nifiは、OSSのデータフローオーケストレーションツールです。Nifiでは、JDBCドライバで各種データソースに接続することが可能です。本記事では、 CData JDBC Driverを利用して、NifiからSalesforceなどのSaasデータソースからデータを取得するデータフローを作成してみます。
前提ソフトウェア
本手順は、MacOS(High Sierra)で作成していますが、Windows、Linuxなどの他のOSでも動作します。
参考記事
ゴール
Nifiで、Salesforceの取引先(Account)のデータをローカルファイルに出力するデータフローを作成する。 
手順
CData JDBC Driver for Salesforce のインストール
CData JDBC Driver for Salesforce をダウンロードして、ZIPファイル内のsetup.jarを実行します。インストーラーを起動してソフトウェア使用許諾契約書を確認してデフォルトのままインストールします。

(注意) オンラインアクティベーションのためインターネットへの接続が必要となります
Salesforce側の設定
CData JDBC Driver for Salesforce 2017J 製品マニュアル - 接続の確立を参考にSalesforceのセキュリティトークンを取得してください。
Nifiを起動する
$ sudo /Library/nifi-1.5.0/bin/nifi.sh start
(注意)JAVA_HOMEが見つからない旨のメッセージが出た場合は、{nifi home}/bin/nifi-env.sh の下記部分をコメントアウトしてJDKパスを設定してください。
# The java implementation to use.
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
Nifiにブラウザからアクセス
下記のURLにブラウザからアクセスする。
http://localhost:8080/nifi/

DBConnectionPortを作成
NiFi Flow Configuration > CONTROLLER SERVICES を開き、DBCPConnectionPool 1.5.0を選択して追加する。
PROPERTIESタブを開き、下記の値を設定する。

設定値サンプル
- Database Connection URL = jdbc:salesforce:User=****@cdata.com;Password=*****;SecurityToken=*****;
- Database Driver Class Name = cdata.jdbc.salesforce.SalesforceDriver
- Database Driver Location(s) = /Applications/CData/CData JDBC Driver for Salesforce 2017J/lib/cdata.jdbc.salesforce.jar
(注意)「Database Driver Location(s)」は環境に合わせたパスを設定ください。
任意の名称(例では、CDataSalesforce)を付与する。

ExecuteSQLとPutFileプロセッサの配置、および、設定
ExecuteSQLとPutFileプロセッサを配置して、ExecuteSQLからPutFileへフローを接続します。

各プロセッサを開き、以下の通り、プロパティ値を設定して保存します。
ExecuteSQL
- Database Connection Pooling Service : CDataSalesforce (上記手順で作成したDBConnectionPortの名称)
- SQL select query :select * from Account
Connection
- For Relationships : failure, success
FilePut
- Directory : /wrk/data/nifi/
- Automatically Terminate Relationships : failure, success
ExecuteSQLとPutFileプロセッサの実行
ExecuteSQLとPutFileプロセッサそれぞれを選択した状態で、Operate内のStart(再生ボタン)をクリックします。プロセッサのにStart(緑の再生ボタン)アイコンが表示されることを確認てPutFile内のRead/Write内のByte数が変更したらStop(停止ボタン)をクリックします。
実行結果の確認
FilePutのDirectoryで指定したパスに移動してファイルが作成されていることを確認。
~ $ cd /wrk/data/nifi
/wrk/data/nifi $ ls -l
total 35520
-rw-r--r-- 1 root wheel 15964 2 22 15:57 24979156157239
-rw-r--r-- 1 root wheel 15964 2 22 15:57 24979616506772
-rw-r--r-- 1 root wheel 15964 2 22 15:57 24979752251311
-rw-r--r-- 1 root wheel 15964 2 22 15:57 24979844826554
-rw-r--r-- 1 root wheel 15964 2 22 15:57 24979929797593
~ (省略) ~
-rw-r--r-- 1 root wheel 15964 2 22 15:58 25202512179594
エディタ等でファイルを開くと、Salesforceの取引先の一覧がCSVフォーマットで出力されていることを確認出来ます。

Salesforceの取引先一覧

(注意)一部の文字化けはエンコーディングの問題のようです。
おわりに
今回は、SaaSデータとして、Salesforceのデータを取得してみましたが、CData JDBC Drivers製品 を利用することで、90を超えるSaasやNoSQL、Applicationのデータを同じ手順で利用することが出来ます。全製品、30日間の無料評価版もあるので是非お試しください。

関連コンテンツ