和数据库打交道避免不了数据的导入导出,ETL 工具就是专门干这个的,ETL工具可以方便地在不同数据库之间搬运数据。
今天介绍的是一款开源ETL工具:pentaho-kettle
Github 仓库地址:
https://github.com/pentaho/pentaho-kettle.git
从项目首页我们也可以看到,这个工具的全称叫Pentaho Data Integration ( ETL ) a.k.a Kettle
缩写 a.k.a abbr 亦称;又名(also known as)
所以我们称它为 PDI 或 Kettle 都行,我们先把名字搞清楚
Kettel 水壶
Spoon 勺子
Kitchen 厨房
整个项目或工具的名字叫 PDI 或 Kettel (水壶),其中它的命令行工具叫 Kitchen (厨房),图形化设计工具叫 Spoon (勺子)。
看几个例子:
1. 命令行工具 kitchen
sh /opt/pdi8.1.0.0-365/data-integration/kitchen.sh \
-file /root/pdi6/jobs/coreindicators.kjb \
-param n=0
2. 图形化工具 spoon
启动脚本分为 Spoon.bat 和 Spoon.sh,支持在不同平台下运行
程序运行后,打开设计界面如下
Spoon 脚本又分两种
job 文件后缀为 *.kjb ,在Spoon中被翻译为 “ 作业 ”
transformation 文件后缀为 *.ktr ,在Spoon中被翻译为 “ 转换 ”
Job 用来组织任务,设定不同任务间执行的条件,是线性的还是并发的,类似于 Jenkins 的 pipeline。在 Job 的编辑界面,可使用的节点主要与流程处理相关:
相对的,transformation 的编辑界面,可用的节点主要与数据处理相关:
如果只是数据库之间导数据,基本上就只需要用 "插入/更新" 节点就够用了,这个节点可以需要主键做数据对照,如果主键不存在就做插入,如果主键存在就对比数据,当数据变化就做更新操作。这个动作如果是自己写 SQL 就很难实现,相反用 ETL 就很容易。
Spoon 支持传参,结合命令可以很好地控制数据抽取的天数或其它条件。
在命令行中,使用 -param n=0 为参数赋值
在 transformation 中调用参数
Pentaho Data Integration 除了是个开源项目,它本身是 Hitachi 公司的产品,它的代码在 Github 中, 但帮助文档主要还是 Hitachi 公司在维护。关到 PDI 是有企业版的,企业版与社区版的区别如下:
Pentaho 的历史版本在 Sourceforge 上可以下载到
https://sourceforge.net/projects/pentaho/files/Data%20Integration/
PDI 的文档在如下位置
https://pentaho-community.atlassian.net/wiki/spaces/EAI/pages/372704041/Getting+Started