使用kettle完成数据迁移

本文介绍了使用Kettle进行数据迁移的两种方法。一种是利用Kettle自带的多表复制向导,另一种是通过自定义Java类的方式实现。后者更为灵活,能够通过代码控制在目标数据库中创建表结构并进行数据迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

a,主流程job


b,获取表名称

c,子job表数据抽取


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


e,在目标库中建表


f,开始数据迁移


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

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;i<list.size();i++)
		{
			dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i);
			if("mysql_test".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.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源码如下:

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

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











评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值