java調用kettle數據庫類型資源庫中的ktr


此問題在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(); } } }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM