"KETTLE_SHARED_OBJECTS"を巡る謎、もしくは不満
以前のポストで、PentahoでDB接続情報を複数ジョブ/データ変換で共有化かつパラメータ化する方法について述べました。この方法は3つの要素からなります:
①.kettle
ディレクトリ──環境変数もしくはシステム・プロパティKETTLE_HOME
で指し示されたディレクトリ配下に作られる隠しディレクトリ
②kettle.properties
ファイル──上記.kettle
ディレクトリに作られるプロパティファイル。Spoonなどを起動するときに作成/ロードされる。
③shared.xml
ファイル──Spoon上で作成し「共有」設定をしたDB接続情報などの定義が格納されるXMLファイル。Spoon使用中に作成され、その後の起動時にロードされる。
この中で③のXMLファイルのパスはあくまでも①のディレクトリのパスを通じて間接的に解決される(決定される)に過ぎません。そして①のディレクトリ・パス自体もあくまでもそのベースのディレクトリを指定できるだけで、あくまでも間接的に解決される(決定される)に過ぎません。そのものズバリ③のファイルのパスを指定する方法はないのでしょうか?
実のところ、Spoonのプログラム・ロジック上、環境変数もしくはシステム・プロパティKETTLE_SHARED_OBJECTS
でそのものズバリのパスを指定できる「ような」コードが存在します。「ような」というのは実際にはそれが限定された条件でしか機能しないからです。
その条件というのも手元であれこれ試して見つけたものなので、これがすべてではないかもしれませんが、「Pentaho Data IntegrationのSpoon.batのなかで構築される、Spoon起動時のシステム・プロパティ指定のコマンドラインのうち、"-DKETTLE_HOME=%KETTLE_HOME%"
を削除し"-DKETTLE_SHARED_OBJECTS=file:///X:/path/to/shared.xml"
を追加する」というものです。
KETTLE_HOME
の指定を消さないとKETTLE_SHARED_OBJECTS
が有効になりません。またKETTLE_SHARED_OBJECTS
はプログラム・コード中には「環境変数もしくはシステム・プロパティ」と記述されていますが、試してみた限りではシステム・プロパティによる指定でないと無効でした。
このようにすればshared.xml
を完全に任意の場所に置くことができる(KETTLE_HOME
ではあくまで①のディレクトリの位置を、それすらも半ば間接的に指定できるに過ぎない)のですが、それでは②のプロパティ・ファイルやその他①のディレクトリ配下に作られるファイルはどうなるのだろうという、疑問というか不安も残ります。仕事で使うにはこの方法はちょっと怖いですね。。
というわけでKETTLE_SHARED_OBJECTS
を巡るPentahoの挙動は謎で、「せっかくそれっぽいものを用意しておきながら使えない」という不満が残った次第。そもそも用途が違うのでしょうか(いやそんなはずは…)。