[Talend]tSalesforceInputを利用してSalesforceからデータを取得する

今回はTalendのコンポーネント「tSalesforceInput」を紹介したいと思います。
2018.11.06

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

はじめに

こんにちは。DI部の大高です。

今回はTalendのコンポーネント「tSalesforceInput」を紹介したいと思います。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」、Salesforceのバージョンは「Winter '19」で検証しています。

なお、Salesforceのアカウントが無い場合には、以下から開発者環境を無料で新規作成することができます。

Salesforce Developers

また、Salesforceについての細かい説明については記述しません。

tSalesforceInputについて

「tSalesforceInput」を利用するとSalesforceからデータを取得することができます。

「tSalesforceInput」コンポーネントのTalend Helpページはこちらです。

tSalesforceInput

では、具体的に以下で解説していきます。

ジョブの説明

「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のデータを利用したいケースは多いと思いますので、どなたかの参考になれば幸いです。

それでは。