kettle 通用的数据库迁移流程
需求:
1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle。
2.你是否还在使用kettle重复的画着:表输入-表输出、创建表,而烦恼。
下面为你实现了一套通用的数据库迁移流程。
技术引导:
实现之初,在kettle提供的例子中找到了一个类似的(samples\jobs\process all tables)。
通过相关改造,终于达到目标。
实现过程解剖:
整套流程分为:2个job,4个trans。
使用到的Trans插件:表输入、字段选择、复制记录到结果、从结果获取记录、设置变量、自定义java脚本、表输出。
1.大job。
2.要迁移的源库表名称获取,并设置到结果集,为下面的job使用。
3.配置子job为前面的每一条记录(即每个表)执行一次该子job
4.下面是子job。
5.获取记录中的表名称,并设置为到变量。
6.读取当前表的结果信息,并在目标库中创建表(这个是难点)。
因为只需要获取抓取要抽取表的结构信息,故在sql后面加上 where 1=2。
下面代码是创建目标库表。
- 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("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}
- db.execStatement(sql.replace(";", ""));
- logBasic(sql);
- }
- }
- catch(Exception e)
- {
- logError("创建表出现异常",e);
- }finally{
- db.disconnect();
- }
- }
- return false;
- }
7.表数据迁移。
8.差不多就行了,本人使用mysql到mysql、oracle的测试是没有问题的不过在测试过程中,发现源表若存在有blob的表,会有问题,可能是由于表输出没有指定字段的原因,具体解决办法,也没有去多想,以后有时间在完善把。
上面的整套流程的是在kettle4.3下完成的,附件里面可下载完整流程。
5.x运行到创建表结构步骤报错,原因data.inputRowMeta为空,因为在第6步
在sql后面加上 where 1=2,导致表输入步骤没有抽取到记录,5.x里结构也变成了null。
解决:
把where 1=2去掉,然后,在表输入的限制行设置为1,即可,本人亲测。
kettle 通用的数据库迁移流程的更多相关文章
- Esxi5-管理平台vcenter5.0_数据库迁移流程
migrating-vcenter-database-express-to-sql-2008-r2 一. 准备环境. ESXi5.0主机 IP:192.168.1.158 ...
- 用Kettle的一套流程完成对整个数据库迁移 费元星
原地址 :http://ainidehsj.iteye.com/blog/1735434 需求: 1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle. 2.你是否还在使用kett ...
- Kettle实现数据库迁移
Kettle实现数据库迁移 需求: 做数据仓库时,需要将业务系统CRM抽取到数据仓库的缓冲层,业务系统使用的是SqlServer数据库,数据仓库的缓冲层使用的是mysql数据库,为实现数据库的迁移,即 ...
- kettle实现数据库迁移----多表复制向导
kettle实现数据库迁移----多表复制向导 需求: 做数据仓库时,需要将业务系统CRM抽取到数据仓库的缓冲层,业务系统使用的是SqlServer数据库,数据仓库的缓冲层使用的是mysql数据库,为 ...
- Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具
Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具 1 kettle --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议. ...
- Code First开发系列之数据库迁移
返回<8天掌握EF的Code First开发>总目录 本篇目录 开启并运行迁移 使用迁移API 应用迁移 给已存在的数据库添加迁移 EF的其他功能 本章小结 自我测试 本系列的源码本人已托 ...
- 【项目经验】navicat工具 SQLServer数据库迁移MySQL
新近领了一个任务,就是把SQL Server的数据库迁移到My Sql上,经过查资料,圆满完成任务.分享一下流程. 1.首先,在自己的My Sql数据库上新建一个数据库. 2.打开新建的My Sql数 ...
- 服务器数据库搭建流程(CentOs+mysql)
前言: 服务器上数据库搭建需要知道Linux系统的版本,以前的Ubuntu14.04直接在终端下输入apt-get install (package)便可方便的下载并安装mysql,但是在centOs ...
- 微软虐我千百遍——记一次比较漫长的TFS数据库迁移
起因 七月三日早晨刚到公司,同事就跟我讲TFS开始返回 TF30042错误,报告数据库已满.按照处理问题的第一直觉,我上bing的英文网站搜了一下,发现是部署TFS的时候使用的SQL Express限 ...
随机推荐
- Django组件-分页器
Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...
- NB-IoT不一定最完美 但足以成为决定ofo与摩拜物联网胜负的关键【转】
转自:http://news.rfidworld.com.cn/2017_11/3d5ed5c5d8cb9949.html 2018年到来之前,如果还不懂物联网,你会被淘汰. 今年1月,工信部< ...
- linux 解决Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
第一种: sudo vim /etc/resolv.conf 添加nameserver 8.8.8.8 第二种: /etc/apt/sources.list 的内容换成 deb http://old- ...
- mysql只删除表不删除库
1.备份数据库mysqldump -uroot -P13306 -h10.1.50.14 -p 库名 > /opt/20190109.sql2.删除所有表mysql -uroot -P13306 ...
- MUI初学1
1.1)官网: http://www.dcloud.io/ 2)案例: http://www.dcloud.io/case/#group-1 3)文档:http://dev.dcloud.net.cn ...
- notepad++最详情汇总
1.安装nodepad++ 2.sitting-转换中文语言 3.view-设置自动换行 4.安装格式化插件----https://github.com/bruderstein/nppPluginMa ...
- 为什么用Flow
Flow 是 facebook 出品的 JavaScript 静态类型检查工具.Vue.js 的源码利用了 Flow 做了静态类型检查,所以了解 Flow 有助于我们阅读源码. flow的工作方式? ...
- pyspider和pyquery总结
1.参考 pyspider作者官网: pyspider 爬虫教程(一):HTML 和 CSS 选择器 pyspider 爬虫教程(二):AJAX 和 HTTP pyspider 爬虫教程(三):使用 ...
- Zookeeper集群搭建步骤及相关知识点深入了解
1.zookeeper概念 zookeeper是一个分布式协调服务:a:zookeeper是为别的分布式程序服务的 b:zookeeper本身就是一个分布式程序(只要半数以上节点存活,zookeepe ...
- Codeforces 1109E. Sasha and a Very Easy Test 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109E.html 题意 给定一个长度为 n 的数列 a,以及一个模数 M(不一定是质数). 要求支持 q ...