Talendでファイル圧縮
はじめに
大量データをファイル出力した際には、ファイル圧縮を行う必要性もあると思います。 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ファイルができた時などの参考になればと思います。