需求:
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学习资料分享,附大神用Kettle的一套流程完成对整个数据库迁移方法”揭示了本文将深入探讨Kettle这一ETL(Extract, Transform, Load)工具在数据库迁移过程中的应用。Kettle,又称为Pentaho Data ...
在这个“Kettle的一套流程完成对整个数据库迁移”的压缩包中,包含了完成数据库迁移所需的所有步骤。数据库迁移通常涉及从一个数据库系统迁移到另一个系统,确保数据的完整性和一致性。 首先,理解Kettle的工作原理...
Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...
### Kettle 数据迁移工具使用详解 #### 一、Kettle 概述 Kettle 是一款功能强大的开源 ETL(Extract, Transform, Load)工具,它采用纯 Java 编写,支持在 Windows、Linux 和 Unix 等多种操作系统上运行。Kettle ...
在"Kettle批量数据库操作流程脚本.rar"这个压缩包中,我们可以找到一套实现从多个数据库抽取数据并合并到单一目标数据库的脚本。这个资源对于需要进行大数据集成或者复杂数据迁移的项目非常有用。 1. **ETL过程**:...
关于“标签”,“kettle”指代的是Kettle工具本身,它提供了一套图形化的工作流设计界面,让用户无需编写代码就能完成复杂的数据处理任务。“循环”在这里意味着Kettle作业会遍历数据库中的每一个表,逐个进行数据...
总的来说,"kettle_lib.rar"提供了一套全面的数据库连接支持,使得Kettle能够无缝对接多种类型的数据库系统,这对于需要处理多源数据的项目来说是非常宝贵的资源。用户只需要根据自己的需求选择相应的JAR文件,即可...
1. **数据抽取**:Kettle支持从各种数据源(如关系型数据库、文本文件、Excel表格、XML、Web服务等)中提取数据,使得数据迁移和整合变得简单易行。 2. **数据转换**:在Kettle中,用户可以通过拖拽和配置组件来...
在IT行业中,数据库迁移是一项常见的任务,特别是在Java开发中,我们经常需要将数据从一个数据库迁移到另一个数据库,比如从测试环境迁移到生产环境。这个过程不仅涉及数据的复制,还包括了数据库结构(如表、索引等...
- **元数据驱动**:Kettle使用元数据驱动设计,使得ETL流程更加灵活和可重用。 - **工作流管理**:通过作业和转换的组合,可以构建复杂的工作流,支持条件分支、循环、错误处理等控制结构。 - **性能优化**:...
《Kettle Spoon 4.1.0 操作手册》提供了全面的指南,帮助用户了解和掌握Pentaho Data Integration(通常称为Kettle或Spoon)的使用,这是一款强大的ETL(提取、转换、加载)工具。ETL是数据处理的关键部分,用于从不...
这个版本的SDK包含了Kettle 7.1所需的全部开发类库,使得开发人员能够构建自定义的数据处理解决方案,进行数据清洗、转换和迁移。 Kettle,又称为Pentaho Data Integration(PDI),是由社区驱动的,具有强大的图形...
Kettle的常见用途非常广泛,如实现不同数据库之间的数据迁移,处理大数据集,进行复杂的数据清洗,以及支持Hadoop环境下的数据处理。它的特性包括跨平台性(Java编写,可在Windows、Linux、Unix上运行)、高数据处理...
5. **"pentaho kettle solutions.pdf"**:这可能是关于如何使用Kettle解决实际问题的指南或教程。通常,这类文档会包含详细的步骤、最佳实践以及常见问题解答,帮助初学者快速上手,并为有经验的用户提供深入的技术...
运行此转换,即可完成数据迁移。 此外,Kettle还支持Job的创建,用于协调多个Transformation的执行。例如,可以在Job中调用前面创建的Transformation,并通过“START”和“Transformation”元素定义执行顺序。保存...
Kettle 中有两种脚本文件,transformation 和 job,transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。 4. Eclipse SQLExplorer Eclipse SQLExplorer 是 Eclipse 集成开发环境的一种插件,它...