[Talend]tHashInput, tHashOutputを利用してデータをキャッシュ利用する

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

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

はじめに

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

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

前提条件

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

tHashInput、tHashOutputについて

「tHashInput」、「tHashOutput」を利用するとデータを一旦メモリ上にキャッシュして、同じデータを高速に再利用することができます。

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

tHashInput tHashOutput

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

ジョブの説明

「tFixedFlowInput」でサンプルデータを生成して、データを「tHashOutput」にキャッシュしています。その後、「tHashInput」からキャッシュしたデータを出力して「tLogRow」で標準出力に表示します。

また、キャッシュ利用していることの確認のため、「tHashInput」を利用するサブジョブを2つ作成しています。

パレット設定

今回紹介する「tHashInput」、「tHashOutput」ですが、実は標準ではパレットに表示されないコンポーネントとなっています。利用するには以下の設定が必要です。

まず、上部のアイコンから「プロジェクト設定」をクリックして開きます。

次に、プロジェクト設定の「デザイナー > パレット設定」を開き、「ジョブ > 技術」配下にある「tHashInput」、「tHashOutput」を選択して右側へ移動させて「OK」ボタンをクリックします。

これで、パレットに「tHashInput」、「tHashOutput」が表示され、利用できるようになりました。

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

「tFixedFlowInput」コンポーネントでサンプルデータの設定を行います。

データとスキーマは以下のように設定しました。スキーマ定義では「Year」をキーカラムとして設定しています。サンプルデータとしては、あえて「2018」のレコードを2レコード作成しています。

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

「tHashOutput」コンポーネントでキャッシュする設定を行います。

tHashOutputとリンク

ここにチェックを入れると、別の「tHashOutput」コンポーネントとキャッシュデータをリンクすることができます。なお、チェック時にはコンポーネントを選択するプルダウンが表示されます。

データ書込モデル

プルダウンなのですが、選択できるのは「メモリのキャッシュ」のみでした。なお、データについては、すべてメモリ上にキャッシュされますので、あまりにも大きなデータの場合にはジョブのメモリ利用が想定以上(java.lang.OutOfMemoryError)にならないように注意してください。

キーマネジメント

これは、スキーマ定義でキーに設定したカラムがある場合、重複キーのレコードをどう扱うかの設定です。「最初を保持」または「最後を保持」の場合には、どちらかのレコードのみが保持され、「すべてを保持」の場合にはすべてのレコードが保持されます。

今回のサンプルデータの場合には、キーカラムである「Year」が「2018」のレコードが2レコードあるので、仮に「最初を保持」とした場合には「ZI-O」のレコード(最初に追加されたレコード)のみが保持されます。

追加

このオプションは、もしイテレータで繰り返しこのコンポーネントにデータが流れてきた場合に、追加するか入れ替えるかのオプションです。

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

以下のように設定しました。コンポーネントリストから、キャッシュデータを取得したいコンポーネントを選択し、スキーマ定義をその「tHashOutput」のスキーマ定義と同じにしています。

「読み込んだ後にキャッシュをクリア」のチェックは、今回は繰り返し利用をするので外していますが必要に応じてチェックするとよいかと思います。

なお、もう1つの「tHashInput」コンポーネントの設定も同じ設定にしました。

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

「tLogRow」コンポーネントは、デフォルトのまま特になにも設定しなかったので、ここでは説明を省略します。

実行結果

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

[statistics] connecting to socket on port 3484
[statistics] connected
2018|ZI-O
2017|Build
2016|Ex-Aid
2018|Another
2018|ZI-O
2017|Build
2016|Ex-Aid
2018|Another
[statistics] disconnected

キャッシュされたレコードが、それぞれ4レコードずつ表示されました!

まとめ

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

「tHashInput」、「tHashOutput」の利用ケースとしては取得に時間の掛かるデータや、よく変更されるデータのある時点におけるデータをキャッシュして利用するというケースが多いかと思います。

それでは。