【Talend】条件分岐(if)する4つの方法をまとめました

はじめに

Talendでは、Javaで普段書く if 文はあまり書きません(書けません)…
では、どのようにして条件分岐するの!!
ということで、条件分岐の4つの方法をまとめてみました。

一応、今回使用するジョブ

条件分岐検証のために、下記のような簡単なジョブを使用しました。

図1 ジョブ概要

ジョブ図上見えるのは、tMap_1から生えている2つのoutputと、Flow2サブジョブ起動のためのIfラインです。

図2 tMap編集内容

tMapの中で大事なことをしているので、こちらもスクショを載せておきます。

この、Varの中にも分岐が2つ記述してあります。

図3 Expression Editor

コードの内容については後述します。

条件分岐の4つの方法

三項演算

主な使用場所としては、tMapの中でセットする値を分岐したい場合ですね。とてもよく使います。
図3のコードの一番上で使用しています。

1列(カラム)に対する分岐処理です。
書き方は説明不要だと思いますが、

("I'm Japanese").equals(row1.msg) ? "Japanese" : "GAIZINE!!";

の通り、
条件式 ? 真の時の値 : 偽の時の値
という構文ですね。

tMapのFilter機能による分岐

こちらは、Row(行)に対する条件分岐です。
条件を満たす行を選別して、フローを分岐するのに使います。

tMapのRowデータの矢印プラスマークを押下し、そこに行データを通す条件を記述します。
図2の右側out1, out2に対してそれぞれフィルタ条件を設定することでフローを2つに分岐させています。

Input側に書けば単なるフィルタに、
Output側のNフローに書けばフローの分岐として使うことができます。

トリガ条件のRun Ifによる分岐

フローを実行するかどうかの分岐として使います。
例えば、処理結果がx件以上の場合に処理実行というケースでよく使います。

Ifの接続線をクリックしてComponentタブで実行条件の編集ができます。

Javaコードインジェクション(非推奨)

非推奨ですが、if文をtMapの中に記述することができ、複雑な分岐を行うことができます。
方法は、tMapのVarなどで項目をセットするエリアを;で終了させます。
その後は、自由にJavaのコードを書くことができますので、ここでにIf文やSwitch文を記述して分岐をさせる、という方法です。

図3のExpressionEditorの内容は下記のようになっています。

(StringHandling.LEN(row1.name) >= 4) ? "文字数オーバーです" : row1.name;
if("02".equals(row1.bunrui)){
System.out.println("分類が02です");
}

このように、とある項目へのセット内容を;以前で確定させて、その後に自分の好きなコードを挿入します。
SQLインジェクションっぽいんで勝手にJavaコードインジェクションと呼んでます。

非推奨の理由は、お察しの通り、コードの保守性が下がるからです。
一見して、tMapの中のVarのとある項目の中にif文で分岐が行われることは分からないですし…
ジョブ実行でデバッグしたい時などに使用したりします。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です