Kettle搭建与实战

目录

介绍

部署环境

下载相应的数据库驱动

启动命令:

部署

先建转换(A库a表到B库a表)后创建作业(定时任务)

编辑具体业务:

多表同步

创建作业(定时任务)

增量同步

1.使用同步标识(sync_flag)字段实现增量同步

2.使用修改时间(modify_date_time)字段实现增量同步

3.使用修改时间(modify_date_time)字段+动态表名实现增量同步


介绍

kettle 是纯 Java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运行。有图形界面,也有命令脚本还可以二次开发。

官网地址:Kettle中文网 – Kettle安装、Kettle使用、Kettle中文,集成包下载:https://sourceforge.net/projects/pentaho/files/  ,源代码下载:GitHub - pentaho/pentaho-kettle: Pentaho Data Integration ( ETL ) a.k.a Kettle

部署环境

基于Java开发的jdk1.8环境。

下载相应的数据库驱动

由于 kettle 需要连接数据库,因此需要下载对应的数据库驱动。

例如 MySQL 数据库需要下载 mysql-connector-java.jar,oracle 数据库需要下载 ojdbc.jar。下载完成后,将 jar 放入 kettle 解压后路径的 lib 文件夹中即可(需要重启kettle)
自己测试的为:mysql-connector-java-5.1.46.jar(用mysql-connector-java-5.1.39.jar这个包碰到编码问题,不确定是不是这个包引起的)

kettle所需MySQL链接包-MySQL文档类资源-CSDN下载包含:mysql-connector-java-5.1.39.jar、mysql-connector更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/pds_shuang521/16680760?spm=1001.2014.3001.5503

启动命令:

Windows:Spoon.bat

Mac:spoon.command 或 spoon.sh

部署

下载下来最新的集成包:pdi-ce-9.1.0.0-324.zip,解压后将数据库驱动包放进去。启动服务。

初始化界面:

启动成功后主界面:

注:建立一个数据库链接,将kettle上操作、配置保存到数据库中,下次再编辑时可直接读取。

Windows测试时遇到文件编码问题,这里建议统一设置。

1.数据库创建的kettle数据库的编码字符集使用:utf8。排序规则:utf8_general_ci

2.kettle链接数据库时配置characterEncoding=utf-8

3.MySQL的jar包升级,mysql-connector-java-5.1.39.jar 升级为 mysql-connector-java-5.1.46.jar,经查找资料,39的包确实存在编码问题...

以上操作如果还有编码问题则将保存的 转换文件命名、表输入、插入/更新改为英文即可。

点击右上角的connect

点击链接后刚刚配置的kettle数据库就会创建R_开头的46张表,后续其他配置变会保存到此数据库中。


先建转换(A库a表到B库a表)后创建作业(定时任务)

双击:输入 --> 表输入。输出 --> 插入 / 更新。command+s 保存当前步骤。

效果图:

编辑具体业务:

MES数据库mes_board表往PCN数据库的mes_board表同步。

运行结束后,可以在下方看到运行结果,其中有日志,数据预览等。可以看到一共读取了多少条数据,插入更新了多少数据等等。

这样就完成了一个最简单的转换,从MES库的一个表取数据,插入更新到PCN库的另一个表。

多表同步

表输入和表输出都是针对表的操作,如有很多表需要同步可按照下面这种方式进行批量处理,按照业务类型来创建转换文件,效果如下:

创建作业(定时任务)

从左侧依次拖动 START 、转换、成功到右侧,并用线连接起来。

双击Start编辑定时任务,这里配置的是每5秒钟执行一次。

双击转换,选择之前新建的那个转换。

点击运行,就能运行这次作业,点击停止就能停止。在下方执行结果,可以看到运行的日志。

这样就完成了一个最简单的作业,每隔5秒钟,将源表的数据迁移到目标表。

增量同步

1.使用同步标识(sync_flag)字段实现增量同步

字段说明:

sync_flag:10未同步、20已同步、30同步失败

