PDI Kettle ETL工具数据转换工具
A数据 ===》 B数据库 (可以是不同数据库、不同结构);定时同步
开源软件:可以自由定制插件
主流版本:Kettle9(已经支持jdk8~17)
一、Cettle/Pdi 介绍
java开发,可在windows、linux、mac运行,
安装中文版本,转换操作就简单了
介绍1:kettle中文网 介绍2:Kettle — 使用手册 介绍3:Kettle — Mac安装Kettle 介绍4:Pentaho Data Integration (PDI, also called Kettle) 介绍5:pdi kettle - CE 介绍6:github kettle pdi 使用文档
1.1 文件后缀说明
文件后缀 | 全名 | 中文名称 |
.ktr | transformation转换 | kettle转换任务,有输入、转换、输出 |
.kjb | job作业 | kettle转换作业,可以包含多个:转换、作业job; 有:start、成功; 可设置定时任务执行 |
1.2 kettle子组件
组件名称 | 作用 | 组件全名 | 说明 |
pan | 执行转换 trans | pan.bat、pan.sh | |
kitchen | 执行作业job | kitchen.bat、kitchen.sh | |
Spoon | 图形化界面 | Spoon.bat、Spoon.sh | 重启之后,定时不会执行了;UI界面启动jvm参数这里配置 |
# 执行job任务、执行转换,类似
cd d:\soft\kettle\data-integration
kitchen.bat -file "D:\soft\kettle\任务文件\增量同步.kjb"
# 使用kitchen.bat和 span.bat的意义?
# 可关闭Span,通过 windows 执行计划、linux crontab 进行定时。
1.3 转换有哪些?
kettle是一个输入输出的流操作,在输入输出中间,可以对流拦截,做若干的转换、处理。
- 常量:对流增加常量字段;如:输入字段少,输出字段多,有需要对输出一个默认值。对流拦截,添加字段
- 获取系统信息:如,数据同步日期、更新日期,可以同这里获取到;对流拦截,添加字段
- 值映射:如把,男女、变成 1、2
- 字段选择:对输入流中的字段进行修改名称,精度
- 去除重复记录
- …
支持的数据库 | 是否内置 | 参考 |
ClickHouse | 否 | |
Mongo | 是 | |
elasticsearch | 否 | |
Hbase | 是 |
1.4 自定义JDK版本
当本地安装多个jdk,不同软件需要使用,不同jdk版本,这里演示,手工设置jdk版本。
- 进入
set-pentaho-env.sh
文件 - 手工设置:
JAVA_HOME
取值
# 显示:指定jdk版本
# jdk17, 个别三方功能未适配,可能出现问题。
#JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.4.jdk/Contents/Home
# jdk17, 个别三方功能未适配,可能出现问题。
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home
二、实战操作
2.1、实战一,入门:项目采集oracle的table、view到mysql表中
2.1.1 新建转换
2.1.2 表输入
2.1.3 字段选择
2.1.4 表输出
输出,如果需要增加字段、修改表名、到不同的数据库都是可以的。
2.1.5 写日志
2.1.6 Cettle 转换文件 ktr
2.2、实战二,进阶 转换作业
2.2.1 job作业预览
2.2.2 转换01:根据身份证插入/更新
2.2.3 转换02:按照手机号更新
同:01
三、定时执行、增量更新设置
二种的是全量更新、手工点击运行进行执行;项目当中经常需要自动执行、增量更新。
四、实例文件
五、连接多种数据源
5.1 直连接clickhouse
Hello.
- Follow the link to https://github.com/biwed/PDI-clickhouse. There are drivers in the jdbc folder (Clickhouse-jdbc-0.1.50.jar driver version). The all contents of the jdbc folder must be copied to the folder …/data-integration/lib
- Restart PDI
- Connect using the “Generic Database”:
- Custom connection URL:
jdbc:clickhouse://IP:8123/database
- Custom driver class name:
ru.yandex.clickhouse.ClickHouseDrive
5.2 插件连接clickhouse
java代码链接Clickhouse github 官方jdbc demo:官方 docs: ClickHouse Playground
DBeaver连接clickhouse(超详细图文教程)-自定义驱动
Kettle连接Clickhouse 自定义插件 支持pdi-ce8,pdi-ce9、
5.3 直连接elasticsearch
老张使用 kettle,实现:clickhouse到elasticsearc的写入 。
kettle8、9默认只能连接 es无认证的场景,需要认证,需要使用三方插件。
我们使用腾讯课堂,这位老师的插件,亲测可用。
Kettle实战100篇 第20篇 MySQL数据库导出到ElasticSearch、
ETL工具kettle之Java脚本+Elasticsearch bulk insert 参考 腾讯课堂:Kettle实战:ElasticSearch7+单条/批量写入,配置ES认证都在这了
xpack.security.user
= elastic:123456
账号:密码
5.4 Big Data MongoDb
5.5 连接mysql
总结:\data-integration\lib\
目录需要自己放上两个mysql jdbc驱动包:
mysql-connector-java-5.1.49+.jar: 适配图形界面:org.gjt.mm.mysql.Driver
mysql-connector-java-8.0.29+.jar: 适配通用连接:com.mysql.cj.jdbc.Driver
- 直接通过mysql选项进行连接,可能报错
kettle中报org.gjt.mm.mysql.Driver 解决办法 下载mysql jdbc 驱动到\data-integration\lib\mysql-connector-java-5.1.49.jar
重启后,完美连接。
说明:没想到kettle mysql的链接,竟然都没有捆绑mysql的驱动。 - 通过Generic Database通用数据库连接,连接的url 和 jdbc驱动 和java项目配置一模一样。可以先在java项目中连接之后,在用kettle测试。这里用的是8.0的驱动