kettle完成一个数据库到另一个数据的整体迁移

 

问题:在做不同数据库的迁移时候,单个的表还很好操作如果是多个数据库的表呢。如果是一个个的去创建那简直太麻烦了。

解决办法: 读取数据库中表->创建表->表数据抽取

整个抽取过程包括一个job和两个trans,先来看看整个job吧:


  

1、首先是数据库的表名抽取trans:作用是读取数据库的表名并以此记录。

1.1配置表输入。可以查看到mysql的所有的表名已经获取。

mysql : show  tables    oracle : select table_name from user_tables
1.2配置 字段选择,把获取的字段修改成为制定的字段tablename。

1.3 复制记录到结果,直接连接就行。

 

2表名称传给变量

2.1从结果获取记录

2.2设置环境变量

 

3、 获取对应的表结构

3.1其中表输入

3.2java 代码如下

 

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();//3.x中获取资源库的所有数据库连接信息用getDatabases();  
      
    if(list != null && !list.isEmpty())  
    {  
        for(int i=0;i<list.size();i++)  
        {  
            dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i);  
                        //下面是目标库的数据库连接,大家可根据需要修改  
            if("mysqldb".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}  
                              
                db.execStatement(sql.replace(";", ""));  
  
                logBasic(sql);  
            }  
        }  
        catch(Exception e)  
        {             
            logError("创建表出现异常",e);  
              
        }finally{  
            db.disconnect();  
        }  
    }  
    return false;  
}  

 4.表数据抽取

 

4.1表输入

4.2表输出,这里不需要制定数据库字段。

然后运行查看。得到对应的表和数据。

 

 
 参考: https://blog.csdn.net/weixin_30699955/article/details/95998510

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蜜蜂love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值