[Talend Open Studio Data Integration] グローバル変数を定義する2つの方法

[Talend Open Studio Data Integration] グローバル変数を定義する2つの方法

Talend でグローバル変数を扱う

Talend のジョブの中で共通して使いたい変数がある場合、グローバル変数 (Global Variable) という機能を利用することが出来ます。プログラミングであれば、グローバル変数というプログラム全体で利用できる変数を定義しますが、Talend でも1つのジョブの中で共通して使うことが出来る変数を指します。

グローバル変数を利用すれば、ジョブ内のコンポーネントそれぞれに値を書かずに済みます。一箇所で定義を変えれば、その変数を参照するコンポーネントの値を全て変更することが可能になります。

Talend ではいくつかの方法でグローバル変数を定義できますが、ここでは2つの方法を説明していきます。



tSetGlobalVar コンポーネントを使ってグルーバル変数を定義する

tSetGlobalVar コンポーネントを使うと、簡単にグローバル変数を定義することが出来ます。グローバル変数は必ず変数名と値の組み合わせで定義します。

では早速 tSetGlobalVar コンポーネントを使ったサンプルジョブを見ていきます。以下のように tSetGlobalVar コンポーネントと、tJava コンポーネントを配置し、"On Subjob OK" で接続します。

次に tSetGlobalVar コンポーネントの設定で、緑色のプラスボタン (+) を押して Key には "foo" を入力し、Value には TalendDate.getDate("YYYY-MM-dd HH:mm:ss") と入力します。なお TalendDate.getDate("YYYY-MM-dd HH:mm:ss") は現在日時を返してくれる関数です。このように値には関数を書くことも出来ます。

次に tJava コンポーネントの設定を開き、Code に System.out.println(globalMap.get("foo")); と記述します。globalMap.get("変数名") というのが、グローバル変数の中から "変数名" で定義された値を取得する関数です。tSetGlobalVar コンポーネントで foo という変数名を定義しましたので、globalMap.get("foo") とすることで定義された値を取得することが出来ます。

また System.out.println は Java 言語で、画面にデータを出力する命令です。

それではジョブを実行してみましょう。実行すると下の図のように現在日時が表示されてます。
このように tSetGlobalVar で定義した値は、同じジョブの中の他のコンポーネントから容易に取得することが出来ます。


tJava コンポーネントを使ってグローバル変数を定義する

先程は tSetGlobalVar コンポーネントを使ってグローバル変数を定義しましたが、今度は tJava コンポーネントを使ってグローバル変数を定義してみます。

次にように2つの tJava コンポーネントを配置して "On Subjob OK" で接続します。

そして下の図のように tJava_1 の設定を開いて、Code 欄に次のように入力します。globalMap.put という命令は、1番目の引数に変数名を定義し (ここでは "current_timestamp")、2番目の引数に設定したい値や Java 関数を書きます。これにより指定した変数名でグローバル変数として登録されます。
globalMap.put("current_timestamp", TalendDate.getDate("YYYY-MM-dd HH:mm:ss"));

さらに下の図のように tJava_2 の設定を開いて次のように Code 欄に入力します。このコードはグローバル変数に定義された値を画面に出力する命令です。
System.out.println(globalMap.get("current_timestamp"));

ではジョブを実行してみましょう。下の図の赤枠内に表示されているように、現在日時を tJava_1 で定義して、その値を tJava_2 で取得して画面に表示することが出来ました。

まとめ

グローバル変数を定義する2つの方法を説明しました。tSetGlobalVar コンポーネントは、共通で利用する簡単な変数を定義する場合に利用すると良いでしょう。他方の tJava でグローバル変数を定義する方法は、Java で複雑な計算をした結果をグローバル変数に定義したい場合に利用すると良いでしょう。