文档章节

Kettle实现数据库迁移

小强斋太
 小强斋太
发布于 2016/11/09 20:05
字数 643
阅读 25
收藏 0
点赞 0
评论 0

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


本文转载自:http://www.cnblogs.com/xqzt/p/5637032.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
数据迁移,急用,请高手指教

通过kettle实现数据库的迁移后,能否使用kettle检查迁移后的数据与源数据库的数据内容相同?

robert.feng
2011/12/12
747
4
Kettle实现数据库迁移

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

Zero零_度
2016/11/16
40
0
用Kettle的一套流程完成对整个数据库迁移

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

如月王子
2014/09/17
0
5
数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

一、什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对...

十月阳光
2015/11/04
0
2
求助kettle数据迁移的时候,怎么动态的在目标数据库中建新表

例如,源数据库有表T,现在需要通过KETTLE迁移到目标数据库中,按照每天保存一张表,如T20141204,T20141205这样,请问在KETTLE中怎么去动态的根据日期建一个新表呢...

小东仔
2014/12/04
789
0
数据迁移工具。。。

最近在做数据迁移的项目 从mysql,oracle迁移到XX数据库(xx是某开源数据库) 看了几个数据迁移的项目 Kettle 感觉太庞大了 jpumpdx 感觉还行,不过设计的东西还是满复杂的 MySQL Migration 正在...

hymn
2009/09/10
2.4K
6
Win7下Kettle-7.0安装部署

1、Kettle概念 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种...

zisheng_wang_data
2017/03/10
0
0
使用Kettle导入Excel数据

使用Kettle导入Excel数据 曾静的技术博客2017-08-2022 阅读 导入数据kettleExcel ETL(Extraction, Transformation, and Loading),在日常的工作中我们经常会遇到各种数据的处理,转换,迁移...

曾静的技术博客
2017/08/20
0
0
开源 ETL 工具 - Kettle

Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转...

匿名
2009/09/10
213K
10
ETL利器Kettle实战应用解析系列一【Kettle使用介绍】

一、ETL利器Kettle实战应用解析系列一【Kettle使用介绍】 二、ETL利器Kettle实战应用解析系列二 【应用场景和实战DEMO下载】 三、ETL利器Kettle实战应用解析系列三 【ETL后台进程执行配置方式...

李丁玲
2016/03/04
133
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
2
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
158
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部