ETL处理工具-kettle使用
一、Kettle介绍
kettle是一个ETL工具,ETL的全称为(Extract-Transform-Load),用来描述将数据从来源端经过 抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将业务系统分散、零乱、标准不统一的数据整合到一起。
数据仓库是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建的,对多样的业务数据进行筛选与整合。它为企业提供一定的BI能力,指导业务流程改进,监视时间成本、质量以及控制。
Kettle是什么
-
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装
-
Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出
-
Kettle允许管理来自不同数据库的数据,提供一个图形化的用户环境来描述想做什么,无需关心
使用kettle之前必须先安装好JDK,配置好系统环境变量
使用kettle操作mysql数据库,也配置好mysql驱动包,在kettle的lib文件夹中导入mysql驱动包
二、txt文件抽取到excel
需求:将一个txt文件中内容抽取到excel文件中
txt文件内容:
1、首先构建kettle数据流图:用可视化操作像排积木的方式,把要做的事情排列出来
新建一个转换,在输入一栏选择文本文件输入,在输出一栏选择excel输出,按住shift使用鼠标将两个组件连接起来
2、配置文本文件输入组件:
注意:选择好文本文件之后一定要点击添加,否则将不会抽取数据
在内容一栏,设置编码格式以及分隔符,分割符是文本文件分割数据的符号,注意区分中文和英文符号
在字段一栏,点击获取字段可以获取txt文件中的所有字段(第一行数据);点击预览记录查看是否能读取txt文件中数据,最后点击确定保存
3、配置excel输出组件
这里设置将生成的excel输出到指定路径
点击获取字段,然后可以设置数据的输出格式以及类型
保存并执行转换;保存这个转换我们下次可以继续使用,不需要重新配置,保存的是一个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输入,输出选择表输出)
4、配置excel输入组件:
双击Excel输入组件,点击浏览按钮,选择要抽取的Excel文件,并点击添加按钮,将选中的excel文件移动到选中的文件区域
点击工作表选项,选中Sheet1, 点击>, 将Sheet1移动到右侧:
在这里还可以设置输入文件的数据格式:
5、配置表输出组件:
依次配置目标数据库的ip地址, 数据库名称, 用户名,密码, 然后点击测试,成功后点确定:
创建目标表:
执行SQL语句创建目标表:
- 执行完sql语句之后,我们在datagrip中可以查看到一个tb_user数据表了,但是里面还没存放抽取的数据。
6、在确认保存表输出组件后,点击保存(ctrl+ s)转换,保存到指定路径。最后点击播放键执行文件。
7、在数据库中查看tb_user表,数据已经成功入库了
四、共享数据库连接
在后续的Kettle中,我们需要多次用到上面的数据库连接,为了避免每次都要创建与配置数据库连接,Kettle中提供了数据库共享功能。
点击主对象树,选择转换中DB连接,找到刚刚配置好的数据库,双击打开选择共享,当数据库的字体变黑色了,说明已经共享成功。
- 在新建的转换中,都可以看到该数据库连接了。这样就避免了每次我们都需要配置该数据库连接了。
五、Kettle实现mysql表1到mysql表2的转换
需求:要将MySQL数据库中的 t_user 表中的数据抽取出来,装载到另外一张表 t_user2中
1、构建数据流图
2、配置表输入组件:
3、配置表输出组件:
4、目标表结构创建:
点击执行之后我们可以在mysql中查看到目标表的表结构
5、最后保存转换并点击运行,我们就可以在mysql中查询到插入的数据
六、Kettle的插入更新组件
插入/更新组件能够将Kettle抽取的数据,与某个表的数据进行对比,如果数据存在就更新,不存在就插入。
1、构建数据流图
2、配置表输入组件
3、配置更新插入组件
4、执行sql语句创建表结构
5、确定,保存,执行生成数据
- 上述转换实际存在缺陷:只能在目标表中同步源表的插入/更新的数据,而源表删除的数据,目标表不会删除,即并没完全同步(目标表和源表完全一致)。若需要完全同步,可使用“数据同步”输出。
扩展:裁剪表
裁剪表到底是干什么?
简单来说:就是使用truncate 数据表
在执行任务前,先把数据表清空,然后再把Excel中的文件内容导入到MySQL的里面
七、Kettle中的switch/case组件
switch/case组件就是实现分组输出的功能,比如按性别分组将数据输出到男女两个表中。
switch/case组件在核心对象树中的流程一栏中可以找到
1、创建数据流图
组件连接方式:
2、配置表输入组件(与上述一样)
3、switch/case组件配置
此处要指定,按照性别来判断输出到Excel文件。需要设置 Switch字段为gender,在Case值列表中将值分别改为男、女。如果gender是男的话,则将数据装载到 Excel输出 - 男,如果gender是女的话,将数据装载到 Excel输出 - 女。
4、配置excel表格输出组件(与上述一致)
5、保存,执行
八、Kettle的SQL脚本
需求:清空mysql_kettle_test中的t_user1中的所有数据。
- 创建数据流图
- 配置SQL组件
- 保存并执行
九、设置转换命名参数
需求:让Kettle帮助我们删除指定省份的用户,具体删除哪个省份不确定,由执行Kettle时指定。
我们可以使用执行SQL脚本组件来删除某个省份的用户。
- 配置转换参数(双击空白处)
- 配置sql组件: 转换参数使用格式 ${参数名}
- 保存并执行(执行时需要设置参数值)--删除省份为北京市的数据
案例:使用带参数的SQL脚本创建一个数据库的执行过程
1、构建数据流图:
2、配置SQL脚本:
3、配置转换属性(双击空白处打开)
4、保存并执行SQL脚本
十、Kettle的作业(job)
Job作业开发,主要实现定时任务,可以将之前开发后的抽取方案进行定时配置。
需求:每5秒钟将Excel中的数据抽取并装载到MySQL中
-
创建数据流图
创建一个新的作业,在通用选项中选择start、转换、成功,并将他们连接起来。
-
配置转换
在transformation选择我们之前已经配置好的转换
- 配置start
- 保存并启动