逻辑说明:

1、查询pcn库的if_package_detail表未同步数据(《记录数量限制》要输入0,具体原因看上边解释)。

2、将查询的结果输出到mes库的if_package_detail表里,勾选《使用批量插入》(如果表字段不一致就勾选《指定数据库字段》,然后在数据库字段里做关系映射)。

3、将插入完毕后的数据获取指定列,拿到ID的值。

4、

    将ID的值以参数的形式传入到SQL脚本中,使用 ? 来代替(如有多个字段需要传入,就按照步骤3里的顺序依次在SQL中获取)。

    使用引号把 ? 包裹起来,将传入进来的值当做字符串处理。

    勾选《执行每一行》、《变量替换》。

    点击《获取字段》按钮,将步骤3的字段传入进来。

效果图:

具体实现效果截图:

2.使用修改时间(modify_date_time)字段实现增量同步

注:新增一张配置表,将表名和最新一条数据的修改时间放入到表中,保证表数据object_code唯一、必填,sync_time必填。

逻辑说明:

1、查询mes库的配置表(mes_pcn_sync_cfg_kettle),拿到需要同步的表名和对应的上次同步数据的时间(《记录数量限制》要输入0,具体原因看上边解释)。

2、获取指定列,拿到上次同步数据的时间。

3、根据时间查询对应业务表需要同步的数据。勾选《允许简易转换》、《替换SQL语句里的变量》、选择《从步骤插入数据》为上一步的《字段选择》、《执行每一行》。

4、将查询的结果输出到mes库的if_package_detail表里,勾选《使用批量插入》(如果表字段不一致就勾选《指定数据库字段》,然后在数据库字段里做关系映射)。

5、将插入完毕后的数据获取指定列,拿到修改时间(modify_date_time)的值。

6、

    将修改时间(modify_date_time)的值以参数的形式传入到SQL脚本中,使用 ? 来代替。

    使用引号把 ? 包裹起来,将传入进来的值当做字符串处理。

    勾选《执行每一行》、《变量替换》。

    点击《获取字段》按钮,将步骤5的字段传入进来。

表结构与数据:

CREATE TABLE `mes_pcn_sync_cfg_kettle` (
  `id` bigint(20) NOT NULL,
  `create_date_time` varchar(255) DEFAULT NULL,
  `create_user` varchar(255) DEFAULT NULL,
  `is_deleted` int(11) DEFAULT NULL,
  `is_valid` int(11) DEFAULT NULL,
  `modify_date_time` varchar(255) DEFAULT NULL,
  `modify_user` varchar(255) DEFAULT NULL,
  `organize_code` varchar(255) DEFAULT NULL,
  `object_code` varchar(255) NOT NULL,
  `object_name` varchar(255) DEFAULT NULL,
  `sync_time` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_object_code` (`object_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

INSERT INTO `impp_i3_mes`.`mes_pcn_sync_cfg_kettle`(`id`, `create_date_time`, `create_user`, `is_deleted`, `is_valid`, `modify_date_time`, `modify_user`, `organize_code`, `object_code`, `object_name`, `sync_time`) VALUES (1, '2021-04-28 16:00:00', 'sss', 2, 1, '2021-04-28 16:00:00', 'sss', '10003', 'if_package_detail', '接口包装表', '2021-05-10 14:56:23');

效果图:

具体实现效果截图:

3.使用修改时间(modify_date_time)字段+动态表名实现增量同步

注:这里要用到变量功能、结合job完成数据传递。

第一个转换:

1、查询配置表,获取需要同步的表名和对应的上次同步数据的时间。

2、将表名和时间设置为变量:OBJECT_CODE、SYNC_TIME。

第二个转换:

1、查询数据,表明和条件使用变量读取,固定写法:${变量名称},勾选《替换SQL语句里的变量》。

2、将结果输出到文件中(也可以结合上边的逻辑,输出到对应表中,然后在修改对应的同步时间即可)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值