ETL处理工具-kettle使用

发布时间 2023-11-10 11:53:54作者: 七落安歌

ETL处理工具-kettle使用

一、Kettle介绍

kettle是一个ETL工具,ETL的全称为(Extract-Transform-Load),用来描述将数据从来源端经过 抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将业务系统分散、零乱、标准不统一的数据整合到一起。

image-20231109102403592

数据仓库是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建的,对多样的业务数据进行筛选与整合。它为企业提供一定的BI能力,指导业务流程改进,监视时间成本、质量以及控制。

image-20231109102515818

Kettle是什么

  • Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装

  • Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出

  • Kettle允许管理来自不同数据库的数据,提供一个图形化的用户环境来描述想做什么,无需关心

使用kettle之前必须先安装好JDK,配置好系统环境变量

使用kettle操作mysql数据库,也配置好mysql驱动包,在kettle的lib文件夹中导入mysql驱动包

二、txt文件抽取到excel

需求:将一个txt文件中内容抽取到excel文件中

txt文件内容:

image-20231109104033097

1、首先构建kettle数据流图:用可视化操作像排积木的方式,把要做的事情排列出来

image-20231109104451265

新建一个转换,在输入一栏选择文本文件输入,在输出一栏选择excel输出,按住shift使用鼠标将两个组件连接起来

2、配置文本文件输入组件:

image-20231109105111935

注意:选择好文本文件之后一定要点击添加,否则将不会抽取数据

image-20231109105523360

在内容一栏,设置编码格式以及分隔符,分割符是文本文件分割数据的符号,注意区分中文和英文符号

image-20231109105823191

在字段一栏,点击获取字段可以获取txt文件中的所有字段(第一行数据);点击预览记录查看是否能读取txt文件中数据,最后点击确定保存

3、配置excel输出组件

image-20231109110423494

这里设置将生成的excel输出到指定路径

image-20231109110953317

点击获取字段,然后可以设置数据的输出格式以及类型

image-20231109111223819

保存并执行转换;保存这个转换我们下次可以继续使用,不需要重新配置,保存的是一个ktr文件。

执行结束后,在刚刚设置保存的指定路径可以找到输出的excel文件,点击可以查看从txt抽取的数据

三、Kettle实现excel输入-MySQL表输出

1、使用MySQL,首先需要先要创建一个数据库

create database if not exists kettle_demo default charset=utf8;

2、kettle中的lib目录中加入mysql的jar文件

3、构建kettle数据流图(输入选择excel输入,输出选择表输出)
img
4、配置excel输入组件:

双击Excel输入组件,点击浏览按钮,选择要抽取的Excel文件,并点击添加按钮,将选中的excel文件移动到选中的文件区域

img

点击工作表选项,选中Sheet1, 点击>, 将Sheet1移动到右侧:

img
在这里还可以设置输入文件的数据格式:
img
5、配置表输出组件:
img

依次配置目标数据库的ip地址, 数据库名称, 用户名,密码, 然后点击测试,成功后点确定:

img

创建目标表:

img

执行SQL语句创建目标表:

img

  • 执行完sql语句之后,我们在datagrip中可以查看到一个tb_user数据表了,但是里面还没存放抽取的数据。

6、在确认保存表输出组件后,点击保存(ctrl+ s)转换,保存到指定路径。最后点击播放键执行文件。
img

7、在数据库中查看tb_user表,数据已经成功入库了

四、共享数据库连接

在后续的Kettle中,我们需要多次用到上面的数据库连接,为了避免每次都要创建与配置数据库连接,Kettle中提供了数据库共享功能。

点击主对象树,选择转换中DB连接,找到刚刚配置好的数据库,双击打开选择共享,当数据库的字体变黑色了,说明已经共享成功。

image-20231109155214827

  • 在新建的转换中,都可以看到该数据库连接了。这样就避免了每次我们都需要配置该数据库连接了。

五、Kettle实现mysql表1到mysql表2的转换

需求:要将MySQL数据库中的 t_user 表中的数据抽取出来,装载到另外一张表 t_user2中

1、构建数据流图

image-20231109155754873

2、配置表输入组件:

image-20231109160105553

3、配置表输出组件:

image-20231109160539970

4、目标表结构创建:

image-20231109160858995

点击执行之后我们可以在mysql中查看到目标表的表结构

5、最后保存转换并点击运行,我们就可以在mysql中查询到插入的数据

六、Kettle的插入更新组件

插入/更新组件能够将Kettle抽取的数据,与某个表的数据进行对比,如果数据存在就更新,不存在就插入。

1、构建数据流图

image-20231109164132640

2、配置表输入组件

image-20231109164122338

3、配置更新插入组件

image-20231109163631453

4、执行sql语句创建表结构

image-20231109163911148

5、确定,保存,执行生成数据

  • 上述转换实际存在缺陷:只能在目标表中同步源表的插入/更新的数据,而源表删除的数据,目标表不会删除,即并没完全同步(目标表和源表完全一致)。若需要完全同步,可使用“数据同步”输出。

扩展:裁剪表

image-20231109164451147

裁剪表到底是干什么?

简单来说:就是使用truncate 数据表在执行任务前,先把数据表清空,然后再把Excel中的文件内容导入到MySQL的里面

七、Kettle中的switch/case组件

switch/case组件就是实现分组输出的功能,比如按性别分组将数据输出到男女两个表中。

switch/case组件在核心对象树中的流程一栏中可以找到

1、创建数据流图

image-20231109165039065

组件连接方式:

image-20231109165418212

2、配置表输入组件(与上述一样)

3、switch/case组件配置

此处要指定,按照性别来判断输出到Excel文件。需要设置 Switch字段为gender,在Case值列表中将值分别改为男、女。如果gender是男的话,则将数据装载到 Excel输出 - 男,如果gender是女的话,将数据装载到 Excel输出 - 女。

image-20231109165852171

4、配置excel表格输出组件(与上述一致)

5、保存,执行

八、Kettle的SQL脚本

需求:清空mysql_kettle_test中的t_user1中的所有数据。

  • 创建数据流图

image-20210830095131269

  • 配置SQL组件

image-20210830095157167

  • 保存并执行

九、设置转换命名参数

需求:让Kettle帮助我们删除指定省份的用户,具体删除哪个省份不确定,由执行Kettle时指定。

我们可以使用执行SQL脚本组件来删除某个省份的用户。

  • 配置转换参数(双击空白处)

image-20210830100426235

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

image-20210830100257706

  • 保存并执行(执行时需要设置参数值)--删除省份为北京市的数据

image-20210830100643037

案例:使用带参数的SQL脚本创建一个数据库的执行过程

1、构建数据流图:

image-20231110111724983

2、配置SQL脚本:

image-20231110111951483

3、配置转换属性(双击空白处打开)

image-20231110112151228

4、保存并执行SQL脚本

image-20231110112408250

十、Kettle的作业(job)

Job作业开发,主要实现定时任务,可以将之前开发后的抽取方案进行定时配置。

需求:每5秒钟将Excel中的数据抽取并装载到MySQL中

  • 创建数据流图

    创建一个新的作业,在通用选项中选择start、转换、成功,并将他们连接起来。

  • 配置转换

image-20210830105804774

在transformation选择我们之前已经配置好的转换

  • 配置start

image-20210830110325891

  • 保存并启动

image-20210830111044152