[Talend] 実行時にコンテクストパラメータを変更する方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

処理のフローは同じだけど指定する値が個々で異なるケースというものがあります。

こんな時は、実行時のパラメータとしてその値を指定してあげることで作成するジョブはひとつで済ませることができます。

今回は以下のようなジョブを用意して、実行時にパラメータが指定できることを確認します。

ジョブ parameter

WS000000

任意ディレクトリ内のファイルの名称を標準出力へ出力します。

コンテクストの適用

任意ディレクトリを表すコンテクストを用意します。コンテクストとは Talend ジョブ内で有効な変数のようなものです。

WS000001

「directory」という名前で初期値を「C:\」として用意しました。

コンテクスト directory を「tFileList」コンポーネントの「ディレクトリ」項目に指定します。

WS000002

この状態でジョブを実行すると C:\ 直下に存在するファイルの名称が出力されます。

パラメータの指定

実行ジョブを生成

ジョブを選択し、コンテクストメニューから「ジョブをエクスポート」を選択します。

WS000003

パラメータを指定して実行

コンテクストへ値を指定するには「context_param」オプションを使用します。

テスト用に用意したディレクトリ「directory_hoge」を指定します。

C:\Path\To\parameter>parameter_run.bat --context_param directory=C:\Users\inage.toru\directory_hoge

C:\Path\To\parameter>C:

C:\Path\To\parameter>cd C:\Path\To\parameter\

C:\Path\To\parameter>java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;parameter_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/jakarta-oro-2.0.8.jar;../lib/log4j-1.2.15.jar; sample.parameter_0_1.parameter --context=Default --context_param directory=C:\Users\inage.toru\directory_hoge
C:\Users\inage.toru\directory_hoge\hoge01.csv
C:\Users\inage.toru\directory_hoge\hoge02.csv
C:\Users\inage.toru\directory_hoge\hoge03.csv

1行目でオプションを指定してランチャーを実行、8~10行目でファイル名が出力されています。

パラメータで指定したディレクトリ内のファイル名が出力されていることが確認できました。

ランチャーへ直接指定

Talend がジョブのエクスポート時に自動生成したランチャー(bat ファイル,sh ファイル)へパラメータを直接指定します。

元の bat ファイルをコピーして新たに作成します。(末尾の %* を context_param オプションへ置き換えています。)

%~d0
 cd %~dp0
 java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;parameter_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/jakarta-oro-2.0.8.jar;../lib/log4j-1.2.15.jar; sample.parameter_0_1.parameter --context=Default --context_param directory=C:\Users\inage.toru\directory_hoge
%~d0
 cd %~dp0
 java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;parameter_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/jakarta-oro-2.0.8.jar;../lib/log4j-1.2.15.jar; sample.parameter_0_1.parameter --context=Default --context_param directory=C:\Users\inage.toru\directory_piyo

このようにすれば、ターゲットディレクトリが複数存在してもランチャーのみ複製すれば良いのでお手軽ですね。ランチャーはテキストファイルなので VBA で生成するような Excel ファイルなどを用意しても良いかもしれません。

C:\Path\To\parameter>parameter_run_for_hoge.bat

C:\Path\To\parameter>C:

C:\Path\To\parameter>cd C:\Path\To\parameter\

C:\Path\To\parameter>java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;parameter_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/jakarta-oro-2.0.8.jar;../lib/log4j-1.2.15.jar; sample.parameter_0_1.parameter --context=Default --context_param directory=C:\Users\inage.toru\directory_hoge
C:\Users\inage.toru\directory_hoge\hoge01.csv
C:\Users\inage.toru\directory_hoge\hoge02.csv
C:\Users\inage.toru\directory_hoge\hoge03.csv

C:\Path\To\parameter>parameter_run_for_piyo.bat

C:\Path\To\parameter>C:

C:\Path\To\parameter>cd C:\Path\To\parameter\

C:\Path\To\parameter>java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;parameter_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/jakarta-oro-2.0.8.jar;../lib/log4j-1.2.15.jar; sample.parameter_0_1.parameter --context=Default --context_param directory=C:\Users\inage.toru\directory_piyo
C:\Users\inage.toru\directory_piyo\piyo01.csv
C:\Users\inage.toru\directory_piyo\piyo02.csv
C:\Users\inage.toru\directory_piyo\piyo03.csv

まとめ

複数のコンテクストを指定する場合は context_param オプションをその数だけ指定します。
(「--context_param hoge=HOGE --context_param piyo=PIYO」)

同じようなフローでいくつかの値が異なるジョブが必要な場合は今回の「パラメータ指定」を検討してみると良いかもしれません。

参考