使用kettle完成数据迁移

最近使用kettle做数据迁移工作:

在网上搜索找到两种方法:

1,利用kettle自带功能,向导中【多表复制向导】,选择要迁移的表后会生成一个job和n多个transformation,然后执行该job即可完成数据的迁移。该方法操作简单,选择要迁移的表也很方便,但总感觉,有点像二傻子似的。好歹能够解决一些问题

2,这个方法就牛x了,是从网上找到的一个实例,非常佩服作者值得大家学习。

a,主流程job

使用kettle完成数据迁移_第1张图片

b,获取表名称

使用kettle完成数据迁移_第2张图片

c,子job表数据抽取

使用kettle完成数据迁移_第3张图片

d,将表名称设置成公共变量


e,在目标库中建表


f,开始数据迁移

使用kettle完成数据迁移_第4张图片

里详细说一下在目标库中建表,这是创建表结构的代码

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;
	
	java.util.List list = getTrans().getRepository().readDatabases();
	
	if(list != null && !list.isEmpty())
	{
		for(int i=0;i0)
			{
				
				String sql = db.getDDL(tablename, data.inputRowMeta);//${TABLENAME}
				//data变量是在UserDefinedJavaClass这个类中的一个成员变量,在创建该类时已经赋好值		
				db.execStatement(sql.replace(";", ""));

				logBasic(sql);
			}
		}
		catch(Exception e)
		{			
			logError("创建表出现异常",e);
			
		}finally{
			db.disconnect();
		}
	}
	return false;
}
以上这段代码是在自定义java类这个组件中写的。UserDefinedJavaClass源码如下:

使用kettle完成数据迁移_第5张图片

希望该文章可以对大家有所帮助。

第二种方式实现下载地址:点击打开链接











你可能感兴趣的:(kettle)