Talendでファイル圧縮

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

はじめに

大量データをファイル出力した際には、ファイル圧縮を行う必要性もあると思います。
Talendのコンポーネントでもファイルを圧縮することができるので、ご紹介します。

環境

今回使用した環境以下の通りです。

  • Windows8.1 64bit
  • Talend Open Studio 6.0.0
  • Java 1.7

やり方

Talendで圧縮する方法はいくつかあります。

tFileArchiveを使う

talend_2016071901
zip圧縮するだけなら、このコンポーネントを使えば簡単にできます。
圧縮元のディレクトリと圧縮したファイル名を指定します。
(Talend6.2.0ではgzip形式でのファイル圧縮にも対応してくれているようです。)
talend_2016071902

tFileOutputDelimitedを使う

CSV・TSVファイルを出力する際に便利なtFileOutputDelimitedコンポーネントですが、
ファイル出力する際に、zip形式に圧縮もしてくれます。
やり方としては、『ZIPファイルに圧縮』チェックボックスにチェックを入れるだけです。
(こちらは6.2.0ではgzip形式ファイル圧縮には対応してないようです。)
talend_2016071903

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ファイルができた時などの参考になればと思います。