首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Pentaho Kettle 整合開發指南:Transformation 與 Job 程式化執行

     編輯:DB2 教學

Kettle 核心概念

Pentaho Kettle(現屬 Hitachi Vantara)是純 Java 開源 ETL 工具,提供圖形化設計與程式化執行兩種模式:

  • Transformation (.ktr):資料流轉換,行級並行處理
  • Job (.kjb):工作流編排,步驟順序執行,支援條件判斷、檔案操作、郵件通知等

Java API 整合實作

共同初始化步驟

// 必須最先呼叫,載入環境配置與插件
KettleEnvironment.init();

執行 Transformation(檔案模式)

String filename = "/foo/bar/trans.ktr";

// 解析轉換元資料
TransMeta transMeta = new TransMeta(filename);

// 建立執行實例
Trans trans = new Trans(transMeta);

// 非同步執行(獨立執行緒),null 可替換為參數集
trans.execute(null);

// 等待完成
trans.waitUntilFinished();

// 取得執行結果
Result result = trans.getResult();
if (result.getNrErrors() > 0) {
    // 處理錯誤
    for (LogChannelInterface log : result.getLogs()) {
        System.err.println(log.getMessage());
    }
}

執行 Job(檔案模式)

String filename = "/foo/bar/job.kjb";

// 解析 Job 元資料(不使用資源庫)
JobMeta jobMeta = new JobMeta(filename, null, null);

// 建立執行實例
Job job = new Job(null, jobMeta);

// 非同步啟動
job.start();

// 等待完成
job.waitUntilFinished();

// 取得結果
Result result = job.getResult();

基於資源庫模式執行

// 初始化插件註冊表
PluginRegistry.init();

// 載入資源庫配置
RepositoriesMeta repositoriesMeta = new RepositoriesMeta();
repositoriesMeta.readData();

// 依名稱查找資源庫
RepositoryMeta repositoryMeta = repositoriesMeta.findRepository("1.0");

// 實例化資源庫
PluginRegistry registry = PluginRegistry.getInstance();
Repository repository = registry.loadClass(RepositoryPluginType.class, repositoryMeta, Repository.class);
repository.init(repositoryMeta);

// 載入資源庫目錄樹
RepositoryDirectoryInterface directory = repository.loadRepositoryDirectoryTree();

// 從資源庫載入 Job
JobMeta jobMeta = repository.loadJob("job2", directory, null, null);

// 執行
Job job = new Job(repository, jobMeta);
job.start();
job.waitUntilFinished();
Result result = job.getResult();

日誌整合與結果擷取

檔案日誌監聽器

// 建立檔案日誌監聽器,true = 附加模式
FileLoggingEventListener fileLoggingEventListener = 
    new FileLoggingEventListener("tran.log", true);

擷取執行結果檔案並記錄

Map<String, ResultFile> resultFiles = result.getResultFiles();
LogChannelInterface log = new LogChannel("執行結果");

for (String key : resultFiles.keySet()) {
    ResultFile rf = resultFiles.get(key);
    log.logBasic(rf.getFile().getName());
}

關鍵類別與介面速查

類別/介面用途
KettleEnvironment環境初始化,單例模式
TransMeta / JobMeta元資料模型(XML 解析結果)
Trans / Job執行實例,執行緒安全
Result執行結果:狀態、日誌、輸出檔案、計數器
Repository資源庫抽象介面(檔案/資料庫)
LogChannelInterface日誌通道統一介面

部署注意事項

  • 專案需依賴 kettle-engine、kettle-core 等核心模組
  • 執行環境需相容 JVM 版本(Kettle 9.x 需 Java 11+)
  • 資料庫連線池建議由應用層管理,避免 Kettle 內部建立過多連線
  • 大量資料轉換時調整 JVM 堆記憶體(-Xmx)與 GC 策略
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved