一、Kettle简介

Kettle(又名:Pentaho Data Integration)是一款国外开源的ETL工具。

  • Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
  • kettle 是纯 java 开发,开源的 ETL工具,用于数据库间的数据迁移 。可以在 Linux、Windows、Unix 中运行。有图形界面,也有命令脚本,还可以二次开发。

Kettle_SQL

二、环境搭建

2.1.安装 java jdk 环境

  • 环境变量:JAVA_HOME
  • 环境变量:PATH
  • 验证:打开 cmd,执行 java –version

参考网址:

2.2.解压 Kettle 软件

  • windows:spoon.bat(双击)
  • mac/linux:spoon.sh
  • cd 解压目录下
  • ./spoon.sh

Kettle_数据_02

三、Kettle数据转换

3.1.Kettle 的基本开发步骤

基本步骤:

①.新建转换

②.构建Kettle的数据流图

  • 数据从哪来(Extract)?
  • 经过什么处理(Transform)?
  • 最终数据到哪去(Load)?

③.配置数据流图中的各个组件

  • Kettle内置各种组件

④.保存并启动执行

Kettle_SQL_03

3.2.Txt转Excel

3.2.1.需求说明

需求:将 user.txt 文件的数据抽取转换输出到 user_by_kettle.xls 文件。

Kettle_数据流图_04

在Kettle中将 user.txt 文件的数据抽取转换输出到 user_by_kettle.xls 文件中:

Kettle_数据流图_05

关键要点:

①.文本文件输入组件

  • 配置输入的 user.txt 文件:注意分隔符的设置

②.Excel输出组件

  • 配置输出的 user_by_kettle.xls 文件

3.2.2.Kettle实现

创建Kettle数据流图:
  • 输入:找到文本文件输入
  • 输出:Excel输出
  • 连接:shift 键 + 鼠标拖动

Kettle_数据_06

文本文件输入组件配置

①.添加需要转换的文件

Kettle_数据流图_07

②.指定多列之间的分隔符和编码格式

Kettle_数据流图_08

 ③.点击获取字段,即可查看数据

Kettle_数据流图_09

Excel输出组件配置

指定Excel数据组件文件

Kettle_SQL_10

获取指定,可以指定输出的字段类型

Kettle_SQL_11

保存当前转换,并启动执行

Kettle_数据_12

Kettle_数据流图_13

Kettle_数据_14

3.3.Excel转MySQL

3.3.1.需求

需求:将 users.xls 文件中的数据,抽取转换输出到 MySQL 的 tb_user 表中。

 

Kettle_数据_15

3.3.2.Kettle实现

①.先需要创建mysql数据库kettle_demo用于存储表格:

drop database if exists kettle_demo;
create database if not exists kettle_demo charset=utf8;

②.kettle中的lib目录中加入mysql的jar文件

  • 将资料中的 MySQL jdbc 驱动包mysql-connector-java-5.1.41-bin.jar、mysql-connector-java-8.0.16.jar 放置到 data-integration/lib 中
  • 找到 data-integration\simple-jndi\jdbc.properties 文件编辑,在末尾加上连接信息(见PPT备注信息)
  • 注意:配置之后,kettle软件一定要重新启动!!!

③.创建Excel输入和输出

Kettle_数据流图_16

④.配置输入组件

Kettle_数据流图_17

选择需要转换的sheet

Kettle_数据流图_18

获取字段信息,调整字段类型和格式

Kettle_SQL_19

⑤.配置表输出

Kettle_数据流图_20

创建数据库连接:

Kettle_数据_21

保存后,点击SQL修改字段类型,然后执行SQL语句创建表

Kettle_数据_22

⑤.保存,执行转换操作

Kettle_数据流图_23

执行会发现,报错了,这是因为id字段设置为int类型,长度只能为11,而数据超出字段长度:

Kettle_SQL_24

要解决这个问题,只需要修改表中id字段的类型和长度

Kettle_数据_25

在此执行转换,发现已经成功:

Kettle_SQL_26

3.4.MySQL表间转换

需求:将 tb_user 表中的数据,抽取转换输出到 tb_user1 表中

Kettle_数据流图_27

①.共享数据连接,共享数据连接后,就不用每次都创建新的数据连接了

Kettle_SQL_28

②.创建数据流图

Kettle_数据流图_29

③.配置表输入组件

Kettle_数据流图_30

④.预览数据如下:

Kettle_SQL_31

⑤.配置表输出组件

Kettle_SQL_32

⑥.执行SQL创建表

Kettle_数据_33

⑦.保存配置,并执行:

Kettle_数据流图_34

四、常见组件使用

Kettle中有很多常见组件,本小节主要介绍几个常用的组件:

  • 插入-更新组件
  • switch-case组件
  • SQL脚本组件

4.1.插入-更新组件

Kettle(Pentaho Data Integration,PDI)中,插入-更新组件(Insert/Update)用于实现对数据库的插入更新操作,具体是根据特定的条件来判断是向数据库表中插入新记录,还是更新已有的记录(保证两种表的数据一致性)。这个组件通常用于在ETL(Extract, Transform, Load)流程中处理数据库的数据同步。

4.1.1.需求说明

示例需求:将 tb_user 表中的更新/新增的数据,抽取更新/新增到 tb_user1 表中

Kettle_数据流图_35

4.1.2.插入更新和表到表的区别

插入更新和表到表区别

  • t_user_to_t_user1 : 只进行全量追加.
  • 插入更新 : 对比关键字段,更新所有数据. (不会删除)

4.1.3.案例实现

①.创建数据流图

Kettle_数据流图_36

②.配置表输入组件

Kettle_数据_37

③.配置插入更新组件,需要指定目标表(需要先创建)

Kettle_SQL_38

④.执行SQL创建表

Kettle_数据流图_39

⑤.保存并运行,会发现能同步数据到tb_user1中了,但是由于t_user表中中张三数据有两条,ID相同,所以只显示了一条

Kettle_数据流图_40

修改t_user表中李四的age字段修改为26,然后执行转换,发现数据t_user1中李四的age被修改为了26

Kettle_SQL_41

4.2.switch/case组件

4.2.1.需求说明

需求:将 tb_user 表中的数据,抽取并按照性别输入到 3 个不同的 Excel 文件中

Kettle_数据_42

效果如下:

Kettle_数据_43

4.2.2.实现

①.创建数据流图

Kettle_数据流图_44

②.新建后,男和女Excel输出选择,create a new target case for this step(为此步骤创建一个新的目标案例),而其他Excel则输出选择The default target step

Kettle_数据_45

③.配置表输入组件

Kettle_数据_46

④.配置switch组件

Kettle_数据流图_47

⑤.配置excel输出组件

  • Excel输出-男

Kettle_SQL_48

Kettle_SQL_49

  • Excel输出-女

Kettle_SQL_50

Kettle_SQL_51

  • Excel输出-其他

Kettle_数据流图_52

Kettle_数据_53

⑥.取消数据库连接设置中取消勾选Supports the timestamp data type,用于支持timestamp 类型

Kettle_SQL_54

⑦.保存并执行转换,查看生成的Excel

Kettle_数据_55

4.3.SQL脚本组件

SQL 脚本组件 是一种用于执行 SQL 查询的工具,通常用于以下用途:

  • 从多个数据源中提取数据。
  • 在数据转换前清理或预处理数据库中的数据。
  • 将转换后的数据加载回数据库。
  • 对数据表执行批量更新或删除操作。

4.3.1.需求说明

需求:使用Kettle执行SQL脚本,将 t_user1 表中的数据清空

Kettle_数据流图_56

4.3.2.Kettle的SQL脚本

①.创建数据流图

Kettle_数据流图_57

②.配置SQL组件

Kettle_SQL_58

③.保存并执行,会发现t_user1表中的数据已经被清除掉了

Kettle_数据_59

五、转换参数设置

5.1.需求

需求:使用Kettle执行SQL脚本删除 tb_user1 表中指定省份的用户,启动时可以指定具体省份

Kettle_SQL_60

关键要点:

  • 配置 Kettle 转换参数
  • 双击转换文件空白处,在弹出的窗口选择命名参数,进行设置即可,参数在这个转换的组件中可以被使用。
  • 组件中使用参数的语法:${参数名}
  • 执行SQL脚本组件
  • 配置执行的 SQL 语句,使用转换参数

5.2.详细设置

①.配置转换参数

Kettle_数据_61

Kettle_SQL_62

②.配置sql组件: 转换参数使用格式 **${参数名}**

Kettle_数据流图_63

③.保存并执行(执行时需要设置参数值)

Kettle_数据_64

④.执行会发现北京市的数据被删除了

Kettle_SQL_65

六、作业(job)开发

"作业(Job)" 是一种控制流程的机制,主要用于管理和调度一系列步骤和任务的执行顺序。它与"转换(Transformation)"不同,后者专注于具体的数据处理,而"作业"则更加侧重于流程控制和任务调度。

6.1.现实问题

问题:如果kettle的转换,需要定期执行该怎么办?

Kettle_数据流图_66

注意:利用之前创建的Excel输出到表的转换设置定时执行

作业(job)的作用,就是可以把多个转换组合起来,并且可以根据需要设置定时周期性执行。

6.2.实现

创建数据流图,配置转换(加载之前的的Excel输出到表的转换)

Kettle_数据_67

设置定时策略

Kettle_数据_68

保存并启动,会发现这个定时任务一直在执行,每隔5s钟就会执行一个转换

Kettle_SQL_69

表中的数据在不断地增加

Kettle_数据流图_70

七、email邮箱服务

在我们上个章节中通过通过“作业”实现了定时任务将Excel表中数据添加到表中,可以在之前的基础上,添加任务成功或者失败的时候发送邮件通知

7.1.创建数据流图

在之前的基础添加发送邮件

Kettle_数据流图_71

7.2.设置发送邮件服务器

这里以126邮箱设置为例进行说明

下面对于126邮箱进行配置,后面座位Jenkins发送邮件的服务邮箱使用

7.2.1.登录网页版邮箱(https://mail.126.com/),进入126邮箱首页。

Kettle_数据流图_72

7.2.2.点击上方“设置”,选择“POP3/SMTP/IMAP”选项。

Kettle_数据_73

7.2.3.在新弹出的弹窗中,点击“继续开启”。

扫码页面您可以选择扫码发送短信,或者点击下方“手动发送短信”。

Kettle_数据流图_74

7.2.5.点击“我已发送”后,如果系统检测到用户成功发送短信,即获取到授权码。

这个授权码你需要复制保存下来,以供后续使用

Kettle_数据流图_75

7.3.设置发送邮件

7.3.1.设置成功邮件

对于成功邮件进行设置:添加收件人和发件人邮箱

Kettle_数据流图_76

设置邮箱服务器和发件人信息,注意密码哪里需要使用授权码

Kettle_数据流图_77

设置发送的邮件内容

Kettle_数据流图_78

7.3.2.设置失败邮件

跟成功邮件只有发送的内容不一致,故而未在列出

Kettle_SQL_79

7.4.保存执行

这里修改定时任务,设置每天17:20定时执行任务

Kettle_SQL_80

然后运行,会发现任务执行后,收件人能收到邮件

Kettle_数据_81