• 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表输出,这里不需要制定数据库字段。

     

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

     
    ————————————————
    版权声明:本文为CSDN博主「小蜜蜂love」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_24388807/article/details/103044645

  • 相关阅读:
    Memcache 内存分配策略和性能(使用)状态检查
    C# 中字符串转换成日期
    Task及Mvc的异步控制器 使用探索
    MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
    vue-router 快速入门
    Vue.js——60分钟快速入门
    五小步让VS Code支持AngularJS智能提示
    AngularJS----服务,表单,模块
  • 原文地址:https://www.cnblogs.com/purple5252/p/14636461.html
Copyright © 2020-2023  润新知