第三章 可视化ETL平台——Kettle
课程目标
能够理解Kettle的主要用途
能够搭建Kettle开发环境
能够掌握Kettle输入组件的使用
能够掌握Kettle输出组件的使用
能够掌握Kettle转换组件的使用
1. Kettle介绍
1.1 数据仓库
数据仓库是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建的,对多样的业务数据进行筛选与整合。它为企业提供一定的BI能力,指导业务流程改进,监视时间成本、质量以及控制。
重点
数据仓库是专门用来进行数据分析的,它可以是一个MySQL,也可以是Oracle,也可以将来后面大数据会学习到的Hive等。
1.2 ETL
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经(extrac过抽取t)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将企业中分散、零乱、标准不统一的数据整合到一起。
1.3 Kettle介绍
对于企业或行业应用来说,经常会遇到各种数据的处理,转换,迁移,掌握一种etl工具的使用,必不可少,这里要学习的ETL工具是——Kettle,现在已经更名为PDI。
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需
安装
Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指
定的格式流出
Kettle允许管理来自不同数据库的数据,提供一个图形化的用户环境来描述想做什么,无需关心
怎么做
2. windows安装Kettle
2.1 安装JDK
要在windows系统中使用Kettle,必须先安装好JDK。
2.1.1 安装JDK软件
截图 步骤
1.找到资料/安装包中的jdk软件安装包,双击打开。
2.点击 「下一步」按钮
3.将路径修改为 c:optjdk1.8.0_241,点击「确定」按钮
4.点击「下一步」,等待进度条完成。
5.在新弹出的窗口中,点击「更改」按钮,将JRE的安装路径修改为 c:/opt/jre1.8.0_241。
注:碰到以下错误可以忽略(是因为机器名中包含了一些JDK不识别的支付)
6.点击「关闭」完成安装。
2.1.2 配置环境变量
要让JDK环境生效,需要配置下系统的环境变量。此处大家先无需关心环境变量的意义,先按照下面的步骤配置好。
截图 步骤
1.打开我的电脑,右键点击「此电脑」。
2.点击「高级系统设置」。
3.在弹出窗口中点击「高级」选项卡中的「环境变量」。
4.点击「新建...」按钮添加环境变量。
5.变量名写入:JAVA_HOME,变量值设置为之前安装JDK的路径:c:optjdk1.8.0_241
6.点击「确定」按钮保存。
7.将JAVA_HOME添加都Path中
2.2 安装Kettle
Kettle的安装非常简单,只需要下载后解压即可。但前提需要安装好JDK。
1.下载Kettle(可以在资料/安装包/pdi-ce-9.0.0.0-423.zip)
2.解压Kettle(解压到非中文目录)
3.进入解压后的文件夹data-integration,双击Spoon.bat,启动kettle
注:kettle也可以到可以到https://sourceforge.net/projects/pentaho/files/下载
3. 快速入门
3.1 需求
有一个txt文件,内容如下:
id,name,age,gender,province,city,region,phone,birthday,hobby,register_date
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
267456198006210000,李四,25,1,河南省,郑州市,郑东新区,18681109672,1980-6-21,音乐;阅读;旅游,2017-4-7 9:14
892456199007203000,王五,24,1,湖北省,武汉市,汉阳区,18798009102,1990-7-20,写代码;读代码;算法,2016-6-8 7:34
492456198712198000,赵六,26,2,陕西省,西安市,莲湖区,18189189195,1987-12-19,购物;旅游,2016-1-9 19:15
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
我们需要使用Kettle将这个文件中的数据抽取出来,然后装载到Excel中。
id name age gender province city region phone birthday hobby register_date
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43
267456198006210000 李四 25 1 河南省 郑州市 郑东新区 18681109672 1980-06-21 音乐;阅读;旅游 2017-04-07 09:14:13
892456199007203000 王五 24 1 湖北省 武汉市 汉阳区 18798009102 1990-07-20 写代码;读代码;算法 2016-06-08 07:34:23
492456198712198000 赵六 26 2 陕西省 西安市 莲湖区 18189189195 1987-12-19 购物;旅游 2016-01-09 19:15:53
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43
3.2 Kettle的基本开发步骤
1.要使用Kettle来进行数据处理,首先要做的是构建Kettle的数据流图,也就是用可视化操作像排积木的方式,把要做的事情排列出来。
2.配置数据流图中的各个组件
3.保存并启动执行
3.3 构建Kettle数据流图
效果图:
开发步骤
1.将左边的核心对象中的 输入文件夹下的文本文件输入 拖拽到中间空白区域。
2.从输出文件夹中将Excel输出 组件拖拽到中间空白区域。
3.按住Shift键点击 文本文件输入组件,移动鼠标到Excel输出,然后释放鼠标,这样就可以将两个组件连接到一起。
3.3.1 配置文件文本输入组件
1.双击文本文件输入组件,在弹出窗口中点击「浏览」按钮。
2.选择 资料/测试数据 中的 user.txt 文件
3.点击「增加」按钮,将文件加入到要抽取的数据中来。注意:不点添加按钮,将不会抽取数据。
4.点击「内容」选项卡,将分隔符修改为逗号(注意是英文状态的逗号),将编码方式修改为:UTF-8。
5.点击「字段」选项卡,再点击「获取字段」按钮,可以读取到txt文件中的所有字段。
6.点击「预览记录」按钮,查看Kettle是否能够读取到 user.txt 中的数据。
7.点击「确定」按钮保存。
3.3.2 配置Excel输出组件
配置好了抽取 user.txt 组件后,接下来要配置将数据装载到Excel的组件。
1.双击 Excel输出组件,在弹出窗口中点击「浏览」按钮。
2.点击「内容」选项卡,设置要将Excel文件输出到哪儿的路径,然后点击确定,再删除文件后缀xls
3.点击「字段」选项卡,再点击「获取字段」,将age的格式设置为0,表示只输出不带小数点的数字。
3.4 保存并启动执行
1.点击工具条上方的保存按钮,或者按快捷键Ctrl +S。
2.Kettle会提示让我们保存该数据流图(转换),我们保存到一个指定位置即可,然后点击「保存」按钮即可。
3.点击工具栏上的播放按钮启动执行。
4.执行完后,我们可以到指定的位置,发现Excel文件已经生成,可以看到里面的内容。
4. 程序员小姐姐的烦恼
4.1 问题来了
公司来了有个漂亮的程序员小姐姐叫小花,她刚大学毕业,项目经理安排她这样一项工作:
有这样一个Excel文件:user.xls,这个文件内容是这样的。
项目经理想要让她将这些数据导入到MySQL中来。
小花刚来,急得团团转,不知所措,机会来了。
4.2 数据抽取的需求
需要从Excel中将这些用户的数据,使用Kettle抽取到MySQL中。
4.3 准备工作
为了完成本案例,我们需要准备以下几件工作:
4.3.1 找到小姐姐的Excel文件
在资料/测试数据 文件夹中可以找到user.xlsx文件
4.3.2 在MySQL数据库中创建数据库
为了方便将Excel文件中的数据抽取到MySQL中,我们必须要创建一个名字叫kettle_demo的数据库,后续Excel中的数据会装载到该数据库的表中。
1.在DataGrip中右键点击MySQL连接,选择New/Schema
2.在创建数据库的对话框中输入kettle_demo,点击Execute
3.我们可以看到kettle_demo数据库名称就已经创建好了
4.3.3 在kettle中加载MySQL驱动
Kettle要想连接到MySQL,必须要安装一个MySQL的驱动,就好比我们装完操作系统要安装显卡驱动一样。加载MySQL驱动只需以下两步:
1.将资料中的 MySQL jdbc 驱动包mysql-connector-java-5.1.47.jar和mysql-connector-java-8.0.13.jar导入到 data-integration/lib 中
3.重启Kettle即可
4.4 构建Kettle数据流图
效果图:
开发步骤
1.在Kettle中创建一个转换(两种方式)
(1)点击菜单:文件/新建/转换
(2)点击按钮:
(3)快捷键:Ctrl + N
2.从左边的核心对象中,分别拖入「输入/Excel输入」、「输出/表输出」两个组件到中间区域
3.然后按住Shift键,在 「Excel输入」组件上点击鼠标左键,拖动到「表输出」组件上,连接两个组件,这样数据流图就构建好了
4.5 配置Kettle数据流图中的组件
刚刚已经把数据流图构建好了,那么Kettle就可以将Excel文件中的数据抽取到MySQL中吗?
显然是不行的。Kettle根本不知道要将哪个Excel文件中的数据,抽取到哪个MySQL中。我们需要配置这两个组件,告诉Kettle从哪个Excel文件中抽取,以及将数据装载到哪个MySQL中。
4.5.1 配置Excel输入组件
1.双击Excel输入组件,会弹出一个对话框,我们可以再该对话框中配置该组件
2.* 因为此处要抽取的Excel文件为Excel 2007版本,所以指定表格类型为Excel 2007 XLSX (Apache POI)
3.随后我们需要找到要抽取的那个Excel文件,点击「浏览」按钮,找到 「资料/测试数据/user.xlsx」文件
4.再点击旁边的「增加」按钮,切记:一定要点击增加按钮哦!否则没有效果!
5.在弹出菜单中,点击「Sheet1」工作簿,并点击 「>」 按钮移动到右边。
6.点击「字段」选项卡,点击「获取来自头部数据的字段...」按钮,Kettle会从Excel中读取第一行字段名称。
7.将 age 字段的格式设置为#,register_date的格式设置为 yyyy-MM-dd HH:mm:ss。
8.点击「预览记录」按钮查看抽取到的数据。
9.点击「确定」按钮保存。
4.5.2 配置MySQL组件
4.5.2.1 创建数据库连接
要使用Kettle操作MySQL,必须要建立Kettle与MySQL的连接,否则Kettle也不知道操作哪个MySQL库。
1.双击「表输入」组件,会自动弹出配置窗口,点击「新建」按钮
2.配置MySQL连接
(1)输入连接名称,此处用mysql_开头,数据库名称kettle_demo为结尾
(2)在连接类型列表中,选择MySQL
(3)输入连接方式:
(4)输入MySQL的连接参数
3.点击测试按钮,测试Kettle是否能够正确连接到MySQL
4.点击确认保存,到这里数据库连接就应该创建好了。
4.5.2.2 使用Kettle在MySQL中自动创建表
要保存数据到MySQL,必须先要创建好表。那么,我们是否需要自己手动在MySQL中创建一个表,用来保存Excel中抽取过来的数据呢?
答案是:不需要。Kettle可以自动为我们在MySQL中创建表。
1.输入目标表的名称为:t_user,后续Kettle将在MySQL中创建一张名为 t_user 的表格。
2.点击下方的「SQL」按钮,可以看到Kettle会自动帮助我们生成MySQL创建表的SQL语句
将age、gender字段类型设置为INT
将 id 改为 primary key 防止出现重复插入的情况。
3.点击执行按钮。Kettle将会让MySQL执行该SQL脚本。执行完后,可以在DataGrip中刷新在数据库,可以查看到Kettle帮助我们创建的t_user表。
4.点击「确定」按钮,保存配置
4.6 保存并启动执行Kettle转换
数据流图中的组件都已经准备好了,接下来就可以开始执行Kettle转换了。
1.点击保存按钮保存转换。
2.点击工具栏上的播放按钮启动执行。
3.执行成功后,可以看到以下界面。组件上都显示了绿色的对号,执行结果中可以看到:转换完成!日志,说明Kettle的转换已经执行成功!!
4.7 确认执行结果
Kettle是否已经帮助我们将Excel中的数据抽取并装载到MySQL呢?我们需要到MySQL中看一看,t_user表中是否有数据呢。
在DataGrip中双击 t_user 表格,可以看到Excel中的数据都已经抽取到了MySQL。
到这里,恭喜你,程序员小姐姐小花的问题你已经帮她解决了,晚上让她请你吃个饭吧。
5. Transformation(转换)开发
5.1 共享数据库连接
在后续的Kettle中,我们需要多次用到上面的数据库连接。那么是不是每一次都要创建数据库连接呢?这样就比较麻烦了。在Kettle中,可以将一个数据库共享,这样其他的Kettle转换就都可以复用该数据库连接了。
1.在转换中,点击「主对象树」,点击[DB连接]右键新建数据库连接(如果连接已经存在,则无需创建)
2.右键单击需要的数据库连接,选择「共享」
3.发现刚刚选择的数据库连接已经变成黑体字,说明已经共享成功。
我们兴奋地发现,在新建的转换中,都可以看到该数据库连接了。这样就避免了每次我们都需要配置该数据库连接了。
5.2 表输入组件
5.2.1 需求
前面我们已经将Excel中数据抽取到了MySQL的t_user表中。
现在有了新需求,要将MySQL数据库中的 t_user 表中的数据抽取出来,装载到另外一张表 t_user1中。
5.2.2 构建Kettle数据流图
1.从 核心对象的输入组件中,将「表输入」组件拖拽到中间的空白处。
2.从输出中将「 表输出」组件拖拽到中间空白处。
3.安装Shift键,并鼠标左键点击表输入组件,并拉动鼠标,移动到表输出组件,松开鼠标。
5.2.3 配置Kettle数据流图中的组件
接下来,需要指定,数据从哪个数据库中读取数据。
5.2.3.1 配置表输入组件
1.双击表输入组件,在弹出对话框中选择「获取SQL查询语句」。
2.选择 t_user 表,点击确定。
3.在弹出对话框中选择「否」。
4.点击「预览」按钮,查看是否能够从MySQL读取数据。
5.可以看到,Kettle中可以查看到 t_user 表中的数据。
5.2.3.2 配置表输出组件
1.双击表输出组件,在目标表中输入 t_user1
2.点击「SQL」按钮,让Kettle中自动创建表结构。
3.可以看到,Kettle自动为我们生成了创建表的SQL语句。
4.我们可以到DataGrip中看到 t_user1 已经创建,但表中没有任何数据。
5.点击「确定」按钮保存。
5.2.4 保存并启动执行
1.点击保存按钮保存该转换。
2.点击播放按钮执行,如果看到每个组件上都打上了绿色的对号,说明转换已经执行成功。
3.再打开DataGrip,刷新下表格,可以看到数据已经加载到 t_user1 中来了。
5.3 插入/更新组件
5.3.1 组件介绍
插入/更新组件能够将Kettle抽取的数据,与某个表的数据进行对比,如果数据存在就更新,不存在就插入。
5.3.2 需求
修改 t_user中的张三这一行数据,修改age为22
同时,我们想要使用Kettle将 t_user1 中的张三这一行数据的age也修改为22。
5.3.3 测试之前开发的t_user_to_t_user1转换
我们是否能够使用 t_user_to_t_user1.ktr转换来进行数据的同步呢?
直接执行转换,我们发现,Kettle又将t_user表中的数据新增到了t_user1表中
说明,表输入组件根本无法同步数据,只是将抽取到的数据,装载到指定的表中。
5.3.4 恢复数据
为了方便后续的测试,我们需要恢复 t_user1中的数据。
1.清空 t_user1 中的数据
2.点击OK执行清空
3.点击刷新按钮,发现数据已经清空
4.重新运行 t_user_to_t_user1.ktr 转换
5.并将张三对应的年龄恢复为20
5.3.5 构建Kettle数据流图
效果图:
开发步骤
1.拖入一个表输入组件,用于读取 t_user 表中的数据。
2.从 输出中拖入 「插入/更新」组件。
3.将两个组件连接起来。
5.3.6 配置Kettle数据流图中的组件
5.3.6.1 配置表输入组件
1.双击表输入组件,点击获取SQL查询语句,选择 t_user1 表。
2.点击 预览按钮,查看Kettle是否能够从MySQL中读取数据。
5.3.6.2 配置插入/更新组件
1.双击 插入/更新 组件,点击浏览按钮,找到 t_user1 表。
2.添加用来查询的关键字,设置表字段为:id,比较符为:=,流里的字段为:id。
3.点击「获取和更新字段」,这样Kettle将会自动更新、或插入所有的字段。
5.3.7 保存并启动执行Kettle转换
1.保存并启动该Kettle转换。
2.执行完后,打开DataGrip刷新 t_user1 表格,发现张三的年龄已经更新为22。
注:我们可以往 t_user 中添加一条数据,然后再执行Kettle转换,再用DataGrip查看 t_user1 表中是否也插入了一条数据。
5.4 删除组件
删除组件能够按照指定条件,将表中的数据删除。
5.4.1 需求
有以下一个文本文件,文本文件包含了要删除的两个用户id:
id
392456197008193000
267456198006210000
需要使用Kettle将文本文件中两个ID对应的t_user1表的数据删除。
5.4.2 构建Kettle数据流图
效果图:
1.将文本文件输入组件拖拽到中间的空白区域。
2.再从 输出文件夹中输出一个「删除」组件。
3.按住Shift键,将两个组件连接到一起。
5.4.3 配置Kettle数据流图组件
5.4.3.1 配置文本文件输入组件
1.双击文本文件输入组件,点击浏览,找到 资料/测试数据 中的 要删除的user_id.txt 文件,再点击OK按钮。
2.点击「增加」按钮。
3.再点击「字段」选项卡,点击「获取字段」,将文本文件中的字段读取出来。
4.点击预览记录按钮,可以查看到Kettle能够读取到文本文件中的内容。
5.4.3.2 配置删除组件
1.双击删除组件,然后点击浏览按钮,选择 t_user1 表。
2.在查询值所需的关键字,设置要根据什么条件删除数据。这里表字段设置为:id,比较符设置为:=,流里的字段1设置为:id。
5.4.4 保存并启动运行
我们发现,在DataGrip中,指定ID的行已经被删除了。
5.5 排序记录组件
5.5.1 组件介绍
排序组件可以将Kettle数据流中的数据进行排序,可以指定升序、还是降序排列。
5.5.2 需求
使用Kettle将t_user表中的用户数据,按照年龄升序排序,并将排序后的数据装载到Excel
5.5.3 构建Kettle数据流图
效果图:
开发步骤
1.将表输入组件拖拽到中间空白区域。
2.将转换文件夹中的「排序记录」拖拽到中间的空白区域。
3.再将输出文件夹中的Excel输出组件拖拽到中间空白区域。
4.按住Shift键将组件连接起来。
5.5.4 配置Kettle数据流图组件
5.5.4.1 配置表输入组件
1.双击表输入组件,选择数据库连接,然后点击获取SQL查询语句。再预览数据查看是否能够读取到 t_user 中的数据。
5.5.4.2 配置排序记录组件
双击 排序记录 组件,设置字段名称为 age,升序选择「是」,这样该组件将会以 age 字段来进行升序排序。
5.5.4.3 配置Excel输出组件
1.双击Excel输出组件,点击浏览按钮,选择要将Excel文件输出到哪个位置。
2.点击「获取字段」,并将age的格式设置为0。
5.5.5 保存并启动运行
打开Excel,发现所有数据都是按照年龄升序排序的。
5.6 switch/case组件
5.6.1 机智的体育老师——条件判断
有一天,体育老师要让班上的男女同学分别排成两队。但这个班上还有几名同学,很特殊——他们是蜘蛛!!所以,机智的体育老师需要把他们排成三队,男同学一队,女同学一队,蜘蛛一队。
体育老师要做一件非常重要的事情:判断学生是男孩还是女孩、或者是蜘蛛,然后让他们各自到指定的队伍中。
体育老师做的事情,我们同样也会在Kettle中会经常用来。在Kettle中,switch/case组件可以来做类似于体育老师要做的事情——判断。
5.6.2 组件介绍
switch/case提供了一种条件判断的实现。
5.6.3 需求
从 t_user 表中读取所有用户数据,我们需要将性别为男的用户导出到一个Excel、性别为女的导出到另外一个Excel。
5.6.4 构建Kettle数据流图
效果图:
开发步骤
1.将表输入组件拖拽到中间的空白区域。
2.从流程文件夹中将 Switch/case 组件拖拽到中间的空白区域。
3.再分别拖入两个Excel输出组件。
4.将组件按照下图方式连接起来。
5.6.5 配置Kettle数据流图组件
5.6.5.1 配置表输入组件
1.双击表输入组件,指定从 t_user 表中抽取数据。
5.6.5.2 配置switch/case组件
1.此处要指定,按照性别来判断输出到Excel文件。需要设置 Switch字段为gender,在Case值列表中将值分别改为男、女。如果gender是男的话,则将数据装载到 Excel输出 - 男,如果gender是女的话,将数据装载到 Excel输出 - 女。
5.6.5.3 配置Excel输出组件
1.双击Excel输出组件,分别指定输出到指定的文件夹中。
5.6.6 启动执行
Kettle会自动生成两个Excel文件,一个文件保存了性别为男的所有用户,另一个文件保存了性别为女的所有用户。
5.7 SQL脚本组件
接下来,我们来讲解一个高级用法。在实际开发中,也经常容易使用得到。假设我们有一段SQL脚本,想要用Kettle来执行,此时该使用哪个组件呢?
5.7.1 组件介绍
执行SQL脚本组件,可以让Kettle执行一段SQL脚本。我们可以利用它来自动执行某些操作。
5.7.2 需求
使用Kettle执行SQL脚本,将 t_user1 表中的数据清空。
5.7.3 构建Kettle数据流图
5.7.4 配置Kettle数据流图组件参数
5.7.5 启动执行
我们发现,t_user1中的数据已经被完全清除掉了。说明:Kettle已经帮助我们执行了SQL脚本
5.8 设置转换参数
5.8.1 需求
让Kettle帮助我们删除指定省份的用户,具体删除哪个省份不确定,由执行Kettle时指定。
首先我们可以使用执行SQL脚本组件来删除某个省份的用户,类似下图:
delete from t_user1 where province = '北京市'
但如果把北京市写在执行SQL脚本组件中,那么每次删除的都是北京市的用户。而此处的需求是,要执行Kettle转换时,我们需要手动来指定要删除哪个省份的用户。此时就需要用到Kettle中的参数了。
5.8.2 参数的使用方法
双击Kettle转换的空白处,会弹出转换属性窗口。我们可以在属性窗口中找到命名参数选项卡,在里面配置Kettle转换所需要的参数。例如:下图设置了一个叫做province的参数
5.8.3 在SQL脚本组件中使用Kettle转换参数
delete from t_user1 where province = '${province}'
通过 ${province} 可以应用Kettle配置的转换参数,而且一定要勾选上:「变量转换」
5.8.4 运行带参数的转换
在运行转换时,可以指定参数的值,例如:此处指定要删除的城市为北京市。
运行完后,我们发现:北京市的用户已经被删除了。
再来测试下删除河南省的用户:
同样,我们发现当执行完Kettle转换后,河南省的用户也被删除了。
6. JOB(作业)开发
6.1 程序员小姐姐的第二次邂逅——JOB
前几天帮助程序员小姐姐小花解决了使用Kettle从Excel中抽取数据到MySQL问题,小姐姐特别高兴,请你吃了一顿饭,好一顿魂牵梦绕。小姐姐好几天都没有联系了,今天小姐姐又抱着电脑来找你了。你知道,又有新的问题来了。
项目经理要求小姐姐小花能够每5秒钟执行一次Kettle转换,也就是每5秒钟将Excel中的数据抽取并装载到MySQL中。
怎么实现呢?
要实现这个需求,我们需要学习Kettle的JOB,也就是作业。
Kettle中的作业(job)定义了转换应该如何执行,可以配置转换来进行定时执行。
6.2 JOB定时任务开发
6.2.1 需求
每5秒钟执行一次Kettle转换,也就是每5秒钟将Excel中的数据抽取并装载到MySQL中
6.2.2 创建作业
6.2.3 构建作业流组件图
效果图:
开发步骤
1.将核心对象中,通用文件夹下的 Start 组件拖拽到中间的空白区域。
2.将 通用文件夹的「转换」组件拖拽到中间的空白区域。
3.将通用文件夹中的「成功」组件拖拽到中间的空白区域。
4.同样使用Shift键,将组件都连接起来。
6.2.4 配置作业流图组件
6.2.4.1 配置转换组件
配置转换这里选择作业中要执行的转换,此处选择之前开发好的excel_to_mysql.ktr即可
注意:此处要先保存作业,然后再配置转换。
6.2.4.2 配置Start启动组件
我们需要在Start组件中,配置定时执行。
6.2.5 启动运行作业
点击播放箭头启动作业,并观察数据库中的数据是否会5秒钟增加一次。
我们看到数据每隔5秒钟就会增加一次。
7. Kettle的Linux系统部署
7.1 Linux安装Kettle
课程提供的Linux系统中已经安装好了Kettle,可以直接使用,kettle的安装文档请参考文档:06-安装Kettle.doc
7.2 Pan转换执行引擎
pan.sh可以用来在服务器中执行一个转换
pan.sh的命令行参数:
-version:显示版本信息
-file: 指定要运行的转换文件(XML文件)
-level: 设置日志级别(Basic,Detailed,Debug,Rowlevel,Error,Nothing)
-log: 指定日志文件
-param:key=value (该参数可以指定多个)
需求:
在Linux中,将 /root/kettle/user.txt数据抽取到 /root/kettle/out_user.xls 表格中
id,name,age,gender,province,city,region,phone,birthday,hobby,register_date
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
267456198006210000,李四,25,1,河南省,郑州市,郑东新区,18681109672,1980-6-21,音乐;阅读;旅游,2017-4-7 9:14
892456199007203000,王五,24,1,湖北省,武汉市,汉阳区,18798009102,1990-7-20,写代码;读代码;算法,2016-6-8 7:34
492456198712198000,赵六,26,2,陕西省,西安市,莲湖区,18189189195,1987-12-19,购物;旅游,2016-1-9 19:15
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44
实现步骤:
1、在 windows 中开发转换,将 文本文件数据抽取装载到Excel文件中
2、抽取路径参数,通过参数指定输入路径和输出路径
3、将转换配置保存为transform_param.ktr文件
4、将数据文件user.txt和转换文件transform_param.ktr都上传到 /root/kettle目录
5、使用 pan.sh 执行转换
cd /root/kettle
pan.sh -file transform_param.ktr -level Basic -param:input=/root/kettle/user.txt -param:output=/root/kettle/output_user
6、结果查看
在/root/kettle目录会生成输出文件output_user.xls
从Linux将该文件下载下来查看内容
7.3 Kitchen作业执行引擎
在Linux中对Kettle做Linux配置(和Windows相同,添加驱动jar包)
1、在Windows中开发作业
2、配置Start组件
2、配置转换组件
修改4.5中Excel存入Mysql的转换配置如下
将转换文件保存为2-excel-mysql.ktr中
作业转换配置如下:
${Internal.Entry.Current.Directory}/2-excel-mysql.ktr
1、配置作业命名参数
2、将作业配置到9-linux-job.kjb文件中,并将该job文件和user.xlsx文件上传到Linux服务器的/root/kettle/目录,
7、使用kitchen.sh执行作业
cd /root/kettle
kitchen.sh -file 9-linux-job.kjb -level Basic -param:input=/root/kettle/user.xlsx
打开可查看终端信息,发现每隔5秒钟执行一次转换任务
最后查看t_user表,发现每隔几秒,数据会增多几行数据
8. 问题1:错误连接数据库[MySQL]
报错:无法连接到数据库。
解决办法:
将MySQL的驱动包复制到 pdi-ce-8.2.0.0-342data-integrationlib 中,然后重启kettle