Talend7.2.1でのコンポーネントの接続方法の私的メモです。
基本
Talendには大別してrowデータを渡すフロー接続とそれ以外のトリガー接続がある。(ここでは反復(イテレート)もトリガー接続に含める)
フロー接続系(row接続)
前後のコンポーネント間でrowデータが受け渡されるもの。
入力データは「row1.id」などPOJO(Plain Old Java Object)としてアクセスできる。
メイン接続、フィルター接続
至って普通のフロー接続。フィルター接続はtFilterRowのメイン側だが特に変わりはない。
ルックアップ接続
tMapでの2つ目の入力コンポーネントからのフロー接続。
メイン接続の違いは、tMapは外部結合についてLEFT OUTER JOINしかサポートしていないので、「メイン側のテーブルのみにレコードがある」レコードは引こうと思えば引けるが、「ルックアップ側のテーブルのみにレコードがある」レコードはCROSS JOINでもしない限り引けないこと。
ちなみに、ルックアップ接続も2つ以上持てるが、左外部結合を行う場合は常に「マップエディタで上にある接続」が左側(メイン相当)になる。
なおtMapは、メイン接続の変更は右クリックメニューのみにあるのに、ルックアップ間の順序変更は逆にマップエディターのみにある。。
リジェクト接続
tFilterRowで条件を満たさなかったレコードが送られる。
ほか、tMapで結合モデルをINNER JOINにしたとき、ルックアップ側のレコードが見つからずにリジェクトされた(メイン側の)レコードも拾うことができる。
トリガー接続系
反復接続(Iterate接続)
rowデータではなくて、1回ごとにglobalMapに値をセットしなおして複数回実行する。
ちなみに、接続先の後方にさらにrow接続があると、IDE上では1巡ごとに「1row」等と表示される。
Run if
名前の通り。接続元の処理が終わったあと、条件を満たせば接続先に処理が移る。
コンポーネントがOKの場合
何のデータをやりとりするわけでもないが、実行順を制御したいときに使う。
接続元が複数ある場合、同じ先行コンポーネントから枝分かれした線(つまり1つのサブジョブに含まれる複数の線)を1つの接続先につなげないときがある。この制限が案外厳しく、実行順が複雑な場合は次のサブジョブ接続のほうが確実。
サブジョブがOKの場合
サブジョブ全体で致命的なエラーが起きなかった場合、接続元に制御が移る。
ただし、接続元も接続先も各サブジョブの最初のコンポーネントしか選択できない。このため、場合によってはサブジョブ間の接続線がかなり邪魔なところを通ることになる。
使いどころとしては、tFilterRow等で枝分かれさせたものをまたtUnite等でまとめるときとか?
{コンポーネント,サブジョブ}がエラーの場合
=例外が発生したとき。かなり致命的なエラーでないとこちらに分岐しない。例えばtRESTはWebリクエストが失敗してもここに来ない。
なので、エラー処理はtFilterRow等でやることも多い。