使用Kettle同步数据
2015-12-23 15:58
525 查看
同步数据常见的应用场景包括以下4个种类型:
Ø 只增加、无更新、无删除
Ø 只更新、无增加、无删除
Ø 增加+更新、无删除
Ø 增加+更新+删除
只增加、无更新、无删除
对于这种只增加数据的情况,可细分为以下2种类型:
1) 基表存在更新字段。
通过获取目标表上最大的更新时间或最大ID,在“表输入”步骤中加入条件限制只读取新增的数据。
这里要注意的是,获取最大更新时间或最大ID时,如果目标表还没有数据,最大值会获取不了。其中的一个解决方法是在“获取最大ID”步骤的SQL中,加入最小日期或ID的联合查询即可,如:
SELECT MAX(ID) FROM
(SELECT MAX(ID) AS ID FROM T1 UNION ALL SELECT 0 AS ID FROM DUAL)
2) 基表不存在更新字段。
通过“插入/更新”步骤进行插入。
插入/更新步骤选项:
只更新、无增加、无删除
通过“更新”步骤进行更新。
更新选项:
只更新、无增加、无删除
通过“更新”步骤进行更新。
更新选项:
增加+更新+删除
这种数据同步情况,可细分为以下2种情况:
1) 源库有表保存删除、更新和新增的信息。
通过条件判断,分别进行“插入/更新”和“删除”即可,如下图所示。
2) 源库没有保存增删改信息
Kettle提供了一种对比增量更新的机制处理这种情况,可通过“合并记录”步骤实现,该步骤的输入是新旧两个数据源,通过关键字进行数据值比对,对比结果分为以下4种类型:
“Identical” : 关键字在新旧数据源中都存在,域值相同
“changed” : 关键字在新旧数据源中都存在,但域值不同
“new” : 旧数据源中没有找到关键字
“deleted”: 新数据源中没有找到关键字
两个数据源的数据都进入下一步骤,上述4种结果类型作为输出表的标志字段进行保存。
以下为示例:
Ø 源数据库测试脚本
create table k1 (f1 varchar2(200),f2varchar2(200))
truncate table k1;
insert into k1(f1,f2) values('1','11');
insert into k1(f1,f2) values('2','22');
insert into k1(f1,f2) values('5','5');
commit;
Ø 目标数据库测试脚本
create table k1 (f1 varchar2(200),f2varchar2(200))
truncate table k1;
insert into k1(f1,f2) values('1','1');
insert into k1(f1,f2) values('2','2');
insert into k1(f1,f2) values('3','3');
insert into k1(f1,f2) values('4','4');
commit;
合并过程如下:
其中“合并记录”步骤的选项:
执行后,查询K1_TEST结果如下:
可以看到,该结果表的BZ字段保存了更新、删除、新增的记录信息,通过条件分支即可分别对这些记录进行相应的处理。
“条件”选项:
Kettle提供了可视化的设计工具,基本上可通过拖拉配置的方式实现以上4种类型的数据同步,操作上相对较为简单。
数据同步的性能与源数据库、目标数据库以及执行Kettle转换操作的主机相关,在笔者的测试环境上(源数据库和目标数据库部署在双核CPU/4G内存的PC机上、执行Kettle转换操作的主机配置为双核CPUx2/4G内存,JVM内存堆栈为256M)、最后一种类型的数据同步,15w的数据,在3分钟内可以完成。
Ø 只增加、无更新、无删除
Ø 只更新、无增加、无删除
Ø 增加+更新、无删除
Ø 增加+更新+删除
只增加、无更新、无删除
对于这种只增加数据的情况,可细分为以下2种类型:
1) 基表存在更新字段。
通过获取目标表上最大的更新时间或最大ID,在“表输入”步骤中加入条件限制只读取新增的数据。
这里要注意的是,获取最大更新时间或最大ID时,如果目标表还没有数据,最大值会获取不了。其中的一个解决方法是在“获取最大ID”步骤的SQL中,加入最小日期或ID的联合查询即可,如:
SELECT MAX(ID) FROM
(SELECT MAX(ID) AS ID FROM T1 UNION ALL SELECT 0 AS ID FROM DUAL)
2) 基表不存在更新字段。
通过“插入/更新”步骤进行插入。
插入/更新步骤选项:
只更新、无增加、无删除
通过“更新”步骤进行更新。
更新选项:
只更新、无增加、无删除
通过“更新”步骤进行更新。
更新选项:
增加+更新+删除
这种数据同步情况,可细分为以下2种情况:
1) 源库有表保存删除、更新和新增的信息。
通过条件判断,分别进行“插入/更新”和“删除”即可,如下图所示。
2) 源库没有保存增删改信息
Kettle提供了一种对比增量更新的机制处理这种情况,可通过“合并记录”步骤实现,该步骤的输入是新旧两个数据源,通过关键字进行数据值比对,对比结果分为以下4种类型:
“Identical” : 关键字在新旧数据源中都存在,域值相同
“changed” : 关键字在新旧数据源中都存在,但域值不同
“new” : 旧数据源中没有找到关键字
“deleted”: 新数据源中没有找到关键字
两个数据源的数据都进入下一步骤,上述4种结果类型作为输出表的标志字段进行保存。
以下为示例:
Ø 源数据库测试脚本
create table k1 (f1 varchar2(200),f2varchar2(200))
truncate table k1;
insert into k1(f1,f2) values('1','11');
insert into k1(f1,f2) values('2','22');
insert into k1(f1,f2) values('5','5');
commit;
Ø 目标数据库测试脚本
create table k1 (f1 varchar2(200),f2varchar2(200))
truncate table k1;
insert into k1(f1,f2) values('1','1');
insert into k1(f1,f2) values('2','2');
insert into k1(f1,f2) values('3','3');
insert into k1(f1,f2) values('4','4');
commit;
合并过程如下:
其中“合并记录”步骤的选项:
执行后,查询K1_TEST结果如下:
可以看到,该结果表的BZ字段保存了更新、删除、新增的记录信息,通过条件分支即可分别对这些记录进行相应的处理。
“条件”选项:
Kettle提供了可视化的设计工具,基本上可通过拖拉配置的方式实现以上4种类型的数据同步,操作上相对较为简单。
数据同步的性能与源数据库、目标数据库以及执行Kettle转换操作的主机相关,在笔者的测试环境上(源数据库和目标数据库部署在双核CPU/4G内存的PC机上、执行Kettle转换操作的主机配置为双核CPUx2/4G内存,JVM内存堆栈为256M)、最后一种类型的数据同步,15w的数据,在3分钟内可以完成。
相关文章推荐
- SQLServer2005与SQLServer2008数据库同步图文教程
- 深入SqlServer2008 数据库同步的两种方式(Sql JOB)的分析介绍
- sqlserver 2000数据库同步 同步两个SQLServer数据库的内容
- SqlServer2008 数据库同步的两种方式(发布、订阅使用方法)
- kettle中使用js调用java类的方法
- xms/xmx/xss在kette中的调优设置
- kettle中对hive操作时需要知道的东西
- GoldenGate 配置文档(一)
- GoldenGate 配置文档(二)
- 数据库同步产品PAC优势总结
- 数据库同步热备解决方案(北京某管理学院)
- 数据库同步过程中一致性和完整性的保证
- 如何支持数据库双向同步
- Kettle-Spoon使用文档
- kettle启动“Error: could not create the Java Virtual Machine”
- kettle 5.01 连接数据源
- kettle运行时报错 could not create java virtual machine
- 开源ETL工具--Kettle的简易使用实例
- kettle转换中使用javascript例子整理(1)
- kettle创建数据库资源库,执行SQL语句有两条执行失败