需求:
1、从A数据库(源库)迁移多表数据到B数据库(目的库)。
2、修改数据库表名,A数据库(源库)的表名格式是xx.xxx,B数据库(目的库)的表名格式改为xx_xxx。
创建目标端数据库表结构步骤:
一、定义DB链接,并设置共享;
二、准备要迁移的A数据库(源库)表清单文件(filelist.txt),第一行是文本头部
三、读取A数据库(源库)表清单文件转换(第一个转换)
三、设置变量${TABLENAME}(用于存放A数据库的表名),设置变量${TABLENAME_1}(用于存放B数据库表名)(第二个转换)
四、根据源表结构创建目标表结构转换(第三个转换)
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException{
// First, get a row from the default input hop
//
Object[] r = getRow();
//本地连接
logBasic("开始");
org.pentaho.di.core.database.DatabaseMeta dbmeta = getTransMeta().findDatabase("B数据库的DB链接");
if(dbmeta!=null)
{
org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);
try
{
db.connect();
logBasic("链接数据库");
String tablename = getVariable("TABLENAME_1"); //目标表名由xx.xxx改为xx_xxx
logBasic("开始创建表:" + tablename);
if(tablename!=null && tablename.trim().length()>0)
{
String sql = db.getDDLCreationTable(tablename, data.inputRowMeta);
db.execStatement(sql.replace(";", ""));
logBasic(sql);
}
}
catch(Exception e)
{
logError("创建表出现异常",e);
}finally{
db.disconnect();
}
}
return false;
}
注:如果源端数据库表为空(无记录),则无法读取其表结构,不能创建目标表。
五、创建目标表结构作业(第一个作业)
六、批量创建目标表结构作业(第二个作业)
七、执行“批量创建目标表结构作业”可在目标数据库中创建文件清单(filelist.txt)里的数据库表结构。
从源端抽取数据到目标端步骤:
八、数据迁移转换(第四个转换)
可以在SQL语句中筛选数据范围。
九、数据迁移作业(第三个作业)
十、批量数据迁移作业(第四个作业)
十一、执行“批量数据迁移作业”,将数据从源端抽取迁移到目标端。