PDIは手元で実行する際にはSpoonでそのまま実行することが多いのですが、バッチ的にCronやタスクスケジューラーで実行したいという質問をよくされるので、まとめておきました。
バッチ実行用のスクリプト
PDIには、バッチ実行用に2つのスクリプトがあらかじめ用意されています。
以下の2種類です。
- pan.sh (Windowsの場合はPan.bat)
- kitchen.sh (Windownsの場合はKitchen.bat)
PDIには2つの設定形式(JOBとTransformation)があるのですが、それぞれpan系がTransformationに、kitchen系がJOBに対応しています。
つまり、Transformationを実行する場合にはpan系のスクリプトを、JOBを実行する場合にはkitchen系のスクリプトを使用するわけです。
※Transformationはデータを抽出してきて変換してロードするまでのいわゆるETL処理を実行するもので、JOBはそれらTransformationをまとめて実行するためのものです。JOBを使用すると、先行のTransformation処理が成功すればTransformation2、失敗すればTransformation3など、処理の流れを設定することができます。それ以外にも特定ファイルがあれば特定のTransformationを実行するなども可能です。
panの実行
まずはそのまま実行してみます。するとしばらくしてヘルプが表示されます。
# cd data-integration (※PDIのインストールディレクトリ)
# ./pan.sh
:
:
Options:
-rep = リポジトリ名
-user = リポジトリユーザ名
-pass = リポジトリパスワード
-trans = 起動するトランスフォーメーション名
-dir = ディレクトリー (/の追記が必要)
-file = The filename (Transformation in XML) to launch
-level = ログレベル(Basic, Detailed, Debug, Rowlevel, Error, Minimal, Nothing)
-logfile = 書き出すためのロギングファイル
-listdir = リポジトリ内のディレクトリを表示します。
-listtrans = 指定されたディレクトリのトランスフォーメーションを表示します。
-listrep = 利用可能なリポジトリを表示します。
-exprep = 全てのリポジトリオブジェクトをひとつのXMLファイルにエクスポートします。
-norep = リポジトリにロギングしません。
-safemode = セーフモードで起動します。
-version = show the version, revision and build date
-param = パラメータ <NAME>Pan.ComdLine.Version=バージョン、更新、作成日時表示
-listparam = 指定されたトランスフォーメーションで定義されたパラメータ情報を表示します。
-metrics = Gather metrics during execution
-maxloglines = 内部的に保持されるログの最大行数を指定します。 0(デフォルト)に設定するとすべての行を保持します。
-maxlogtimeout = 内部的に保持されるログの最大有効期間(分)を指定します。0(デフォルト)に設定すると無制限となります。
リポジトリ名(rep)、ユーザ名(user)、パスワード(pass)、ディレクトリ(dir)、トランスフォーメーション名(trans)はリポジトリを使用している場合に設定します。
※PDIのリポジトリについては、こちらをご確認ください。
# ./pan.sh -rep localhost -user admin -pass password -dir /home/admin -trans test
:
:
2018/05/02 10:51:25 - Pan - 実行開始
2018/05/02 10:51:25 - RepositoriesMeta - Reading repositories XML file: /Users/michi/.kettle/repositories.xml
2018/05/02 10:51:25 - PurRepositoryConnector - Creating security provider
2018/05/02 10:51:25 - PurRepositoryConnector - Creating repository web service
2018/05/02 10:51:25 - PurRepositoryConnector - Creating repository sync web service
May 02, 2018 10:51:25 AM com.sun.xml.ws.api.streaming.XMLStreamReaderFactory$Woodstox <init>
警告: Expected property not found in Woodstox input factory: {0}
2018/05/02 10:51:26 - PurRepositoryConnector - Repository web service created
2018/05/02 10:51:26 - PurRepositoryConnector - Creating unified repository to web service adapter
2018/05/02 10:51:26 - PurRepositoryConnector - Synchronizing repository web service
2018/05/02 10:51:26 - PurRepositoryConnector - Security provider created
2018/05/02 10:51:27 - PurRepositoryConnector - Registering security provider
2018/05/02 10:51:27 - PurRepositoryConnector - Repository services registered
2018/05/02 10:51:27 - PurRepository - Creating repository meta store interface
2018/05/02 10:51:27 - PurRepository - Connected to the enterprise repository
2018/05/02 10:51:27 - test - Dispatching started for transformation [test]
2018/05/02 10:51:27 - データグリッド.0 - 処理を終了 (I=0, O=0, R=0, W=1, U=0, E=0)
2018/05/02 10:51:27 - Pan - 終了しました。
2018/05/02 10:51:27 - Pan - 開始Pan.ComdLine.XMLTransFile=起動するファイル名(XML内のトランスフォーメーションファイル)
2018/05/02 10:51:27 - Pan - 2秒後にプロセスを終了します。
2018/05/02 10:51:27 - test -
2018/05/02 10:51:27 - test - Step データグリッド.0 ended successfully, processed 1 lines. ( 0 lines/s)
リポジトリを使用せずにファイルベース(.ktrファイル)で実行する場合には、リポジトリの設定は行わずにファイル名(file)で指定します。
# ./pan.sh -file test.ktr
:
:
2018/05/02 10:54:02 - Pan - 実行開始
2018/05/02 10:54:02 - test - Dispatching started for transformation [test]
2018/05/02 10:54:02 - データグリッド.0 - 処理を終了 (I=0, O=0, R=0, W=1, U=0, E=0)
2018/05/02 10:54:02 - Pan - 終了しました。
2018/05/02 10:54:02 - Pan - 開始Pan.ComdLine.XMLTransFile=起動するファイル名(XML内のトランスフォーメーションファイル)
2018/05/02 10:54:02 - Pan - 0秒後にプロセスを終了します。
2018/05/02 10:54:02 - test -
2018/05/02 10:54:02 - test - Step データグリッド.0 ended successfully, processed 1 lines. ( - lines/s)
あと良く使う設定としては、ログ系の設定とパラメータ系の設定です。
以下は、パラメータ"Year"に2018を、"Month"に05を設定し、実行ログをログレベル"Basic"で"test.log"に出力するように実行した場合の例です。
パラメータが設定されているか確認するために、パラメータをログに出力するようにしています。
# ./pan.sh -file test.ktr -param Year=2018 -param Month=05 -level Basic -logfile test.log
:
:
2018/05/02 11:27:28 - Pan - レベル: 基本のログでログ出力をいたします。
2018/05/02 11:27:28 - Pan - 実行開始
2018/05/02 11:27:28 - test - Dispatching started for transformation [test]
2018/05/02 11:27:28 - データグリッド.0 - 処理を終了 (I=0, O=0, R=0, W=1, U=0, E=0)
2018/05/02 11:27:28 - ログ書き込み.0 -
2018/05/02 11:27:28 - ログ書き込み.0 - ------------> Linenr 1------------------------------
2018/05/02 11:27:28 - ログ書き込み.0 - Year = 2018
2018/05/02 11:27:28 - ログ書き込み.0 - Month = 05
2018/05/02 11:27:28 - ログ書き込み.0 -
2018/05/02 11:27:28 - ログ書き込み.0 - a = 1
2018/05/02 11:27:28 - ログ書き込み.0 -
2018/05/02 11:27:28 - ログ書き込み.0 - ====================
2018/05/02 11:27:28 - ログ書き込み.0 - 処理を終了 (I=0, O=0, R=1, W=1, U=0, E=0)
2018/05/02 11:27:28 - Pan - 終了しました。
2018/05/02 11:27:28 - Pan - 開始Pan.ComdLine.XMLTransFile=起動するファイル名(XML内のトランスフォーメーションファイル)
2018/05/02 11:27:28 - Pan - 0秒後にプロセスを終了します。
2018/05/02 11:27:28 - test -
2018/05/02 11:27:28 - test - Step データグリッド.0 ended successfully, processed 1 lines. ( - lines/s)
2018/05/02 11:27:28 - test - Step ログ書き込み.0 ended successfully, processed 1 lines. ( - lines/s)
こんな感じで実行することが可能です。
Cronやタスクスケジューラーで実行する場合は、そのまま上記のコマンドラインを実行するように設定するか、一度別のスクリプトやバッチファイルでラップしてから、そのスクリプトを実行するように設定する感じになります。
kitchen.shも大体同じ感じなのでここでは割愛します。
詳細は、Pentaho公式ドキュメントをご確認ください。
実行後に返却されるステータスコードなども記載されています。