Kettle是一个ETL工具,可以在日常工作中我们简化大量的数据处理工作,当你准备用代码实现数据处理工作时,不妨先用Kettle试试,当你熟练使用它时,你会发现它功能非常强大、灵活,对于比较特殊的情况,也是可以使用kettle调用javascript脚本、java脚本等方法来实现。
1、kettle介绍
Kettle最早是一个开源的ETL工具。2006年,Pentaho 公司收购了Kettle,Kettle成为Pentaho的主要组成部分。2015年,Hitachi Vantara收购了Pentaho,Kettle正式命名为PDI。
- 官网地址: https://www.hitachivantara.com/zh-cn/home.html
- 下载地址: https://sourceforge.net/projects/pentaho/files/Pentaho%209.1/client-tools/pdi-ce-9.1.0.0-324.zip/download
- 源码地址: https://github.com/pentaho/pentaho-kettle
1.1 基本使用介绍
1.1.1 启动
进行解压后的根目录, 双击Spoon.bat即可.
注意: 需要先在电脑上安装jdk.
1.1.2 常用场景
- 从A数据库某个表, 把数据同步到B数据库某个表
- 从某个接口获取数据, 将数据插入到数据库
- 从excel读取数据, 插入到数据库
…
1.1.3 作业&转换 区别
作业: job
转换: transformation
区别:
1) 作业可以设置定时执行,转换不行
2) 作业可以执行(1个或多个)转换
3) 作业不能直接执行一些数据处理动作
2、数据同步
这里只讨论单向同步,双向同步很少需要,暂且不谈。
2.1 场景
- 从接口获取数据 同步到 数据库
- 从异构数据库获取数据 同步到 数据库
2.2 设计思路
2.2.1 任务时间控制表设计
字段名 | 类型 | 描述 |
---|---|---|
id | varchar | 任务唯一标识,可以用相应的表名或其他名称,手动维护 |
checkpoint | timestamp | 数据时间点(非当前时间),比如每次5分钟的数据,那这个时间每次执行完就增加5分钟,下一次再从该时间点向后取5分钟 |
step_length | varchar | 步长,即每多长时间执行一次,比如5min, 1h等 |
exec_time | timestamp | 任务执行时间,每次执行完更新为当前时间 |
exec_status | varchar | 任务执行状态,成功true,失败false,或者1成功、0失败 |
task_desc | varchar | 任务描述 |
2.3 流程示例
重点是红色的部分,黑色可根据自己的业务情况修改。
3、kettle调用脚本
3.1 调用javascript脚本
3.2 调用java脚本
3.3 调用sql脚本
4、踩坑记录vs常见问题
- JSON Input的“select fields”有时候会不生效,解决办法:把json串所有不带引号的值全部加上双引号。
- 不能把javascript脚本、js脚本等放在第个步执行,因为脚本是针对每一行过行处理
- 如何将表输入的结果当作参入传递给下一个表输入?
如下,将第1个表输入的结果当作参数,传递给第2个表输入:
注意如下图所示位置: