この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
大量データをファイル出力した際には、ファイル圧縮を行う必要性もあると思います。 Talendのコンポーネントでもファイルを圧縮することができるので、ご紹介します。
環境
今回使用した環境以下の通りです。
- Windows8.1 64bit
- Talend Open Studio 6.0.0
- Java 1.7
やり方
Talendで圧縮する方法はいくつかあります。
tFileArchiveを使う
zip圧縮するだけなら、このコンポーネントを使えば簡単にできます。
圧縮元のディレクトリと圧縮したファイル名を指定します。
(Talend6.2.0ではgzip形式でのファイル圧縮にも対応してくれているようです。)
tFileOutputDelimitedを使う
CSV・TSVファイルを出力する際に便利なtFileOutputDelimitedコンポーネントですが、
ファイル出力する際に、zip形式に圧縮もしてくれます。
やり方としては、『ZIPファイルに圧縮』チェックボックスにチェックを入れるだけです。
(こちらは6.2.0ではgzip形式ファイル圧縮には対応してないようです。)
Javaで書く
zip形式で圧縮するだけなら、上記のtFileArchiveコンポーネントを使えばいいのですが、 gzip形式で圧縮するとなるとTalendのバージョンが古い場合、tFileArchiveがgzip圧縮に対応していません。 実際に6.0.0でファイルをGZip圧縮をする必要性があるジョブを作成する機会があったのですが、Javaで書かざるをえませんでした。 案件によっては古いバージョンを使うこともありますので、そんな時はJavaで書くといいと思います。 何度も使うのであれば、ルーチンとして専用のクラスを作っておくと便利です。 ただのJavaのコードですが、備忘録も兼ねてソースを残しておきます。
package routines;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.zip.GZIPOutputStream;
public class GZipCompresser {
/**
* ファイルをGZip圧縮する
* @param targetFilePath 対象ファイル
* @param outputFilePath 出力先ファイル
* @param eol 改行コード
* @throws Exception
*/
public static void gzipCompress(String targetFilePath, String outputFilePath, String eol) throws Exception {
File outputFile = new File(outputFilePath);
File inputFile = new File(targetFilePath);
try (GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(outputFile));
BufferedOutputStream writer = new BufferedOutputStream(gzos);
FileReader fr = new FileReader(inputFile);
BufferedReader reader = new BufferedReader(fr);) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line.getBytes());
writer.write(eol.getBytes());
}
}
}
}
簡単ではありますが、以上となります。 Talendを使ってサイズの大きいCSVファイルができた時などの参考になればと思います。