[Talend]tSalesforceInputを利用してSalesforceからデータを取得する
はじめに
こんにちは。DI部の大高です。
今回はTalendのコンポーネント「tSalesforceInput」を紹介したいと思います。
前提条件
Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」、Salesforceのバージョンは「Winter '19」で検証しています。
なお、Salesforceのアカウントが無い場合には、以下から開発者環境を無料で新規作成することができます。
また、Salesforceについての細かい説明については記述しません。
tSalesforceInputについて
「tSalesforceInput」を利用するとSalesforceからデータを取得することができます。
「tSalesforceInput」コンポーネントのTalend Helpページはこちらです。
では、具体的に以下で解説していきます。
ジョブの説明
「tSalesforceConnection」でSalesforceに接続し、「tSalesforceInput」でデータを取得して「tLogRow」で取得結果を標準出力に表示します。
サブジョブを2つ作成しており、「tSalesforceInput」の設定が上から順に「通常のSELECT」、「SOQLクエリでSELECT」になるように設定してあります。
Salesforceのデータについて
まず最初にSalesforceのデータを確認しておきます。
今回はサンプルとして「取引先」を扱いたいと思いますので、「取引先」のデータを確認してみます。
確認すると全部で12件のレコードが登録されています。また、「取引先名」が「United Oil」で始まる取引先が3件あるようです。
これをふまえて、ジョブを作成していきます。
「tSalesforceConnection」コンポーネントの設定
「tSalesforceConnection」コンポーネントでは「接続の種類」を「Basic」として設定しました。
こちらのコンポーネントの細かい設定などについては以下の記事をご参照ください。
[Talend]tSalesforceConnectionを利用してSalesforceに接続する(Basic接続) | DevelopersIO
なお、「Version 7.1.1」では「詳細設定」の「SalesforceのURL」はデフォルトで「"https://login.salesforce.com/services/Soap/u/44.0"」と設定されていました。
Salesforce側のバージョンアップに伴い早速修正が入っており、嬉しい限りです。
「tSalesforceInput」コンポーネントの設定
コンポーネントの設定
コンポーネントにはSalesforceからのデータ取得に関する設定をしていきます。
接続コンポーネント
ここでは先程設定した「tSalesforceConnection」のコンポーネントをプルダウンから指定します。なお、「tSalesforceConnection」コンポーネントを配置していない場合には、「Use this Component」を選択して、ここで直接接続設定をすることもできます。
モジュール名
取得したいSalesforceのオブジェクトのことを指します。今回は対象オブジェクトとして「取引先」を取得したいと思います。
右端の「...」をクリックするとオブジェクト選択ウィンドウが開きます。
上部の「フィルタテキストの入力」の箇所に「取引先」と入力すると、「取引先」を含むオブジェクトが表示されるので「取引先」を選択して「OK」をクリックします。
なお、カスタムオブジェクトを指定したい場合には「カスタムオブジェクトの使用」にチェックを入れて「オブジェクト名」にカスタムオブジェクト名(API参照名)を指定することで、取得することが可能です。
スキーマ定義
「モジュール名」の設定がおわったらスキーマ定義を開いてみます。すると、自動で該当オブジェクトのスキーマが定義されているのが確認できます。
今回は、Salesforceの画面で確認したようなデータを取得したいと思うので、少しカラムを削ってみました。ただ、先程画面で確認した「取引先所有者(別名)」については、ここでは「OwnerId」のままとし「取引先所有者」の「Id」を取得しています。
クエリーモード
クエリーモードには「Query」と「Bulk」があります。大量データの取得時など、バルククエリを利用してSalesforceのAPIコール数を削減したい場合には「Bulk」に設定するとよいと思います。
その場合には、「tSalesforceConnection」の設定で「バルク接続」を有効化する必要があるので注意してください。
今回は「Query」のままとしました。
条件
いわゆるWHERE句の設定です。今回は「取引先名」を「United Oil」で始まる取引先に限定してみたいと思ったので、「"Name LIKE 'United Oil%'"」に設定しました。
手動クエリー
このオプションを有効にすると、SOQLクエリを直接記述することができます。
もう1つの「tSalesforceInput」コンポーネントでは、これを有効にして直接SOQLクエリを記述してみました。
クエリは以下の通りとなります。
SELECT Id , Name , Site , BillingState , Phone , Type , Owner.Alias FROM Account WHERE Name LIKE 'United Oil%'
なお、こちらのSOQLクエリでは「取引先所有者(別名)」について「Owner.Alias」としてきちんと「取引先所有者(別名)」を取得するように修正してみました。
この場合にちょっと注意が必要なのが「Owner.Alias」のカラムです。カラム名に「.(ドット)」が含まれているのですが、これはスキーマ定義では以下のように「_(アンダースコア)」で置き換えて「Owner_Alias」にする必要があります。
ただ、便利な機能として「Guess schema」ボタンが用意されているので、実はこのボタンをクリックすれば自動でスキーマ定義を推測して設定することも可能です。
削除済みレコードも含める
このオプションを有効にすると、Salesforceで削除済みのレコードも取得することができます。なお、このオプションは「クエリーモード」が「Query」の場合のみ、利用可能です。
今回は無効にしました。
「tLogRow」コンポーネントの設定
「tLogRow」コンポーネントでは「モード」を「テーブル」に設定して、結果を見やすくしてみました。
実行結果
設定は以上です。実際にこのジョブを実行すると以下のように出力されます。
[statistics] connecting to socket on port 3681 [statistics] connected .------------------+---------------------------+----+------------+---------------+-----------------+------------------. | tLogRow | |=-----------------+---------------------------+----+------------+---------------+-----------------+-----------------=| |Id |Name |Site|BillingState|Phone |Type |OwnerId | |=-----------------+---------------------------+----+------------+---------------+-----------------+-----------------=| |0011000001KRCdbAAH|United Oil & Gas, UK |null|UK |+44 191 4956203|Customer - Direct|00510000008odocAAA| |0011000001KRCdcAAH|United Oil & Gas, Singapore|null|Singapore |(650) 450-8810 |Customer - Direct|00510000008odocAAA| |0011000001KRCdYAAX|United Oil & Gas Corp. |null|NY |(212) 842-5500 |Customer - Direct|00510000008odocAAA| '------------------+---------------------------+----+------------+---------------+-----------------+------------------' .------------------+---------------------------+----+------------+---------------+-----------------+-----------. | tLogRow | |=-----------------+---------------------------+----+------------+---------------+-----------------+----------=| |Id |Name |Site|BillingState|Phone |Type |Owner_Alias| |=-----------------+---------------------------+----+------------+---------------+-----------------+----------=| |0011000001KRCdbAAH|United Oil & Gas, UK |null|UK |+44 191 4956203|Customer - Direct|Ootak | |0011000001KRCdcAAH|United Oil & Gas, Singapore|null|Singapore |(650) 450-8810 |Customer - Direct|Ootak | |0011000001KRCdYAAX|United Oil & Gas Corp. |null|NY |(212) 842-5500 |Customer - Direct|Ootak | '------------------+---------------------------+----+------------+---------------+-----------------+-----------' [statistics] disconnected
設定したとおり、取引先名が「United Oil」から始まる取引先が取得できています!また、SOQLクエリで処理したほうは「取引先所有者(別名)」も取得できていますね。
まとめ
以上、「tSalesforceInput」コンポーネントの紹介でした。
Salesforceのデータを利用したいケースは多いと思いますので、どなたかの参考になれば幸いです。
それでは。