[Talend]tContextLoadを利用してファイルからコンテキスト値をロードする

今回はTalendのコンポーネント「tContextLoad」を紹介したいと思います。
2018.10.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。DI部の大高です。

今回はTalendのコンポーネント「tContextLoad」を紹介したいと思います。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.0.1」で検証しています。

tContextLoadについて

「tContextLoad」を利用すると、スキーマ定義として「key」と「value」を持つデータをコンテキストに読み込むことができます。

「tContextLoad」コンポーネントのTalend Helpページはこちらです。

tContextLoad

では、具体的に以下で解説していきます。

ジョブの説明

「tFileInputProperties」で設定ファイルを読み込み、読み込んだデータを「tContextLoad」でコンテキスト値に設定します。その後、「tJava」でコンテキスト値の確認のため、標準出力に表示します。

コンテキストについて

Talendのジョブでは「コンテキスト」と呼ばれるものを利用することができます。ここでは細かい説明を割愛しますが、コンテキストは型付きでさまざまな値を設定できるもので、更には「コンテキスト環境」を設定して環境ごとに値を切り替えたりもできます。

今回はジョブに以下のように「name」と「form」の2つのコンテキストを作成しました。どちらも「String」型で、値はあえて設定しません。

「tFileInputProperties」コンポーネントの設定

「tFileInputProperties」コンポーネントで「properties」ファイルから値を読み込みます。

「tFileInputProperties」コンポーネントについての詳しい説明は、以下の記事をご参照ください。

[Talend]tFileInputPropertiesを利用して設定値を読み込む | DevelopersIO

今回は読み込むファイルを以下のようなpropertiesファイルとしました。

location=Touto
name=Sento
form=RabbitTank

「tContextLoad」コンポーネントの設定

「tContextLoad」コンポーネントでは、コンポーネント設定とスキーマ定義は以下の通りとしました。

スキーマ定義

スキーマ定義は変更不可のスキーマ定義となっており、この定義は「tFileInputProperties」で「.properties」を読み込む際のスキーマ定義と同じとなっています。

ですので、「tFileInputProperties」で読み込んだものがそのまま利用できます。「key」がコンテキストの「Name」、「value」がコンテキストの「Value」に該当します。

ハンドリング設定

設定として「変数をロードする場合は、コンテキストになければなりません」と「変数がコンテキストに存在するが読み込まれていない場合」の2つあり、それぞれ「エラー」、「警告」、「情報」から選択が可能です。

この設定により、条件に一致した場合にハンドリング結果としてどのように処理するかが変わります。

例えば、今回の例ではジョブのコンテキストには「location」が存在しないので、「変数をロードする場合は、コンテキストになければなりません」に該当し「警告」として扱われます。

表示操作

これは「tContextLoad」が行った処理を標準出力に表示するかどうかのオプションです。今回はONにします。

エラーを無効にする、警告の無効化、情報を無効にする

これは、上記の「ハンドリング設定」の結果としてハンドリングされた場合に、その上で無効にするかどうかの設定です。

今回の例では、「警告」に該当するものがありますが「警告の無効化」をONにしているので警告として扱われないことになります。

エラー強制終了

このオプションを有効にすることで、「エラー」となった場合にジョブを強制的に終了することができます。

「tJava」コンポーネントの設定

「tJava」コンポーネントでは以下のようにコードを設定しました。

System.out.println(context.getProperty("location"));
System.out.println(context.name);
System.out.println(context.form);

2行目、3行目では通常のコンテキスト値の取得方法として「context.XXX」としてジョブのコンテキスト値を取得して標準出力に表示させています。

一方で、1行目ではジョブのコンテキストに設定しなかった「location」は「context.location」では取得できないので、「context#getProperty」を利用して取得し、標準出力に表示させています。

実行結果

設定は以上です。実際にこのジョブを実行すると以下のように出力されます。

[statistics] connecting to socket on port 3483
[statistics] connected
tContextLoad_1 set key "location" with value "Touto"
tContextLoad_1 set key "name" with value "Sento"
tContextLoad_1 set key "form" with value "RabbitTank"
Touto
Sento
RabbitTank
[statistics] disconnected

まず最初に、「表示操作」オプションをONにしているので「tContextLoad」コンポーネントの処理が表示されています。その後に「tJava」で設定した通り、コンテキスト値が表示されています!

まとめ

以上、「tContextLoad」コンポーネントの紹介でした。

「実行時にコンテキスト値をファイルから読み込みたい」という場合に「tFileInputProperties」コンポーネントと組み合わせることでうまく活用できるのではないでしょうか。

それでは。