はじめに。今回使用するジョブの説明など
みなさん、こんにちは!
今回は、Talendのコンポーネントである、tJava, tJavaRow, tJavaFlexについてまとめます。
これら3コンポーネントの共通点としては、Javaのコードを直接記述して使用するという点です。
が、全て使い所が異なりますので、それらの使い分けや違いなどを、サンプルジョブを用いて説明していきます。
今回は、こんな感じのジョブを作りました。あまり処理内容に意味がないのが悲しいです。
前述の3コンポーネントを全て使用しています。無理やりですが。
一応、tJavaRow確認 の流れの中で使用している行設定も載せておきます。
tJava, tJavaRow, tJavaFlexってどんなもの?
tJavaコンポーネント
tJavaは、1回のみ実行される処理を記述するためのコンポーネントです。
よく使用する場面としては、変数の初期値設定などが挙げられます。
初期値設定以外にも、Talendのコンポーネントを使用するより、自前でコードを書いた方が良いな…なんて時に使用します。
他にも、tJavaの使い方として適切かどうかはともかく、実行有無判定のために使ったりもします。
tJavaRowコンポーネント
名称から察する通り、JavaのコードをRow(行)単位に適用する場合に使用します。
tJavaRowコンポーネント内では、入力側のrowをinput_row、出力側をoutput_rowとして参照します。
2行目の
[/java]
のように、とある項目を編集できます。
また、出力側に直接関係のないコードの記述ができます。
[java] if("1".equals(input_row.SAVE_FLG)){java.util.ArrayList<String> list = (java.util.ArrayList<String>)globalMap.get("FLG_ROWS");
list.add(input_row.ID);
globalMap.put("FLG_ROWS", list);
}
[/java]
このコードでは、とある条件を満たす入力行のIDを、グローバル変数のハッシュに保存しています。
入力行の項目を編集して出力に渡すという点では、tMapと被りますが、出力に関係のないコードを記述できるという点でtMapとは異なることが分かります。
tJavaFlexコンポーネント
tJava, tJavaRowと比べると、取っつきにくいコンポーネントです。
このコンポーネントは、上記2コンポーネントと異なり、Javaコードを開始コード、メインコード、終了コードの3つの部分に分けて記述します。
開始コードでは、ループ処理の頭部分を書く、ようです。
終了コードはその対になるコードを書きます。(他に書いてもいいとは思いますが)
メインコードに、その名の通りこのコンポーネントにさせたいメイン処理を書きます。
今回の例では、tJavaRow確認 のフローでグローバル変数に保存しておいたArrayListを取り出し、その件数分だけループ、出力側に吐いています。
ご覧の通り、このコンポーネントは、Rowとして保存されていないデータからRowデータを作り出せるという力を持っています。
今回の様に一旦JavaのArrayやHashに入れてしまったデータからRowのフローを作れます。
実践で使うことになったケースとしては、tSoapでSOAP通信をした結果をDocument型で受けて、一旦Hashに保存。その後に保存しておいたDocument型オブジェクトからtJavaFlexで行を生成して…なんかがありました。
他にも、自前で定義した配列から、Row接続を作り出したり、Iterateを作り出す時に便利です。
もちろん、tRowGeneratorでも似たことはできますが。
下記の記事でもtJavaFlexを使用しています。
https://tasokori.net/%E3%80%90talend%E3%80%91%E3%82%B8%E3%83%A7%E3%83%96%E3%81%AE%E5%88%86%E5%89%B2%E3%81%A8%E5%80%A4%E3%81%AE%E5%8F%97%E6%B8%A1%E3%81%97%E8%BF%94%E5%8D%B4%E3%80%82%E3%81%82%E3%81%A8tflowtoiterate/
まとめ。使い分けなど
まとめると、全てJavaのコードを書く必要がある場合に使用使い分けとしては、
- tJava ⇒ 1度のみJavaコードを実行する場合
- tJavaRow ⇒ 行データにJavaコードを適用する場合
- tJavaFlex ⇒ 行データでないデータから行データを作る場合など(他にも使用用途は沢山あると思いますが)
tJavaFlexは情報が少ないので、どういう場面で使うのが最も効果的か分からないんですが…
個人的に使ってみてこんな住み分けかなと思います。
今回は以上です!