场景
kettle
中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后
以一种指定的格式流出。是一款由纯Java编写的ETL工具,绿色无需安装,数据抽取高效稳定(数据迁移工具)。
业务需要,从A系统的Sqlserver数据库的某个表或者视图,同步到B系统的Mysql的某个表。
Sqlserver的表和mysql表的结构一致。
在SqlServer数据库中新建一个表student
设置id为主键
然后在另一个Mysql表新建表student
结构一样,id同样为自增主键。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、下载地址
https://sourceforge.net/projects/pentaho/files/Data%20Integration/
点进去之后,点击zip下载
下载之后解压到某目录下即可
2、运行
找到解压目录下的Spoon.bat双击运行
运行成功后会看到如下界面
3、新建转换
主对象树下转换-新建
4、新建数据库连接
转换-DB连接-新建
在建立数据库连接的时候,需要将对应数据库的驱动jar包放在lib目录下
比如这里先连接Mysql,下载mysql对应的驱动jar包,这里是mysql5.6
https://downloads.mysql.com/archives/installer/
选择对应的版本下载解压后将驱动jar包放在lib目录下
如果不放置驱动jar包会报错
只有放置正确的驱动jar包后,点击测试才能连接成功
再建立一个DB连接,连接Sqlserver,同样需要下载sqlserver的驱动jar包
根据sqlserver的版本下载对应的jar包,如果不确定sqlserver版本与驱动jar包的对应关系,就多下载,然后建立DB连接成功后,进行删除,哪一个提示正在使用中就保留。
下载完驱动jar包后,进行测试连接sqlserver,否则会提示
直到建立Sqlserver连接成功
5、编辑转换
首先整个转换的流程如下
(1)建立mysql的表输入
核心对象-输入-表输入-拖拽-双击编辑-编辑名称-选择数据连接-获取sql数据查询语句-确定
(2)mysql字段选择
核心对象-转换-字段选择
点击上面mysql的表输入,按住shift连接到mysql字段转换
双击编辑-元数据-获取改变的字段-将Binary to Normal都改为是,另外两个改为否
(3)mysql排序记录
转换-排序记录-双击编辑-获取字段-保留id作为排序字段
(4)同样的进行下面的sqlserver的表输入
(5)sqlserver的字段选择
(6)sqlserver的排序记录
(7)合并记录
将上面的两个排序连接到合并记录上。
连接-合并记录-双击编辑-选择两个数据源
这里的标志字段可以用默认的字段,合并之后会以此字段为增删改的依据。
然后点击获取关键字段-获取值字段,其中关键字段是id唯一键,关键值是除了id唯一键之外的值。
(8)数据同步
输出-数据同步-选择目标数据库和目标表-批量更新-选择关键字为id,关系为是否相等-更新字段为所有字段,会默认带着上面的标志字段,记得去掉
然后切换到高级页面,将操作设置为对应下面
标志字段:设置标志字段的名称,标志字段用于保存比较的结果,比较结果有下列几种。
1. “identical” – 旧数据和新数据一样
2. “changed” – 数据发生了变化;
3. “new” – 新数据中有而旧数据中没有的记录
4. “deleted” –旧数据中有而新数据中没有的记录
6、执行转换
点击右上角三角号执行一次转换,下面日志显示执行成功则没有问题。
可以通过修改sqlserver的数据,然后执行一次后,查看mysql的数据是否同步成功。
然后保存,会在磁盘下保存一个kjb后缀名的文件
7、新建作业
通用-作业-拖拽-双击编辑-设置执行的时间间隔-下面设置的是每10秒重复一次
拖拽一个转换-双击编辑
选择上面保存的ktr转换的文件
将START与转换之间连接上。
8、运行作业
点击作业的左上角三角号就会持续运行,点击正方形就会停止运行
9、部署运行
这里是在Windows服务器上,可以直接连同整个程序以及转换文件和作业文件同样的再服务器上部署一套。
或者是将kuttle的整个目录pdi-cd-7.1里面,复制上面新建的转换文件ktr以及作业文件kjb
并且在此目录下新建Bat脚本start.bat
首先需要更改kjb文件中引用ktr文件的路径,使用文本编辑工具打开kjb文件,将ktr文件的路径修改为相对路径
<filename>${Internal.Job.Filename.Directory}/tranTest.ktr</filename>
然后修改bat脚本的内容
@echo off
set pwd=%~sdp0
%pwd%\data-integration\Kitchen.bat /file %pwd%\sysjob.kjb
pause;
该脚本的意思是获取当前路径下data-intergration下的Kitchen.bat并设置file参数为当前目录下的sysjob.kjb文件
双击bat文件运行
没有报错则部署成功。