Kettle实现数据库迁移

需求:

做数据仓库时,需要将业务系统CRM抽取到数据仓库的缓冲层,业务系统使用的是SqlServer数据库,数据仓库的缓冲层使用的是mysql数据库,为实现数据库的迁移,即将SqlServer数据库中的所有表与数据迁移到Mysql。

解决办法:
kettle设计一整套流程实现,读取数据库中表->创建表->表数据抽取

实现过程:

整套流程分为:2个job,4个trans。使用到的Trans插件:表输入、字段选择、复制记录到结果、从结果获取记录、设置变量、java脚本、表输出。

1、表数据抽取作业:

作用:首先获取数据库中所有的表名称 然后调用子Job进行表的创建、数据抽取

2.表名称获取流程 


要迁移的源库表名称获取,并设置到结果集,为下面的job使用。其中的表输入使用的是show tables,复制数据库中所有的表,也可以从表中或者excel中输入,实现更加小粒度的控制。

show tables 结果为Tables_in_数据库名称,和具体数据库有关,故需要改名

3、子作业: 实现单个表格的创建及抽取

4、表名称变量设置

上一步的子转换

5、入库表结构创建  

执行的Java代码如下

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;
System.out.println(123);
System.out.println( getTrans().getRepository());
System.out.println(456);
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);
//test1 为数据库名称
if("test1".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.getDDLCreationTable(tablename, data.inputRowMeta);//${TABLENAME} db.execStatement(sql.replace(";", "")); logBasic(sql);
}
}
catch(Exception e)
{
logError("创建表出现异常",e); }finally{
db.disconnect();
}
}
return false;
}

6、表数据抽取流程

引用原文:

1、源表若存在有blob的表,会有问题,可能是由于表输出没有指定字段的原因
2、以上的操作使用的是仓库,kettle repo会报错
3、将原文中String sql = db.getDDL(tablename, data.inputRowMeta);函数名 getDDL 改为 getDDLCreationTable
4、去除了原文中创建表之前表输入一个操作,原文当有空表需要复制时候,会报错

参考:

原文地址:  用Kettle的一套流程完成对整个数据库迁移

data-integration\samples\jobs\process all tables   实现整个数据库的迁移,

代码下载

http://pan.baidu.com/s/1nt7LOj3

Kettle实现数据库迁移的更多相关文章

  1. kettle实现数据库迁移----多表复制向导

    kettle实现数据库迁移----多表复制向导 需求: 做数据仓库时,需要将业务系统CRM抽取到数据仓库的缓冲层,业务系统使用的是SqlServer数据库,数据仓库的缓冲层使用的是mysql数据库,为 ...

  2. 用kettle实现数据库迁移之oracle到mysql

    项目完成后,需要把历史oracle 的数据库转移mysql 用kettle 转换数据. 步骤: 1.打开spoon.bat,文件-->新建-->转换,点击“主对象树”,DB连接右键“新建” ...

  3. kettle 通用的数据库迁移流程

    需求: 1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle. 2.你是否还在使用kettle重复的画着:表输入-表输出.创建表,而烦恼. 下面为你实现了一套通用的数据库迁移流程. ...

  4. 用Kettle的一套流程完成对整个数据库迁移 费元星

    原地址 :http://ainidehsj.iteye.com/blog/1735434 需求: 1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle. 2.你是否还在使用kett ...

  5. Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具

    Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具 1 kettle --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议. ...

  6. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  7. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  8. laravel数据库迁移(三)

    laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ...

  9. Code First开发系列之数据库迁移

    返回<8天掌握EF的Code First开发>总目录 本篇目录 开启并运行迁移 使用迁移API 应用迁移 给已存在的数据库添加迁移 EF的其他功能 本章小结 自我测试 本系列的源码本人已托 ...

随机推荐

  1. CImg、libjpeg--介绍、配置(操作JPEG)

    关于处理图片,之前写了两篇博客关于ImageMagick的: <ImageMagick–介绍> <ImageMagick–VS2015环境配置.开发(registrykeylooku ...

  2. 描述ARP协议的工作原理,怎么实施ARP攻击和防御ARP攻击

    什么是ARP协议?ARP,即地址解析协议,实现通过IP地址得知其物理地址.在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址.为了让报文在 ...

  3. 【转】从QDataStream向QByteArray中写入数据时的注意点(QT)

    最近发现从QDataStream向QByteArray中写入数据常常是写不进去的,通过查看QT的源码: QDataStream &operator>>(QDataStream &a ...

  4. go语言之进阶篇接口的定义和实现以及接口的继承

    1.接口的定义和实现以及接口的继承 示例: package main import "fmt" //定义接口类型 type Humaner interface { //方法,只有声 ...

  5. JS 父页面调子页面(2种情况),子掉父级(1种)(转)

    A :父级调用子级页面 ,非IFRAME情况,类似平级: window.open("子页面.html", "", "width=1024,height ...

  6. CSS-下拉导航条

    Web网站中很多时候都会出现下拉导航条,有的是通过CSS实现,有的通过JavaScript插件实现,其实CSS实现起来比较简单,先来看一个简版的下拉菜单: Html代码通过ul列表实现: <ul ...

  7. JAVA中如何将一个json形式的字符串转为json对象或对象列表

    import java.util.*; import java.text.SimpleDateFormat; import org.json.JSONObject; import org.json.J ...

  8. Swift语言从天而降,是否能掀起新一轮的科技革命?

    Swift语言从天而降,是否能掀起新一轮的科技革命? Swift语言诞生到如今,才短短一个月多,Swift居然挤进TIOBE排行榜的第16位,相信这发展的速度绝不是不论什么一个语言可与之相提并论,那S ...

  9. 【站长起步】阿里云+Ubuntu+java 7+ Tomcat 7 +Nginx1.6 +Mysql 5.6

    本文记载了在阿里云ubuntu+java 镜像环境下搭建站点server环境中遇到的的错误和解决方式. 作为一个年轻人,是肯定不会去用alidata这个现成的环境的.怎么办? 所有删除.立刻创建一个 ...

  10. 定时删除日志文件---linux定时清理日志

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...