今更感ありますが、ETLツールのTalendが気になったので触ってみましたー

 

今回はExcelのファイルを読み込んで、Salesforceに

INSERT, UPDATE, DELETE, UPSERTする基本的なフローを試してみます。

 

Talendのインストール方法や基本的な使い方は以下のサイトが詳しいです。

Talendのススメ:無償で使えるオープンソースETL:Talend Open Studio の使い方

1. ジョブの作成

リポジトリタブのJob Designsを右クリック→ジョブの作成をクリックします。

talend-sidebar-repository

テキトーな名前でジョブを作成します。

talend-newjob

2. Excelのメタデータの定義

リポジトリタブのExcelファイルを右クリック→Excelファイルの作成をクリックします。

talend-sidebar

テキトーな名前を設定して、「Next」をクリックします。

talend-excel-metadata-format1

読み込むExcelファイルを選択して、シートパラメータの設定で

任意のシートを選択します。読み込まれると右下に読込結果がプレビューされます。

設定が完了したら、「Next」をクリックします。

talend-excel-metadata-format2

列名として先頭行を設定にチェックをいれて、「Next」をクリックします。

talend-excel-metadata-format3

全てStringにしてFinishをクリックします。

talend-excel-metadata-format4

3. コンポーネントを設置

まず、作成したExcelメタデータをJobDesigner上に、ドラッグアンドドロップします。

作成するコンポーネントの種類を聞かれるので”tFileInputExcel”を選択します。

talend-excel-component-select

そうすると、tFileInputExcelのコンポーネントが作成されます。

talend-excel-component

次にSalesforceのコンポーネントを設置します。

PaletteからtSalesforceOutputを選択してドラッグアンドドロップでコンポーネントを作成します。

talend-salesforce-component

次はPaletteからtMapを選択してドラッグアンドドロップでコンポーネントを作成します。

talend-tmap-component

ExcelInputコンポーネントのOutputとtMapコンポーネントのInputを繋ぎます。

talend-connection-in

同様にtMapのOutputとtSalesforceOutputのInputを繋ぎます。

出力名はテキトーでOK。

talend-connection-out-3

4. tSalesforceOutputの設定

tSalesforceOutputコンポーネントをクリックして以下のように設定します。

talend-sfdc-component-insert

ユーザ名、パスワードともにダブルクォーテーションで括ってください。

talend-sfdc-component-password

Contactの場合は「コンタクト」を選択すれば良いと思ったのですが

2つ選択肢がある上に、両方ともContractの標準オブジェクトを指しているようだったので

カスタムオブジェクトとしてContactオブジェクトを設定しています。

5. tMapの設定

tMapコンポーネントをクリックしてマップエディタのボタンをクリックします。

talend-tmap-component-setting1

マップエディタが表示されるので以下のようにマッピングします。

INSERTできない項目は省いています。

talend-tmap-component-setting2

tSalesforceOutputで「カラムの同期」をクリックします。

「スキーマの編集」をクリックして確認すると、Input(左枠)=Output(右枠)となります。

talend-sfdc-component-filtering

6. ジョブの実行

リポジトリタブのJob Designsの対象ジョブを右クリック→ジョブの実行をクリックします。

そうすると、実行タブが開いて実行結果が表示されます。

talend-sfdc-successful

レコードの更新

レコードを更新したい場合はtSalesforceOutputの設定は以下のようになります。

talend-sfdc-component-update

tMapには必ずIdカラムを入力してください。

talend-tmap-sfdc-update

Idが無いと”Id cannot be resolved or is not a field”というエラーが表示されます。

talend-sfdc-update-failure

実行画面のエラーはこんな感じで表示されます。

talend-sfdc-update-failure2

レコードの削除

tSalesforceOutputの設定はこんな感じで更新時と同様にIdカラムを入れてください。

talend-sfdc-component-delete

Idに対応したレコードが既に削除されている場合は”entity is deleted”のエラーが発生します。

talend-sfdc-delete-failure

レコードのUPSERT

UPSERTの場合はtSalesforceOutputを以下のように設定します。

ExKey__cが外部キーです。

talend-sfdc-component-upsert

tMapのOutputにはカラム名としてExKey__cを含めてください。

カラム名は下部のテーブルで変更できます。

talend-tmap-sfdc-upsert

カラムフィルタリング

tSalesforceOutputのスキーマですが、これはInput(左枠)の項目を

Output(右枠)の項目にマッピングするのではなく、フィルタリングする用途として使われます。

つまりOutputの項目はInputの項目として存在する必要があります。

talend-sfdc-component-filtering-2

Outputの項目にテキトーなカラム名を入力すると

”cannot be resoleved or is not a field”のエラーで怒られます。

talend-sfdc-error

tMapによるカラム名変更

Excelのカラム名がAPI参照名と異なる場合はtMapの定義で変更することが出来ます。

カラム名は下部のテーブルで変更できます。

talend-tmap-example

ハマった時の対処法

tMapによるマッピングとtSalesforceOutputのスキーマ定義でミスってる可能性が高いです。

そこを見直して、それでも原因不明な場合はJobのCode(Designerモードから切り替え)を見て

該当箇所を調べるのが良いです。

その他

また、Salesforceのメタデータ(リポジトリ)も作成できて

tSalesforceOutputコンポーネントのプロパティタイプをリポジトリにして

対象のメタデータをロードすれば、定義の使い回しが可能です。

talend-sfdc-component-repository

ちなみにwaveと名の付くものはWave用(Analytics Cloud)のコンポーネントなので注意してください。