Pentaho Kettle(現屬 Hitachi Vantara)是純 Java 開源 ETL 工具,提供圖形化設計與程式化執行兩種模式:
// 必須最先呼叫,載入環境配置與插件
KettleEnvironment.init();
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());
}
}
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 等核心模組