Pentaho Kettleは、Javaベースのデータ統合および変換ツールで、データウェアハウスやデータレイクの構築に適しています。この記事では、Pentaho Kettleを使用してファイルの圧縮と展開を行うための手順を詳しく説明します。
環境構築
- ソースコード取得 プロジェクトリポジトリをローカルにクローンします。
git clone https://gitcode.com/gh_mirrors/pe/pentaho-kettle
- プロジェクト構造概要
- 主なプログラムエントリーポイント:
assemblies/client/src/assembly/assembly.xml - 圧縮関連プラグイン:
plugins/file-stream/
- Spoonグラフィカルインターフェースの起動 LinuxまたはWindows環境で以下のスクリプトを実行します。
./translator.sh # Linuxの場合
Translator.bat # Windowsの場合
核心機能:ファイル処理
Pentaho Kettleは、「変換」(Transformation)と「ジョブ」(Job)という2つの主要コンポーネントを通じてファイル圧縮を実現します。「ファイルストリームプラグイン」は基本的なファイルの読み書きを行い、それに「圧縮ステップ」を組み合わせることでさまざまな形式のファイル処理が可能です。
対応圧縮形式
- ZIP形式(一般的)
- GZIP圧縮
- BZIP2圧縮
- 分割圧縮およびパスワード保護に対応
実践例:圧縮変換フローの作成
ステップ1:新しい変換タスクを作成する
- Spoonインターフェースを開き、メニューから「ファイル > 新規 > 変換」を選択します。
- 左側の「コアオブジェクト」パネルから以下のステップをワークスペースにドラッグします。
- テキストファイル入力(ソースファイルの読み込み)
- 圧縮ファイル(主要な圧縮ステップ)
- テキストファイル出力(結果確認用)
ステップ2:圧縮パラメータの設定
「圧縮ファイル」ステップをダブルクリックし、以下の重要なパラメータを設定します。
- 圧縮タイプ: ZIP/GZIP/BZIP2を選択
- 出力ファイルパス: 圧縮ファイルの保存先を指定
- 圧縮レベル: 1~9(1が最も速く、9が最も高い圧縮率)
- サブディレクトリ含める: 再帰的にフォルダーを圧縮するかどうか
図1: Pentaho Kettleでのファイル処理フローデザイン
ステップ3: 実行と監視
- ツールバーの「実行」ボタン(緑色の三角形アイコン)をクリックします。
- 「変換実行」ダイアログで実行方法(ローカル/リモート)を選択します。
- 下部の「ログ」パネルで進行状況とステータスを確認します。
上級テクニック: 圧縮効率を最適化する5つの手法
1. 大規模ファイルの分割圧縮
4GBを超える大規模ファイルを処理する際には、分割サイズを設定します。
// コアコードスニペット
CompressionOutputStream cos = CompressionFactory.createCompressionOutputStream(
new FileOutputStream(outputFile),
CompressionType.ZIP,
6, // 圧縮レベル
1024 * 1024 * 100 // 分割サイズ(100MB)
);
2. バッチ圧縮タスクのスケジューリング
「ジョブ」機能を利用して定期的な圧縮タスクを設定します。
- 新しいジョブを作成し、「変換」ステップを追加します(既存の圧縮変換を選択)。
- 「スケジューリング」ステップを追加し、実行周期(例: 毎日午前2時)を設定します。
.kjbファイルとして保存し、Carteサーバーでバックグラウンド実行します。
3. 圧縮とデータ変換の統合
圧縮前にデータをクリーニングおよび変換します。
- 「行のフィルタリング」ステップを追加して無効なデータを除外します。
- 「計算機」ステップを使用してタイムスタンプなどのメタデータを追加します。
- 「行の並べ替え」ステップで圧縮効率を向上させます。
4. 展開とデータロードの統合パイプライン
- 「ファイルの展開」ステップを追加します。
- 「テーブル出力」ステップに直接接続してデータベースに書き込みます。
- 「エラーハンドリング」ステップで破損した圧縮ファイルをキャッチします。
5. コマンドラインからの実行
サーバー環境では、Kitchenツールを使用して圧縮ジョブを実行します。
./kitchen.sh -file=./assemblies/samples/src/main/resources/transformations/files/process_and_compress.kjb
問題解決
Q1: 圧縮後のファイルサイズがほとんど減らない?
A: 次の点を確認してください。
- ソースファイルがすでに圧縮されているか(例: JPG/PNGなどのメディアファイル)
- 圧縮レベルを7~9に調整
- 「空のディレクトリを含める」オプションが選択されているか
Q2: 実行時に「ファイル権限不足」というエラーが発生?
A: ターゲットディレクトリの権限を修正するか、次のコードを使用します。
// 参考: FileUtilクラス
FileUtil.setFilePermissions(outputFile, "rw-r--r--");
Q3: 圧縮ファイルにパスワード保護をどう設定する?
A: 「圧縮ファイル」ステップで「詳細オプション」を展開し、パスワードを設定します(ZIP形式のみサポート)。
追加リソース
- 公式ドキュメント: プロジェクトルートディレクトリ内のREADME.md
- サンプル変換:
assemblies/samples/src/main/resources/transformations/ - APIリファレンス:
engine/src/main/java/org/pentaho/di/core/compression/
これらの方法を活用することで、Pentaho Kettleの圧縮機能を最大限に活用し、データ統合プロセスにおけるストレージ使用量と転送時間を大幅に削減できます。