此問題在1個月前或許已經接觸,單是一直木有怎么用到,就被耽擱至今;問題的解決要來源於網絡,其實我還想說問題的解決更多的是要靠我們自己的思想,不過多的言情,我們接下來直接進入主題吧!
環境:kettle-spoon 4.2.0,oracle11g,myeclipse6.5,sqlserver2008
前提:在kettle圖形界面spoon里面已經做好了一個ktr轉換模型,此時我的ktr信息如下圖:
Step1:在myeclipse創建project,導入kettle集成所需要的包
Step2:重點解析與code源碼
//定義ktr名字
private static String transName = "test1";
//初始化kettle環境
KettleEnvironment.init();
//創建資源庫對象,此時的對象還是一個空對象
KettleDatabaseRepository repository = new KettleDatabaseRepository();
//創建資源庫數據庫對象,類似我們在spoon里面創建資源庫
DatabaseMeta dataMeta =
new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");
//資源庫元對象,名稱參數,id參數,描述等可以隨便定義
KettleDatabaseRepositoryMeta kettleDatabaseMeta =
new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta);
//給資源庫賦值
repository.init(kettleDatabaseMeta);
//連接資源庫
repository.connect("admin","admin");
//根據變量查找到模型所在的目錄對象
RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj");
//創建ktr元對象
TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ;
//創建ktr
Trans trans = new Trans(transformationMeta);
//執行ktr
trans.execute(null);
//等待執行完畢
trans.waitUntilFinished();
上面的兩個步驟才可以確定是資源庫中的那個路徑下的ktr和我們用命令執行一樣的-dir ,-tran -job
附上源碼:
package kettle; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryDirectoryInterface; import org.pentaho.di.repository.kdr.KettleDatabaseRepository; import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; /** * <p>Title: java調用kettle4.2數據庫型資料庫中的轉換</p> * <p>Description: </p> * <p>Copyright: Copyright () 2012</p> */ public class ExecuteDataBaseRepTran {
private static String transName = "test1"; public static void main(String[] args) { try { //初始化kettle環境 KettleEnvironment.init(); //創建資源庫對象,此時的對象還是一個空對象 KettleDatabaseRepository repository = new KettleDatabaseRepository(); //創建資源庫數據庫對象,類似我們在spoon里面創建資源庫 DatabaseMeta dataMeta = new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password"); //資源庫元對象,名稱參數,id參數,描述等可以隨便定義 KettleDatabaseRepositoryMeta kettleDatabaseMeta = new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta); //給資源庫賦值 repository.init(kettleDatabaseMeta); //連接資源庫 repository.connect("admin","admin"); //根據變量查找到模型所在的目錄對象,此步驟很重要。 RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj"); //創建ktr元對象 TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null ) ; //創建ktr Trans trans = new Trans(transformationMeta); //執行ktr trans.execute(null); //等待執行完畢 trans.waitUntilFinished(); if(trans.getErrors()>0) { System.err.println("Transformation run Failure!"); } else { System.out.println("Transformation run successfully!"); } } catch (KettleException e) { e.printStackTrace(); } } }