博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kettle实现数据库迁移
阅读量:7297 次
发布时间:2019-06-30

本文共 1570 字,大约阅读时间需要 5 分钟。

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
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、去除了原文中创建表之前表输入一个操作,原文当有空表需要复制时候,会报错

参考:

原文地址:  

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

代码下载

 

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

你可能感兴趣的文章
C#获取获取北京时间多种方法
查看>>
动态语言的灵活性是把双刃剑 -- 以 Python 语言为例
查看>>
1. 字节序的转换
查看>>
ubuntu14.04LTS下ECLIPSE+JAVA搭建
查看>>
学习RxJS: 导入
查看>>
PowerDesigner大小写转换
查看>>
纯 CSS 利用 label + input 实现选项卡
查看>>
Ubuntu 上安装R
查看>>
How .Net code can call unmanaged code?
查看>>
Archlinux安装配置以及遇到的问题
查看>>
怎么写出好代码——坏味道
查看>>
Java将CST的时间字符串转换成需要的日期格式字符串
查看>>
cisco 查看接口进出流量
查看>>
Dhcp+nfs+tftp+ks 完全无人值守安装linux操作系统
查看>>
TemplateDirectiveModel接口execute方法参数说明
查看>>
Js删除数组重复元素的多种方法
查看>>
att与intel风格对照实例
查看>>
backpack
查看>>
【转+分析】JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?
查看>>
df 发现满盘
查看>>