[Talend]tFileListを利用してファイルをリストアップする

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

はじめに

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

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

前提条件

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

tFileListについて

「tFileList」を利用すると指定したディレクトリ配下の「ファイル」や「ディレクトリ」をリストアップすることができます。

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

tFileList

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

ジョブの説明

「tFileList」でファイルをリストアップし、「tJava」でリストアップしたファイルパスを標準出力に表示します。

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

「tFileList」コンポーネントでリストアップする方法を設定していきます。まずは「基本設定」からです。

ディレクトリー

「ディレクトリー」が一番ベースとなる設定です。リストアップする対象のディレクトリーパスをここに設定します。

FileListタイプ

「FileListタイプ」にはリストアップする対象を設定します。対象としては、「ファイル」、「ディレクトリ」、「両方」を選択できます。

今回はファイルをリストアップしたいので、「ファイル」を選択しました。

サブディレクトリを含む

ここにチェックを入れると、設定した「ディレクトリー」をベースにサブディレクトリを含んで検索してくれます。

大文字と小文字を区別

ファイルマスクを利用する際に大文字と小文字を区別する場合には、ここを「利用可」にします。区別しない場合は「不可」とします。

今回は大文字と小文字を区別させたいので「利用可」とします。

ファイルが見つからなければエラーを生成

ここにチェックを入れると、ファイルが見つからなかった場合にエラーが生成されます。

今回はオフとします。

ファイルマスクとしてGlob表現を使用

利用するファイルマスクの表現形式をGlob にするかPerl5のRegEx形式にするかを選択できます。

直観的にはGlobが利用しやすいのかなと思います。

ファイル

「ファイルマスク」の設定です。下部の「+」をクリックしてファイルマスクを追加します。

今回はログファイルの取得を想定し、拡張子が小文字の「.log」ファイルを取得したいものとして「*.log」を指定します。

順序の基準 / 順序

ここでは、リストアップする順序を指定することが出来ます。なお「指定しない」にした場合には名前順になるようです。

今回は「名前順」で「ASC」(昇順)を指定しました。

除外ファイルマスクを使用

ここから、「詳細設定」に移ります。

「除外ファイルマスクを使用」にチェックを入れると、基本設定で設定したファイルマスクが「除外ファイルマスク」として機能するようになります。(対象外となる)

今回はOFFです。

スラッシュ(/)を使用したファイルパス形式(Windowsで使用)

この設定は、出力するファイルパスをスラッシュを使用した形式に変更してくれるオプションです。

例えばONとOFFで以下のような違いとなります。今回はONにしました。なお、この設定は説明に書かれている通りWindows環境でのみ利用するオプションです。

// オプションなし
C:\tmp\Sandbox\Components\tFileList\Rabbit.log

// オプションあり
C:/tmp/Sandbox/Components/tFileList/Rabbit.log

tStatCatcher統計情報

「tStatCatcher」コンポーネントと組合せてジョブ処理に関するメタデータを収集する際に利用します。今回は利用しません。

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

「tJava」コンポーネントではファイルパスを標準出力するコードを書きます。

なお、以下の画像のようにコンポーネント名を入力して(入力途中でもOK)、Ctrl+Spaceキーを押すと利用できる変数候補が表示されます。

今回はファイルパスを出力したいので、「tFileList.CURRENT_FILE_PATH」を選択すると自動で変数名が補完されます。

最終的なコードは以下としました。

String currentFilePath = ((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"));
System.out.println(currentFilePath);

フォルダへのファイル配置

リストアップするファイルをフォルダに配置します。今回は以下のように配置しました。

C:\tmp\Sandbox\Components\tFileList>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は EC53-D1E9 です

 C:\tmp\Sandbox\Components\tFileList のディレクトリ

2018/10/10  10:15    <DIR>          .
2018/10/10  10:15    <DIR>          ..
2018/10/10  09:52                13 Banjo.info
2018/10/10  09:52                13 Comic.log
2018/10/10  09:52                13 Ninja.log
2018/10/10  09:52                13 Rabbit.log
2018/10/10  09:52                13 Sento.LOG
2018/10/10  09:52                13 Tank.log
               6 個のファイル                  78 バイト
               2 個のディレクトリ   8,035,561,472 バイトの空き領域

これで設定は完了です。

実行結果

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

[statistics] connecting to socket on port 3812
[statistics] connected
C:/tmp/Sandbox/Components/tFileList/Comic.log
C:/tmp/Sandbox/Components/tFileList/Ninja.log
C:/tmp/Sandbox/Components/tFileList/Rabbit.log
C:/tmp/Sandbox/Components/tFileList/Tank.log
[statistics] disconnected

「tFileList」で記述した通りに出力されました!

ファイルマスクで「*.log」と指定し、かつ、大文字小文字の区別をしたので「Banjo.info」と「Sento.LOG」は除外されています。また、ファイルパスもスラッシュ区切りになっています。

まとめ

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

今回は単純にファイルパスだけを出力しましたが、実際のジョブでは取得したファイルパスをファイル入力系のコンポーネントなどで利用することになると思います。

それでは。