[Talend] 実行時にコンテクストパラメータを変更する方法
処理のフローは同じだけど指定する値が個々で異なるケースというものがあります。
こんな時は、実行時のパラメータとしてその値を指定してあげることで作成するジョブはひとつで済ませることができます。
今回は以下のようなジョブを用意して、実行時にパラメータが指定できることを確認します。
ジョブ parameter
任意ディレクトリ内のファイルの名称を標準出力へ出力します。
コンテクストの適用
任意ディレクトリを表すコンテクストを用意します。コンテクストとは Talend ジョブ内で有効な変数のようなものです。
「directory」という名前で初期値を「C:\」として用意しました。
コンテクスト directory を「tFileList」コンポーネントの「ディレクトリ」項目に指定します。
この状態でジョブを実行すると C:\ 直下に存在するファイルの名称が出力されます。
パラメータの指定
実行ジョブを生成
ジョブを選択し、コンテクストメニューから「ジョブをエクスポート」を選択します。
パラメータを指定して実行
コンテクストへ値を指定するには「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」)
同じようなフローでいくつかの値が異なるジョブが必要な場合は今回の「パラメータ指定」を検討してみると良いかもしれません。