[Talend] Sandbox環境のSalesforceに接続・データ取得する

2018.01.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今後ニーズが出て来るかなと思ってTalend使って接続できるか検証してみました。

今回利用した環境&ソフトウェア

  1. Talend Open Studio for Data Integration 6.4.1 MAC版
  2. macOS High Sierra 10.13.3
  3. Salesforce Sandbox環境
  4. Salesforce Sandbox環境へログインするためのテストユーザ

※Sandbox環境及びSandbox環境へ接続するユーザが発行されたと仮定して進めます。(Salesforceの管理者ではないので発行してもらいました。)

発行頂いたURLにアクセスしてまずはログインができることを確認します。

ユーザ名とパスワードを入力してSandboxにログインします。

ログインに成功すると下記のような画面が表示されるので確認できたら不要なので閉じます。

Talendのコンポーネントを配置する

まずはTalendからコネクションが張れるかを確認するためにtSalesforceConnectionコンポーネントを配置し、基本設定にあるUser Id及びPasswordを設定します。

今回の検証では Connection Type は Basic で指定しました。

Security Keyについては用意されたSalesforce Sandbox環境によっては指定が必要になるケースもあるでしょう。(今回のSandbox検証環境では指定は不要でした。)

次に詳細設定のSalesforce URLをSandbox環境用に変更します。

"https://test.salesforce.com/services/Soap/u/39.0"とwwwの部分をtestに置き換えします。

実はここのURLをずっと本番環境に向けてたせいで下記のような接続エラーが出ててハマりました。

エラーメッセージにセキュリティトークンが云々となってたので、Salesforce側にログインして「私のセキュリティトークンのリセット」をやってそのキーを指定してみたりしましたが、結果は繋がらず。OAuthの認証方式に変えて接続しようと試みましたが、本来Talend側がジョブ実行時にローカルにテンポラリでWebサーバを立てて、それでリクエスト受けてToken Fileを作ったりするはずなんですが、どうやらJava8の環境ではそのローカルWebサーバが起動せずにエラーになったりと手詰まりになっていました。(Talendの古いバージョン(Java7環境で動いている)のTalend環境だとローカルにWebサーバが自動的に立ち上がるのでOAuthでも使えるようですが今回そこまでは検証していません。)

実行してみる

エラーもなく無事接続出来たようです。

実際にSalesforceのデータを取得してみる

コネクションも問題なく張れたので、実際にSalesforceからデータを取得してみたいと思います。

tSalesforceInputを配置して右クリックで「トリガー」を選んで「コンポーネントがOKの場合」で接続します。

次にtSalesforceInputの基本設定 Connection Component でtSalesforceConnectionのコネクションを使いまわします。(ここではtSalesforceConnection_1)

Module Nameの右にある...ボタンをクリックするとSalesforceのテーブル一覧が下記のように別ウィンドウで表示されます。

たくさんテーブルがあるのでフィルタで顧客に絞ってみます。

とりあえず今回は顧客を選択してデータを取得してみます。

OKを押すと Module Name のところに"Account"という名称で設定されました。

スキーマの編集をクリックしてみます。

カラムの数もかなりありますね。1つ1つの項目の意味は把握していませんので適当にNameIndustryShippingAddressを抜き出してみたいと思います。

ここで登場するのがtMapコンポーネントです。 配置してロウ/Mainで接続します。

次にtMapのマップエディタを開いてアウトプットの名前を任意に指定します。

抽出したいカラムをout1のところで+ボタンで追加して定義していきます。(Name,Industry,ShippingAddress)

3つの項目の定義が終わったらドラッグ&ドロップで左から右に紐付けをします。(Name,Industry,ShippingAddress)

次に抽出したSalesforceのデータをローカルファイルに保存し、保存したファイルをS3へアップします。この辺のやり方は[Talend]ETL処理後のCSVをAmazon S3へアップするを参考にしてください。

完成したジョブは以下のような感じです。(tLogRowはデバッグ用に入れたので気にしないでください。)

完成したジョブを実行する

早速作成したジョブを実行してみます。

エラーもなく実行が完了した様です。

tS3Putの設定は以下のように設定してあります。

Management Consoleにログインして、ファイルが正しくアップロードされているか確認します。

ということで CMBlog22_SalesforceOutput.zip というファイルがちゃんとS3にアップされていました。

S3にさえファイルが上がってしまえばあとはよしなにデータをRedshiftへロードするなりすれば良いですね。

ちなみに実データの内容はNameは会社名、Industryは業種、ShippingAddressはnullになっていました。

まとめ

Talendを使えばノンプログラミングでSalesforceからのデータ取得が非常に簡単に出来ますし、tSalesforceOutputを使えばSalesforceへのデータ登録も簡単に出来ます。

あとtSalesforceInputの基本設定に Condition を指定できる項目があり、そこに抽出条件を記載することもできます。SQLで言うところの where を省いた条件句を記載します。(ex. "Name like '株式会社%'")のように。

また Manual Query にチェックを付けると直接SOQLを記載することができます。("SELECT Id, Name, Industry, ShippingAddress FROM Account")

それでは今回はこの辺で。