使用kettle做數據抽取的時候可以使用圖形化的工具配置日志保存參數,選擇數據庫連接,輸入日志表名稱,
點擊sql 執行對應的sql創建日志表即可。

點擊保存之后,日志配置會保存在trans或者job的配置文件中。這樣當使用api調取trans或者job配置文件進行數據抽取的時候就會自動把轉換日志存儲到配置的數據表中。
然而在實際應用中這意味着工作量增大。所以我們的想法是創建固定的表,在執行轉換的過程中自動配置日志保存路徑。
這里以trans為例,job類似。
代碼:
初始化DatabaseMate:
private String name; private String type; private String access; private String hostname; private String DBName; private String DBPort; private String username; private String password; private String servername; DatabaseMeta databaseMeta = new DatabaseMeta(name, type, access, hostname, DBName, DBPort, username, password);
初始化Trans
TransMeta transMeta = new TransMeta("L:\\ETL\\ceshi\\1.ktr"); Trans trans = new Trans(transMeta);
給Trans添加數據源
--添加到元數據上
transMeta.addDatabase(etlLogDatabaseMeta);
設置channellogtable
VariableSpace space = new Variables(); //將step日志數據庫配置名加入到變量集中 space.setVariable("kettle_log","logdb"); space.initializeVariablesFrom(null); ChannelLogTable channelLogTable = ChannelLogTable.getDefault(space, transMeta); channelLogTable.setConnectionName("logdb"); channelLogTable.setTableName("log_trans_channel"); transMeta.setChannelLogTable(channelLogTable);
執行trans
trans.execute(null); // You can pass arguments instead of null. trans.waitUntilFinished(); if (trans.getErrors() > 0) { throw new RuntimeException( "There were errors during transformation execution."); }

這樣就可以保存到指定表中了。
當然做這些事情之前要
KettleEnvironment.init();
