はじめに
今回は、前回作成した実行可能なジョブのbatファイルを修正して、外部からジョブにパラメータを渡せるようにしよう、というものです。
前回作成したジョブは、下記のような感じでした。
csvをちょっと編集して別のフォーマットのcsvにするよ、っていうとても簡単なジョブです。
このジョブの、tFileInputDelimitedコンポーネントのパラメータにcontext変数をセットしてありました。
File name/Streamの部分ですね。
このようにcontext化しておくことで、外部からジョブ起動した際に、このコンテキストの値を自由に設定できます。
このジョブでは、入力ファイルのパスを外部から指定できるようにコンテキスト出ししています。
それでは、今回はこのcontextへのパラメータセット方法について具体的に扱っていきます。
(contextってなに?という方はこちらをご覧ください⇒【Talend】グローバル変数の使い方(globalMapとcontext))
ジョブにコンテキストパラメータを渡す方法
前回作成した実行可能なジョブは、job名 + _run.batとなっています。
これをメモ帳などのテキストエディタで開いてみます。
何もしていなければ下記のようになっていると思います。
[text] %~d0cd %~dp0
java -Xms256M -Xmx1024M -cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;create_exec_bat_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.15.jar;../lib/talendcsv.jar;../lib/talend_file_enhanced_20070724.jar; my_test.create_exec_bat_0_1.create_exec_bat –context=Default %*
[/text]
この、最後の部分がキモです。
末尾あたりが、
[/text]
となっています。これがコンテキスト環境を指定している部分です。
[text] –context=コンテキスト環境名[/text]
という書式らしいです。はい。
さらに、今回やりたい個別にパラメータをセットするためには、
[text] –context_param コンテキスト名=セットする値[/text]
と記述すれば良いです。
複数ある場合は、–の前を半角スペース開けて次を記述していきます。
batファイルを修正してジョブに渡すパラメータを変更する
というわけで、さっそく最初のbatファイルをcontext_paramで個別に値をセットするように変更してみましょう。
下記のようにします。
%~d0
cd %~dp0
java -Xms256M -Xmx1024M ^
-cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;create_exec_bat_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.15.jar;../lib/talendcsv.jar;../lib/talend_file_enhanced_20070724.jar; my_test.create_exec_bat_0_1.create_exec_bat –context=Default –context_param inputFilePath="C:\Talend\data\chapter01_data_contextで与えられたよ.csv"
[/text]
末尾に、–context_param を付与して指定したコンテキストパラメータに値をセットします。
今回は、2枚目の画像の通り、inputFilePathというコンテキスト変数に値を与えたいので、
[/text]
と末尾部分を変更し、入力ファイルパスを渡しています。
このbatファイルを実行してみると、下記の通り1枚目の画像とは異なり、入力されたパスのcsvファイルを読み込むようになっていることが確認できます。
はい。
これで終わりでも一応良いですが…
普通はbatファイル自体にパラメータを渡して、そのパラメータをTalendジョブに渡したいですよね。
というわけで、さらにbatファイルを修正します。
batファイルをさらに修正してbatへの入力パラメータをジョブの入力パラメータにセットする
上記のままだと、バッチ実行時にbatファイルを書き換えないといけません。
ので、もう少し修正して
batファイルにパラメータ渡し⇒ジョブにパラメータ渡し
となるようにさらにbatファイルを修正します。
下記の通り修正しました。
[text]@echo off
set INPUT_FILE_PATH=%~1
%~d0
cd %~dp0
echo on
java -Xms256M -Xmx1024M ^
-cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;create_exec_bat_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.15.jar;../lib/talendcsv.jar;../lib/talend_file_enhanced_20070724.jar; my_test.create_exec_bat_0_1.create_exec_bat –context=Default –context_param inputFilePath=%INPUT_FILE_PATH%
[/text]
はい。
INPUT_FILE_PATH変数にbatファイルへの引数(の1番目)をセットするようにし、後にcontext_paramでinputFilePathの値をセットする時に、INPUT_FILE_PATH変数を渡すようにしました。
(ついでにecho offしてコンソールが荒れないようにしてます)
このbatファイルを実行する時は、コマンドプロンプトを開いて実行します。
[text] create_exec_bat_run.bat C:\Talend\data\chapter01_data_contextで与えられたよ2.csv[/text]
のように、batファイルへの第一引数としてファイルパスを指定してあげます。
これで実行すると、無事Talendジョブまで引数が渡り、指定パスのファイルをオープンしていることが確認できます。
batファイルをさらに修正してパラメータをユーザに入力させる形でパラメータを受け取る
上記までで、batファイルとジョブに渡すパラメータの分離はできました。
が、batファイルをダブルクリックで起動して、ユーザにパラメータ入力を促す形にしたい、という場合もあるかと思います。
その場合は、下記のようにすればokです。
[text]@echo off
set /p INPUT_FILE_PATH="入力ファイルパス: "
%~d0
cd %~dp0
echo on
java -Xms256M -Xmx1024M ^
-cp ../lib/systemRoutines.jar;../lib/userRoutines.jar;.;create_exec_bat_0_1.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.15.jar;../lib/talendcsv.jar;../lib/talend_file_enhanced_20070724.jar; my_test.create_exec_bat_0_1.create_exec_bat –context=Default –context_param inputFilePath=%INPUT_FILE_PATH%
[/text]
変わったのは、最初の部分だけですね。
[text] set /p INPUT_FILE_PATH="文字列"[/text]
とすることで、画面に”文字列”を表示しつつ、ユーザからの入力を受け付けINPUT_FILE_PATH変数に値を格納できます。
これを実行すると、下記のようになります。
batを実行すると、パラメータを問うようになっています。
ここまでくれば、Talendジョブを単体実行させるのに十分かと思います。
今回は以上です!