Kettle實現數據庫遷移java
整套流程分爲:2個job,4個trans。使用到的Trans插件:表輸入、字段選擇、複製記錄到結果、從結果獲取記錄、設置變量、java腳本、表輸出。mysql
一、表數據抽取做業:
sql
做用:首先獲取數據庫中全部的表名稱 而後調用子Job進行表的建立、數據抽取
數據庫
2.表名稱獲取流程 ide
三、子做業: 實現單個表格的建立及抽取函數
四、表名稱變量設置
spa
上一步的子轉換 插件
五、入庫表結構建立 設計
執行的Java代碼以下public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { // First, get a row from the default input hop Object[] r = getRow(); org.pentaho.di.core.database.DatabaseMeta dbmeta = null; System.out.println(123); System.out.println( getTrans().getRepository()); System.out.println(456); java.util.List list = getTrans().getRepository().readDatabases(); if(list != null && !list.isEmpty()) { for(int i=0;i<list.size();i++) { dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i); //test1 爲數據庫名稱 if("test1".equalsIgnoreCase(dbmeta.getName())) { break; } } } if(dbmeta!=null) { org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta); try { db.connect(); String tablename = getVariable("TABLENAME"); logBasic("開始建立表:" + tablename); if(tablename!=null && tablename.trim().length()>0) { String sql = db.getDDLCreationTable(tablename, data.inputRowMeta);//${TABLENAME} db.execStatement(sql.replace(";", "")); logBasic(sql); } } catch(Exception e) { logError("建立表出現異常",e); }finally{ db.disconnect(); } } return false; }