今更感ありますが、ETLツールのTalendが気になったので触ってみましたー
今回はExcelのファイルを読み込んで、Salesforceに
INSERT, UPDATE, DELETE, UPSERTする基本的なフローを試してみます。
Talendのインストール方法や基本的な使い方は以下のサイトが詳しいです。
Talendのススメ:無償で使えるオープンソースETL:Talend Open Studio の使い方
1. ジョブの作成
リポジトリタブのJob Designsを右クリック→ジョブの作成をクリックします。テキトーな名前でジョブを作成します。
2. Excelのメタデータの定義
リポジトリタブのExcelファイルを右クリック→Excelファイルの作成をクリックします。テキトーな名前を設定して、「Next」をクリックします。
読み込むExcelファイルを選択して、シートパラメータの設定で
任意のシートを選択します。読み込まれると右下に読込結果がプレビューされます。
設定が完了したら、「Next」をクリックします。
列名として先頭行を設定にチェックをいれて、「Next」をクリックします。
全てStringにしてFinishをクリックします。
3. コンポーネントを設置
まず、作成したExcelメタデータをJobDesigner上に、ドラッグアンドドロップします。作成するコンポーネントの種類を聞かれるので”tFileInputExcel”を選択します。
そうすると、tFileInputExcelのコンポーネントが作成されます。
次にSalesforceのコンポーネントを設置します。
PaletteからtSalesforceOutputを選択してドラッグアンドドロップでコンポーネントを作成します。
次はPaletteからtMapを選択してドラッグアンドドロップでコンポーネントを作成します。
ExcelInputコンポーネントのOutputとtMapコンポーネントのInputを繋ぎます。
同様にtMapのOutputとtSalesforceOutputのInputを繋ぎます。
出力名はテキトーでOK。
4. tSalesforceOutputの設定
tSalesforceOutputコンポーネントをクリックして以下のように設定します。ユーザ名、パスワードともにダブルクォーテーションで括ってください。
Contactの場合は「コンタクト」を選択すれば良いと思ったのですが
2つ選択肢がある上に、両方ともContractの標準オブジェクトを指しているようだったので
カスタムオブジェクトとしてContactオブジェクトを設定しています。
5. tMapの設定
tMapコンポーネントをクリックしてマップエディタのボタンをクリックします。マップエディタが表示されるので以下のようにマッピングします。
INSERTできない項目は省いています。
tSalesforceOutputで「カラムの同期」をクリックします。
「スキーマの編集」をクリックして確認すると、Input(左枠)=Output(右枠)となります。
6. ジョブの実行
リポジトリタブのJob Designsの対象ジョブを右クリック→ジョブの実行をクリックします。そうすると、実行タブが開いて実行結果が表示されます。
レコードの更新
レコードを更新したい場合はtSalesforceOutputの設定は以下のようになります。tMapには必ずIdカラムを入力してください。
Idが無いと”Id cannot be resolved or is not a field”というエラーが表示されます。
実行画面のエラーはこんな感じで表示されます。
レコードの削除
tSalesforceOutputの設定はこんな感じで更新時と同様にIdカラムを入れてください。Idに対応したレコードが既に削除されている場合は”entity is deleted”のエラーが発生します。
レコードのUPSERT
UPSERTの場合はtSalesforceOutputを以下のように設定します。ExKey__cが外部キーです。
tMapのOutputにはカラム名としてExKey__cを含めてください。
カラム名は下部のテーブルで変更できます。
カラムフィルタリング
tSalesforceOutputのスキーマですが、これはInput(左枠)の項目をOutput(右枠)の項目にマッピングするのではなく、フィルタリングする用途として使われます。
つまりOutputの項目はInputの項目として存在する必要があります。
Outputの項目にテキトーなカラム名を入力すると
”cannot be resoleved or is not a field”のエラーで怒られます。
tMapによるカラム名変更
Excelのカラム名がAPI参照名と異なる場合はtMapの定義で変更することが出来ます。カラム名は下部のテーブルで変更できます。
ハマった時の対処法
tMapによるマッピングとtSalesforceOutputのスキーマ定義でミスってる可能性が高いです。そこを見直して、それでも原因不明な場合はJobのCode(Designerモードから切り替え)を見て
該当箇所を調べるのが良いです。
その他
また、Salesforceのメタデータ(リポジトリ)も作成できてtSalesforceOutputコンポーネントのプロパティタイプをリポジトリにして
対象のメタデータをロードすれば、定義の使い回しが可能です。
ちなみにwaveと名の付くものはWave用(Analytics Cloud)のコンポーネントなので注意してください。