【Talend】処理件数(行数)を取得する

はじめに

みなさん、こんにちは!

今回は、Talendの話題です。
処理件数の取得方法について書いていきます。

ここでいう処理件数(行数)とは、下記のようにRow接続した時に上に出てくる何件処理しましたよ、という値のことです。

talend_rownum1

早速、処理件数の取得方法です

意外ですが、Talendで処理件数を取得するクールな方法は…無いようです。
そこで、ソースコードを見ると、大体どのコンポーネントも処理件数をglobalMapに格納しているようなので、その値を参照することで件数を得ます。
具体的には下記の通りです。

globalMap.get("tRowGenerator_1_NB_LINE")

globalMapって何…という方は、こちらの記事をご覧ください。
取得キーには、”tRowGenerator_1_NB_LINE”を渡していますが、これはそのジョブに依ります。

後述しますが、今回は、tRowGenerator⇒tLogRowを1つのサブジョブとしています。
そのtRowGeneratorの物理名がtRowGenerator_1でしたので、上記のようなキーとなっています。

具体的に、サンプルジョブを作って確認

実際のジョブでもう少し具体的に確認してみましょう。
今回は、下記のような3コンポーネントだけのシンプルなジョブを作っています。

talend_rownum2

tRowgenerator(Rowを生成できるコンポーネント。何件、どういうルールで生成するかを指定して使います)からtLogRowにRow接続、
その処理完了後にtJavaで処理件数を表示する、というシンプルなジョブです。
上記画像のコンソールを見ると、一番最後に”生成した行数=19″と出力されていますが、この部分で件数取得が使用されています。

ちなみに、tRowgeneratorの設定はこんな感じです。

talend_rownum3

画像真ん中の右手のテキストボックスに、何行生成するかを指定します。
今回は、ジョブ起動時にcontextの値を受け取るためのポップアップを表示し、そこで件数を受け取るようにしています。
設定としては、1カラムだけ定義、String型のランダム値を取得するように設定してあります。
このあたりはどうでも良いですかね。

次に、tJavaRowの設定です。

talend_rownum4

globalMapに格納されている処理件数を取得しています。
必ずInteger型が格納されるようなので、Integerキャストしています。

こんな感じの設定でジョブを実行すると、最初の画像のような結果が得られます。

どうやってglobalMapのキー部分の名称が分かるの?

基本的には、コンポーネントの物理名が分かれば、アタリがつきます。
今回の例でいくと、tRowGeneratorの物理名は、tRowGenerator_1ですので(コンポーネントを選択してコンポーネントタブで見れます)、

コンポーネント物理名+_NB_LINE

で殆どの場合で行数が取得できます。

もっとちゃんと確認したいのであれば、いつものデザイナ画面ではなく、コード画面を見ると分かります。

talend_rownum5

デザイナの左下部分にある、Designerタブの隣に、Codeというタブがありますので、Codeの方を押します。
すると、ザ・eclipseのJavaソース画面が表示されます。
ここで、コンポーネントの物理名+_NB_LINEとかで検索すると、上記緑枠のようにglobalMapにputしているコードが見れると思います。
こんなことを行っているんですね。内部では。

他にも、NB_LINEとかで検索すれば、どのコンポーネントがカウントを持っているか調べることができます。

おわりに

処理件数を取得する、という一見簡単そうなテーマなのですが、地味に苦労しました。
知らないと…詰みますよね?

余談ですが、Codeタブは件数取得以外の用途でも結構使えますので、活用してみると良いかと思います。

今回は以上です!

 

 

コメントを残す

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