安装
1. 配置Kettle
1.1 下载Kettle
下载地址
绿色版: 解压到具体的目录下即可
1.2 配置Kettle
1.2.1 使用的mysql驱动的方式连接数据库,则需要mysql驱动(对应连接数据库版本)
例如:这里使用的mysql8.0, 则需要mysql8版本的驱动
将这个驱动放在data-integration/lib目录下
1.2.2 mysql数据源配置
进入 data-integration/simple-jndi,下面有一个jdbc的配置文件:
修改该文件(在最底下新增字段):
MYSQL8_DB/type=javax.sql.DataSource
MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_DB/url=jdbc:mysql://localhost:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
MYSQL8_DB/user=root
MYSQL8_DB/password=root
MYSQL8_DB: 表示这个数据源的名字
MYSQL8_DB/type : 数据源类型
MYSQL8_DB/driver: 驱动名
mysql8不需要修改/mysql5需要修改为com.mysql.jdbc.Driver
MYSQL8_DB/url:
数据库连接地址: 修改为自己的数据库地址即可:要携带SSL,编码 等等的参数
例如:jdbc:mysql://localhost:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
MYSQL8_DB/user:用户名
MYSQL8_DB/password:密码
注意: 这个数据源可以有多个,但是名字不能重复(例如: 远程数据库和本地数据库的同步):
<!-- 远程数据源-->
MYSQL8_DB/type=javax.sql.DataSource
MYSQL8_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_DB/url=jdbc:mysql://远程数据源:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
MYSQL8_DB/user=root
MYSQL8_DB/password=root
<!-- 本地数据源-->
MYSQL8_2_DB/type=javax.sql.DataSource
MYSQL8_2_DB/driver=com.mysql.cj.jdbc.Driver
MYSQL8_2_DB/url=jdbc:mysql://localhost:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
MYSQL8_2_DB/user=root
MYSQL8_2_DB/password=root
配置完毕
使用Kettle:
回到主目录:data-integration
例如:E:\Work\data-integration
打开这个bat文件
主界面展示:
主对象树:当前打开了几个转换,几个作业
2.1 作业和转换的区别:
转换(Transformation):主要是针对数据的各种处理,一个转换里可以包 含多个步骤(Step)。
作业(Job):相较于转换,是更加高级的操作。一个作业里包括多个作业项(Job Entry),一个作业项代表了一项工作,而转换是一种作业项,即作业里面可以包括多个转换。
转换 涉及到数据的处理 换句话说:数据库连接配置在转换 里面
2.2 转换:
2.2.1 创建转换
鼠标双击——新增转换
核心对象: 表示当前对象——转换对象,里面有哪些操作
2.2.2 数据库连接
现在要建立数据库的连接,则肯定不是在对象操作里面,返回主对象树
- 右键/双击建立数据库连接
例如:
远程数据库建立连接:
本地数据库建立连接
连接完成后:
2.2.3 在转换中执行数据操作
例如:将远程数据库的创建和修改后的数据(10分钟之内)同步到本地当中
数据库SQL:
CREATE TABLE `zz_test` (
`id` varchar(100) NOT NULL COMMENT '测试主键',
`content` varchar(100) DEFAULT NULL COMMENT '测试内容',
`create_by` varchar(100) DEFAULT NULL COMMENT '创建者',
`create_date` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_date` timestamp NULL DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(100) DEFAULT NULL COMMENT '更新者',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
表输入
表输入:类似于select语句,将数据查询出来
拖拽即可:
2.2.3.1 创建时间在10分钟之内的数据
表输入:
查询数据库SQL
SELECT
id
, content
, create_by
, create_date
, update_date
, update_by
, remark
FROM tongframework.zz_test
where create_date >= CURRENT_TIMESTAMP - INTERVAL 10 MINUTE;
数据输出:
插入/更新
拖拽进入右边界面
这里介绍流数据的概念:
流数据: 一组顺序、大量、快速、连续到达的数据序列
则如果表输入 和 插入/更新2 建立连线,则表输入中查询出的所有的数据都在这个流当中,插入/更新则可以直接拿到这个流数据
建立连线(按住shift建立连线):
测试执行转换:
查看执行过程:
转换 主要关注:
查看日志: 这里面会有报错信息
步骤度量 查看性能和更新插入的数量
可视数据:展示更新和操作哪些数据
2.2.3.2 更新时间在10分钟之内的数据
查询数据库SQL
SELECT
id
, content
, create_by
, create_date
, update_date
, update_by
, remark
FROM tongframework.zz_test
where update_date >= CURRENT_TIMESTAMP - INTERVAL 10 MINUTE;
同理更新表的设置:
插入/更新可以共用一个,因为都是根据流中的id比较
当连线的时候和 可能会遇到分发和复制的选择:
分发和复制的区别
这两种方式的区别是,分发会将一份数据按照发扑克牌一样分给下一个组件,数据始终都只有一份,而复制则是不一样,他会将一份数据复制n份给下一个组件,而这个N是多少呢取决于下一个组件的数量
按照创建时间的方式运行即可
2.3 作业:
2.3.1 新建作业
2.3.2 编写作业(简单作业):
拖拽相应组件
双击转换:
找到保存好的转换文件(配置转换即可)
在作业中可以设置定时任务:
双击start
如果定时任务,则一定需要重复,并且类型修改为时间间隔
例如:作业50秒执行一次
执行:
查看结果:
与转换一致: