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; }