Kettle9.0 简单入门

What
Kettle是一个Java编写的ETL工具,主作者是Matt Casters,2003年就开始了这个项目,最新稳定版为7.1。
2005年12月,Kettle从2.1版本开始进入了开源领域,一直到4.1版本遵守LGPL协议,从4.2版本开始遵守Apache Licence 2.0协议。
Kettle在2006年初加入了开源的BI公司Pentaho, 正式命名为:Pentaho Data Integeration,简称“PDI”。
自2017年9月20日起,Pentaho已经被合并于日立集团下的新公司: Hitachi Vantara。
总之,Kettle可以简化数据仓库的创建,更新和维护,使用Kettle可以构建一套开源的ETL解决方案。

整体架构
Kettle是一个组件化的集成系统,主要包括:
Spoon:图形化界面工具(GUI方式),Spoon允许你通过图形界面来设计Job和Transformation,可以保存为文件或者保存在数据库中。
也可以直接在Spoon图形化界面中运行Job和Transformation,
Pan:Transformation执行器(命令行方式),Pan用于在终端执行Transformation,没有图形界面。
Kitchen:Job执行器(命令行方式),Kitchen用于在终端执行Job,没有图形界面。
Carte:嵌入式Web服务,用于远程执行Job或Transformation,Kettle通过Carte建立集群。
Encr:Kettle用于字符串加密的命令行工具,如:对在Job或Transformation中定义的数据库连接参数进行加密。
jiagou.png

基本概念
Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。
Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。
Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。
Job Entry:Job Entry是Job内部的执行单元,每一个Job Entry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为Job Entry。
Hop:用于在Transformation中连接Step,或者在Job中连接Job Entry,是一个数据流的图形化表示。
gainian.png
在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。

应用场景
Migrating data between applications or databases 在应用程序或数据库之间进行数据迁移
Exporting data from databases to flat files 从数据库导出数据到文件
Loading data massively into databases 导入大规模数据到数据库
Data cleansing 数据清洗
Integrating applications 集成应用程序

画虎皮扯大旗,完了开始拉大锯...

kettle9.0简单使用
1. 安装 (Mac 下载安装版)
kettle中文网(http://www.kettle.net.cn/)下载压缩包:pdi-ce-9.0.0.0-423.zip
解压zip包到指定目录
2. 开始"Hello Kettle"征程
在解压文件目录xxx/pdi-ce-9.0.0.0-423/data-integration,然后运行spoon.sh, 打开用户界面
在"主对象树"选中“转换”,右键选择“新建” (双击“转换”也可以新建)
1.png
继续选择“DB连接”,右键“新建
2.png
在弹出窗口中,连接类型选择对应DB类型, 这里选择”MySQL“作为测试项,连接方式默认Native,设置面板中填写DB链接相关信息,填写完成后点击“测试”按钮
3.png
点击“测试”后,首次会报错,如下图,提示MySQL驱动未找到(驱动类型和上一步选择的连接类型相同)
4.png
解决方式:

Windows: 将mysql驱动jar包拷贝到data-integration/lib文件夹下
Mac: 将mysql驱动jar包拷贝到/data-integration/libswt/osx64文件夹下
Linux: 将mysql驱动jar包拷贝到/data-integration/libswt/linux文件夹下

mysql驱动版本此次使用mysql-connector-java-5.1.46.jar,因为kettle使用旧版mysql配置,所以驱动版本较低
成功添加驱动后,再重试之前的步骤
测试用本地xxx库作为源数据库
5.png
在“核心对象”-->“输入”列表下选择“表输入”,按住左键拖动到右侧空白处
6.png
在“核心对象”-->“输出”列表下选择“插入/更新”,按住左键拖动到右侧空白处
7.png
选中“表输入”,按住Shift键不动,拖动鼠标将“表输入”和“插入/更新”建立起连接
8.png
双击”表输入“填写配置信息,输入名称,数据库连接默认会选择最初配置的DB链接,这里也可以手动新建或者修改;
9.png

中间SQL区域,可以手动填写SQL脚本,也可以点击右侧”获取SQL查询语句“,弹出的窗口会显示DB中的表信息,选择表名后,SQL区域会自动生成查询脚本
10.png
双击插入/更新,
首先,新建一个新的DB连接test, 这个作为同步目标库
11.png
目标表字段,点击“浏览”,手动选择要同步的表
12.png
点击”获取字段“,可以自动拿到DB配置字段信息,也可以手动添加,一般情况下只设置主键匹配
13.png
接下来点击”获取和更新字段“,默认会自动映射源数据的表字段,也可以手动编辑、删除
14.png
”编辑映射“ 可以用来手动配置映射关系
15.png
点击”确定“,保存转换文件到本地指定文件夹
16.png
点击右上角”文件“,选择新建”作业“
17.png
左侧分别选择”Start“、”转换“,然后拖动到右侧,并建立两者间的联系(同配置转换相似)
18.png
双击”Start“, 可以手动配置执行周期, 此处测试采用默认
19.png
双击”转换“,配置转换信息,选择之前保存的转换文件, 然后”确定“
20.png
同样可以保存此次作业
21.png
完成上述步骤,就可以开始执行作业
22.png
点击“执行”
23.png
执行log:
24.png
最后执行结果
执行前:
wcg ==> t_user
25.png
test ==> user
26.png
执行后:
test ==>user
27.png

[参考资料]
https://cloud.tencent.com/developer/article/1504246

暂无评论