设为首页收藏本站 开启辅助访问
 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博登录

只需一步,快速搞定

查看: 8267|回复: 189

[已解决] kettle实时同步增量数据,触发器+快照表.欢迎大家指正.

  [复制链接]

2

主题

177

帖子

653

积分

版主

Rank: 7Rank: 7Rank: 7

积分
653
发表于 2016-3-3 15:28:16 | 显示全部楼层 |阅读模式
本帖最后由 二毛 于 2016-3-17 14:37 编辑

Kettle实时同步数据的5种方案:


我使用的是: 触发器+快照表
需求:
1、当源数据发生新增、更新、删除时,都需要让目标数据库实时与源数据库保持一致。
2、由于目前很多业务表,没有记录操作时间的字段。而且不能改变源数据库表结构。

环境:
1、SQL Server
2、kettle 5.4

思路:
1、当操作源数据时,触发器触往快照表写入 ID(自动生成),表名,主键ID字段名,主键ID值,操作类型(插入、更新、删除),时间。
2、采用循环的方式获取快照表里面的数据(即源数据库对数据的增删改的操作记录)。   --用冰焰的例子就可以实现
3、用switch/as 控件通过操作类型值,来判断执行插入、新增、删除,并执行相应步骤。
4、当新增时直接使用表输入-表输出控件,进行对目标库的操作。插入后删除源库的快照表中的这一条操作记录。   --感谢杭州-大米白菜的提示,使用表输出控件,在进行新增的时候可以不用设置字段。
5、更新。由于更新控件这些都需要执行字段。没有想到好的方法。就先删除,在插入的。
6、每次获取快照表里面的100条或者1000条数据。每5、10分钟调度一次。来达到实时的效果。(如果每分钟进入数据量大,需要慎重)

实战:
1、给业务表加触发器,建一张快照表
2、使用了5个job、7个转换。
3、使用了7个控件:表输入、复制记录到结果、从结果获取记录、设置变量、switch/as、执行sql脚本、空操作


这里介绍下大致的步骤。具体详细内容。下载附件
图例步骤:
1、主程序

2、获取快照表里面的操作记录:每次调度获取100条或者1000条数据

3、主循环体,需要设置执行每一个输入行

4、将获得值写入变量里面,方便后面好调用

5、通过操作类型去判断执行什么步骤


6、插入步骤

7、更新步骤:这里由于不同表会有不同的表结构,更新的话,不知道用那一个控件,我就只有执行删除了,在插入,希望大神们帮忙改进下

8、删除步骤


附件回复可见,谢谢。
游客,如果您要查看本帖隐藏内容请回复


参考文档:
http://blog.sina.com.cn/s/blog_6d35752501014y2a.html
http://ainidehsj.iteye.com/blog/1735434
http://www.ukettle.org/forum.php ... =%E5%BE%AA%E7%8E%AF




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖

0

主题

2

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2016-3-3 15:36:43 | 显示全部楼层
谢谢分享,希望能持续发布改进

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2016-3-3 15:42:43 | 显示全部楼层
先删除,后插入来替换更新操作。。。神了

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2016-3-3 16:06:35 | 显示全部楼层
谢谢分享
回复

使用道具 举报

2

主题

177

帖子

653

积分

版主

Rank: 7Rank: 7Rank: 7

积分
653
 楼主| 发表于 2016-3-3 16:19:15 | 显示全部楼层
fzyy1993 发表于 2016-3-3 15:42
先删除,后插入来替换更新操作。。。神了

唉,因为更新控件,需要指定字段,根据什么字段更新,更新些什么字段。这样在多表的时候,很难处理。我就先采用的这种。还没有想到好的方式

1

主题

29

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2016-3-4 09:51:22 | 显示全部楼层
顶一下
回复

使用道具 举报

24

主题

94

帖子

487

积分

中级会员

Rank: 3Rank: 3

积分
487
发表于 2016-3-4 15:10:16 | 显示全部楼层
二毛 发表于 2016-3-3 16:19
唉,因为更新控件,需要指定字段,根据什么字段更新,更新些什么字段。这样在多表的时候,很难处理。我就 ...

就我的经验 你现在使用先删除 在插入 应该是一种好的办法  ,如果你没有 回溯的需求 就不需要 记录历史
之前我们也有 插入/更新的控件  当数据量大的时候 效率很慢

47

主题

620

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11692
发表于 2016-3-5 09:27:38 | 显示全部楼层
fzyy1993 发表于 2016-3-3 15:42
先删除,后插入来替换更新操作。。。神了

这个是增量的技巧,我们都这样做,主要是效率高

47

主题

620

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11692
发表于 2016-3-5 09:28:23 | 显示全部楼层
二毛,kettle的实时增量很给力,我这边用的storm,几乎实时了。很不错

8

主题

226

帖子

1159

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1159
发表于 2016-3-6 11:00:32 | 显示全部楼层
留名 学习一下
各位大神好,我是 上海-H.Y.Chang
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋| μKettle ( 沪ICP备14044064号 )     

GMT+8, 2017-8-18 09:21 , Processed in 0.339136 second(s), 19 queries , File On.

Powered by Discuz!  uKettle

Copyright © 2014 Comsenz Inc.

快速回复 返回顶部 返回列表