はじめに
みなさん、こんにちは!
今回は、Talendの話題です。
処理件数の取得方法について書いていきます。
ここでいう処理件数(行数)とは、下記のようにRow接続した時に上に出てくる何件処理しましたよ、という値のことです。
早速、処理件数の取得方法です
意外ですが、Talendで処理件数を取得するクールな方法は…無いようです。
そこで、ソースコードを見ると、大体どのコンポーネントも処理件数をglobalMapに格納しているようなので、その値を参照することで件数を得ます。
具体的には下記の通りです。
[/java]
globalMapって何…という方は、こちらの記事をご覧ください。
取得キーには、”tRowGenerator_1_NB_LINE”を渡していますが、これはそのジョブに依ります。
後述しますが、今回は、tRowGenerator⇒tLogRowを1つのサブジョブとしています。
そのtRowGeneratorの物理名がtRowGenerator_1でしたので、上記のようなキーとなっています。
具体的に、サンプルジョブを作って確認
実際のジョブでもう少し具体的に確認してみましょう。
今回は、下記のような3コンポーネントだけのシンプルなジョブを作っています。
tRowgenerator(Rowを生成できるコンポーネント。何件、どういうルールで生成するかを指定して使います)からtLogRowにRow接続、
その処理完了後にtJavaで処理件数を表示する、というシンプルなジョブです。
上記画像のコンソールを見ると、一番最後に”生成した行数=19″と出力されていますが、この部分で件数取得が使用されています。
ちなみに、tRowgeneratorの設定はこんな感じです。
画像真ん中の右手のテキストボックスに、何行生成するかを指定します。
今回は、ジョブ起動時にcontextの値を受け取るためのポップアップを表示し、そこで件数を受け取るようにしています。
設定としては、1カラムだけ定義、String型のランダム値を取得するように設定してあります。
このあたりはどうでも良いですかね。
次に、tJavaRowの設定です。
globalMapに格納されている処理件数を取得しています。
必ずInteger型が格納されるようなので、Integerキャストしています。
こんな感じの設定でジョブを実行すると、最初の画像のような結果が得られます。
どうやってglobalMapのキー部分の名称が分かるの?
基本的には、コンポーネントの物理名が分かれば、アタリがつきます。
今回の例でいくと、tRowGeneratorの物理名は、tRowGenerator_1ですので(コンポーネントを選択してコンポーネントタブで見れます)、
[/text]
で殆どの場合で行数が取得できます。
もっとちゃんと確認したいのであれば、いつものデザイナ画面ではなく、コード画面を見ると分かります。
デザイナの左下部分にある、Designerタブの隣に、Codeというタブがありますので、Codeの方を押します。
すると、ザ・eclipseのJavaソース画面が表示されます。
ここで、コンポーネントの物理名+_NB_LINEとかで検索すると、上記緑枠のようにglobalMapにputしているコードが見れると思います。
こんなことを行っているんですね。内部では。
他にも、NB_LINEとかで検索すれば、どのコンポーネントがカウントを持っているか調べることができます。
おわりに
処理件数を取得する、という一見簡単そうなテーマなのですが、地味に苦労しました。
知らないと…詰みますよね?
余談ですが、Codeタブは件数取得以外の用途でも結構使えますので、活用してみると良いかと思います。
今回は以上です!