pentaho kettle 实现数据库间增量同步

 今天刚接触 etl工具, 公司要求要实现一个 数据库同步任务,要求从两个表中同步数据。所以写下这篇博客记录一下。

思路:

    常用的同步机制 就是  在A表中添加 时间戳字段  命名为 LastModifiedTime , B 表也添加相同的字段。

   在同步的时候,查询A 表的 所有条目中 最大的更新时间, MAX(LastModifiedTime) ,在B表中只要

Select * From B where LastModifiedTime >  ? 既可以查出所有的最新条目,添加 / 更新 即可, 这些在 kettle 中都有实现, 具体操作下文会讲到。

1  首先下载 pentaho   http://tenet.dl.sourceforge.net/project/pentaho/Data%20Integration/6.0/pdi-ce-6.0.1.0-386.zip 
 解压到磁盘 

2  因为任务后面需要mysql 数据库之间的同步,所以先将mysql 驱动jar包加入lib目录下, 由于这里有三个 lib 目录 ,分别是Data Service JDBC Driver   lib     libswt\win64  ,我不知道应该加入哪个目录,于是干脆点直接把mysql的jar包每个目录都加了一遍。  之后在安装目录打开命令行启动Sqoop.bat   显示如下界面


3 首先双击 "作业"  ----》 "通用" ----》双击 START  出现如下界面

 

,接着可以双击右边的Start图标进行编辑


这个界面可以设置启动选项,要设置定时执行,勾选重复,然后设置类型为时间间隔, 以分钟的间隔 和  以秒计算的间隔分别是你想设置的定时。 我的同步任务是 以5 秒为单位同步一次所以设置上这样 。编辑好后记得ctrl+S保存文件到桌面。




4    保存完后关闭界面,又回到最上层  。 双击转换建立一个转换工程, 双击 “输入”--》“表输入” , 会在右边建立一个可以连接数据库连接,进入编辑界面 点击新建  设置数据库参数,命名为 MysqlA  ,代表一个输入源。




点击确定后,编辑sql输入框输入 ,当然这是为了获取A表中的最大时间戳 ,点击确定。

5     再从左边导航栏添加一个  表输入 选项,重复上一步操作, 此 表输入 部件 是用来获取B表中所有大于  "上一步最大的时间戳" 的所有条目 , 当然这时候也需要新建一个数据库连接,指向的数据库当然就是 B 表所在的数据库 ,可以命名为 MysqlB。

此时,需要点击 ” 获取查询语句“  ,在数据库浏览器中选择你需要的表  如图所示


该操作会为你自动生成 查询sql语句, 这时候我们需要在最后一行手动添加自己的 WHERE  条件  

问好就代表 从上一个输入源  获取 A表的最大的时间戳

其中再最下方 勾选如下,点击确定保存。

  


6  接着在最左边导航栏中 选择 "输出" ---》 ”插入/更新“  , 



此时设置的数据库连接 应该选择 A  数据表的 数据库,目标表应该选择 A 表 我这里是 test1 ,

在下方  "用来查询的关键字"

设置上查询的关键字 ,这里通常选择 主键

然后在下方更新字段中 设置  获取更新字段, 会自动获取表中的所有 需要更新的字段 ,当然很重要的一部就是需要把主键的更新选项设置为N

这一步如果不选会报  主键重复错误。


点击确定保存。 

之后界面上已经有三个  部件, 按住 SHift + 鼠标左键  可以用箭头连接两个  部件 以此从左网友连接。

点击运行即可测试。此时也记得保存 到桌面。

7   上一步如果成功了, 需要讲转换和 定时任务结合。   此时关闭界面  在主对象界面中选择第2步创建的作业 ,   双击 “通用” --- 》 “转换”  , 在编辑转换

将转换文件名指向前面索保存的  “转换文件”  , 并讲两个连在一起 ,运行即可实现5秒同步数据库。

成功后可以在B 数据表 添加 更新 表, 会自动同步到 A


大功告成,第一次写博客真的很累,如果有不详细的地方可以留言问我。






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值