目录
第1章 Kettle概述
1.1 ETL简介
1.2 Kettle简介1.2.1 Kettle是什么
1.2.2 Kettle的两种设计
1.2.3 Kettle的核心组件
1.2.4 Kettle特点
第2章 Kettle安装部署
2.1 Kettle下载
2.1.1 下载地址
2.1.2 Kettle目录说明
2.1.3 Kettle文件说明
2.2 Kettle安装部署
2.2.1 概述
2.2.2 安装
2.3 Kettle界面简介
2.3.1 首页
2.3.2 转换
2.3.3 作业
2.4 Kettle转换初次体验
2.5 Kettle核心概念
2.5.1 可视化编程
2.5.2 转换
2.5.3 步骤(Step)
2.5.4 跳(Hop)
2.5.5 元数据
2.5.6 数据类型
2.5.7 并行
2.5.8 作业
第3章 Kettle转换
3.1 Kettle输入控件
第1章 Kettle概述
1.1 ETL简介
ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可少。
市面上常用的ETL工具有很多,比如Kettle,Sqoop,DataX,Talend等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的ETL工具是Kettle!
1.2 Kettle简介
1.2.1 Kettle是什么
Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
Kettle(现在已经更名为PDI,Pentaho Data Integration-Pentaho数据集成)。
1.2.2 Kettle的两种设计
1.2.3 Kettle的核心组件
1.2.4 Kettle特点
第2章 Kettle安装部署
2.1 Kettle下载
2.1.1 下载地址
官网地址
https://community.hitachivantara.com/docs/DOC-1009855
下载地址
https://sourceforge.net/projects/pentaho/files/Data%20Integration/
2.1.2 Kettle目录说明
2.1.3 Kettle文件说明
2.2 Kettle安装部署
2.2.1 概述
在实际企业开发中,都是在本地Windows环境下进行kettle的job和Transformation开发的,可以在本地运行,也可以连接远程机器运行
2.2.2 安装
1) 安装jdk,版本建议1.8及以上
2) 下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可
3) 双击Spoon.bat,启动图形化界面工具,就可以直接使用了
2.3 Kettle界面简介
2.3.1 首页
2.3.2 转换
2.3.3 作业
2.4 Kettle转换初次体验
体验案例:将csv文件用Kettle转换成excel文件
1)在Kettle中新建一个转换,然后选择转换下面的“csv文件输入”和“Excel输出”控件
2)双击CSV文件输入文件控件,在弹出的设置框里找到对应的csv文件(尚硅谷大数据技术之Kettle\5.数据\input\01_kettle快速体验.csv),然后点击下面的获取字段按钮,将我们需要的字段加载到kettle中
3)按住键盘SHIFT键,并且点击鼠标左键将两个控件链接起来,链接时选择“主输出步骤”
4)双击Excel输出控件,在弹出的设置框里设置文件输出路径和文件名称,然后点击上面的字段框,依次点击下面的获取字段和最小宽度,获取到输出字段。
5)点击左上角的启动按钮,在弹出的设置框里点击启动,执行该转换。
6)查看kettle下方执行结果日志以及输出路径的Excel文件内容
2.5 Kettle核心概念
2.5.1 可视化编程
Kettle可以被归类为可视化编程语言(Visula Programming Languages,VPL),因为Kettle可以使用图形化的方式定义复杂的ETL程序和工作流。
可视化编程一直是Kettle里的核心概念,它可以让你快速构建复杂的ETL作业和减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。
Kettle里的代码就是转换和作业。
2.5.2 转换
转换(transaformation)负责数据的输入、转换、校验和输出等工作。Kettle 中使用转换完成数据 ETL 全部工作。转换由多个步骤 (Step) 组成,如文本文件输入,过滤输出行,执行 SQL 脚本等。各个步骤使用跳 (Hop) 来链接。 跳定义了一个数据流通道,即数据由一个步骤流 (跳) 向下一个步骤。在 Kettle 中数据的最小单位是数据行(row),数据流中流动其实是缓存的行集 (RowSet) 。
2.5.3 步骤(Step)
步骤(控件)是转换里的基本的组成部分,快速入门的案例中就存在两个步骤,“CSV文件输入”和“Excel输出”。
一个步骤有如下几个关键特性:
①步骤需要有一个名字,这个名字在同一个转换范围内唯一。
②每个步骤都会读、写数据行(唯一例外是“生成记录”步骤,该步骤只写数据)。
③步骤将数据写到与之相连的一个或多个输出跳(hop),再传送到跳的另一端的步骤。
④大多数的步骤都可以有多个输出跳。一个步骤的数据发送可以被设置为分发和复制,分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤。
2.5.4 跳(Hop)
跳就是步骤之间带箭头的连线,跳定义了步骤之间的数据通路。
跳实际上是两个步骤之间的被称之为行集的数据行缓存,行集的大小可以在转换的设置里定义。当行集满了,向行集写数据的步骤将停止写入,直到行集里又有了空间。当行集空了,从行集读取数据的步骤停止读取,直到行集里又有可读的数据行。
2.5.5 元数据
每个步骤在输出数据行时都有对字段的描述,这种描述就是数据行的元数据。
通常包含下面一些信息。
①名称:数据行里的字段名是唯一的。
②数据类型:字段的数据类型。
③格式:数据显示的方式,如Integer的#、0.00。
④长度:字符串的长度或者BigNumber类型的长度。
⑤精度:BigNumber数据类型的十进制精度。
⑥货币符号:¥
⑦小数点符号:十进制数据的小数点格式。不同文化背景下小数点符号是不同的,一般是点(.)或逗号(,)。
⑧分组符号:数值类型数据的分组符号,不同文化背景下数字里的分组符号也是不同的,一般是点(.)或逗号(,)或单引号(’)
2.5.6 数据类型
数据以数据行的形式沿着步骤移动。一个数据行是零到多个字段的集合,字段包含下面几种数据类型。
①String:字符类型数据
②Number:双精度浮点数。
③Integer:带符号长整型(64位)。
④BigNumber:任意精度数据。
⑤Date:带毫秒精度的日期时间值。
⑥Boolean:取值为true和false的布尔值。
⑦Binary:二进制字段可以包含图像、声音、视频及其他类型的二进制数据。
2.5.7 并行
跳的这种基于行集缓存的规则允许每个步骤都是由一个独立的线程运行,这样并发程度最高。这一规则也允许数据以最小消耗内存的数据流的方式来处理。在数据仓库里,我们经常要处理大量数据,所以这种高并发低消耗的方式也是ETL工具的核心需求。
对于kettle的转换,不能定义一个执行顺序,因为所有步骤都以并发方式执行:当转换启动后,所有步骤都同时启动,从它们的输入跳中读取数据,并把处理过的数据写到输出跳,直到输入跳里不再有数据,就中止步骤的运行。当所有的步骤都中止了,整个转换就中止了。
如果你想要一个任务沿着指定的顺序执行,那么就要使用下面所讲的“作业”!
2.5.8 作业
作业 (Job),负责定义一个完成整个工作流的控制,比如将转换的结果发送邮件给相关人员。因为转换(transformation)以并行方式执行,所以必须存在一个串行的调度工具来执行转换,这就是 Kettle中的作业。
第3章 Kettle转换
3.1 Kettle输入控件
由于Kettle中自带的输入控件比较多,本文只挑出开发中经常使用的几个输入控件来进行讲解,详情如下图。
3.1.1 CSV文件输入
CSV文件是一个用逗号分隔的固定格式的文本文件,这种文件后缀名为.csv,可以用Excel或者文本编辑器打开。在企业里面一般最常见的ETL需求就是将csv文件转换为excel文件,如果用Kettle来做这个ETL工作,就需要用到本章节讲解的CSV文件输入控件。
本章节任务:熟悉CSV文件输入控件,并尝试将CSV文件转换成Excel文件(可参考上面的快速体验案例)。
- ①步骤名称:可以修改,但是在同一个转换里面要保证唯一性,见名知意;
- ②文件名:选择对应的csv文件;
- ③列分隔符:默认是逗号;
- ④封闭符:结束行数据的读写;
- ⑤NIO缓存大小:文件如果行数过多,需要调整此参数;
- ⑥包含列头行:意思是文件中第一行是字段名称行,表头不进行读写;
- ⑦行号字段:如果文件第一行不是字段名称或者需要从某行开始读写,可在此输入行号。
- ⑧并发运行?:选择并发,可提高读写速度;
- ⑨字段中有回车换行?:不要选择,会将换行符做数据读出;
- ⑩文件编码:如果预览数据出现乱码,可更换文件编码;
3.1.2 文本文件输入
提取服务器上的日志信息是公司里ETL开发很常见的操作,日志信息基本上都是文本类型,因此文本文件输入控件是kettle中常用的一个输入控件。使用文本文件输入控件步骤:
- 添加需要转换的日志文件
- 按照日志文件格式,指定分隔符
- 获取下字段,并给字段设置合适的格式
- 最后点下预览记录,看看能否读到数据
本章节任务:熟悉文本文件输入控件,并新建转换,将txt日志文件转换为Excel文件
3.1.3 Excel输入
Excel输入控件也是很常用的输入控件,一般企业里会用此控件对大量的Excel文件进行ETL操作。使用Excel输入控件步骤如下:
1)按照读取的源文件格式指定对应的表格类型为xls还是xlsx
2)选择并添加对应的excel文件
3)获取excel的sheet工作表
4)获取字段,并给每个字段设置合适的格式
5)预览数据
本章节任务:熟悉Excel输入控件,将excel文件的两个sheet表格的数据重新写到一个新的excel文件中
3.1.4 XML输入
1)XML简介
XML-可扩展标记语言eXtensible Markup Language,由W3C组织发布,目前推荐遵守的是W3C组织于2000年发布的XML1.0规范。XML用来传输和存储数据,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务。
2)XPath简介
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
XPath 使用路径表达式在 XML 文档中选取节点。下面列出了最有用的路径表达式:
3)XML输入控件
了解XML和XPath概念以后,我们要开始学习Kettle的XML输入控件,企业里经常用此控件进行XML文件的ETL操作。
1.浏览获取xml文件,将xml文件添加到kettle中
2.获取xml文档的所有路径,设置合适的循环读取路径
3.获取字段,获得自己想要读取的所有字段,并且设置适当的格式
4.预览数据,看看能否读取到自己想要的数据
本章节任务:熟悉XML输入控件,将XML文件的学生数据写到excel文件中
3.1.5 JSON输入
1)JSON简介
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
JSON核心概念:数组、对象、属性。
数组:[ ]
对象:{ }
属性:key:value
2)JSON Path
JSONPath类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。其表达式可以接受“dot–notation”(点记法)和“bracket–notation”(括号记法)格式
点记法:$.store.book[0].title
括号记法:$[‘store’][‘book’][0][‘title’]
- JSON输入控件
了解JSON格式和JSON Path以后,我们要学习使用JSON输入控件,JSON控件也是企业里做ETL常用的控件之一。
- 浏览获取JSON文件,将json文件获取到kettle中
- 根据JSON Path点记法,获取到需要的字段,并且设置合适格式
本章节任务:获取到JSON文件里面的id,field,value字段,写到excel文件中
3.1.6 表输入
1)创建数据库连接
表输入可以说是kettle中用到最多的一种输入控件,因为企业中大部分的数据都会存在数据库中。kettle可以连接市面上常见的各种数据库,比如Oracle,Mysql,SqlServer等。但是在连接各个数据库之前,我们需要先配置好对应的数据库驱动,本教程以mysql为例,给大家讲解kettle连接mysql数据库的过程。
首先我们要将对应版本的mysql连接驱动放到kettle安装目录下面的lib文件夹下,然后重启kettle的客户端Spoon
重启Spoon客户端以后,我们就可以创建对应的数据库连接了,在转换视图的主对象树目录下,有个DB连接,右键然后选择新建,在打开数据库连接框里,填写正确的数据库信息,然后测试,测试无误后,可以保存此数据库连接。
数据库连接默认只对本转换有效,换一个转换以后,这个连接就没法用了,还需要新建数据库连接,所以我们需要将建好的这个数据库连接进行共享下,共享以后,其他的转换也能用我们提前建好的这个数据库连接了。
2)表输入
创建好数据库连接以后,我们就可以使用表输入控件了,双击表输入控件,选择刚刚创建的数据库连接,然后在SQL框里输入合适的查询语句,然后点击预览按钮,看能否预览到我们期望的数据。
本章节任务:根据自己的集群环境,创建数据库连接,然后使用表输入控件将student表的数据写到excel中。
3.2 Kettle输出控件
输出是转换里面的第二个分类,输出控件也是转换中的第二大控件,用来存储数据。输出是ETL里面的L(Load),主要做数据加载的工作。
由于Kettle中自带的输出控件比较多,本文只挑出开发中经常使用的几个输出控件来进行讲解,详情如下图。
3.2.1 Excel输出
Kettle中自带了两个Excel输出,一个Excel输出,另一个是Microsoft Excel输出。
Excel输出只能输出xls文件(适合Excel2003),Microsoft Excel输出可以输出xls和xlsx文件(适合Excel2007及以后)
Excel输出大家已经很熟悉了,本章不再赘述,接下来给大家讲下Microsoft Excel输出。
- 选择合适的扩展名
- 点击浏览,补全输出文件的路径已经文件名
本章任务:使用表输入控件,将student表的数据,以复制的方式输出到xls和xlsx文件中
3.2.2 文本文件输出
文本文件输出控件,顾名思义,这是一个能将数据输出成文本的控件,比较简单,在企业里面也比较常用。
- 设置对应的目录和文件名
- 设置合适的扩展名,比如txt,csv等
- 在内容框里设置合适的分隔符,比如分号,逗号,TAB等
- 在字段框里获取字段,并且给每个字段设置合适的格式
本章节任务:将student表的数据复制两份,导出成txt和csv文件
3.2.3 SQL文件输出
SQL文件输出一般跟表输入做连接,然后将数据库表的表结构和数据以sql文件的形式导出,然后做数据库备份的这么一个工作。
- 选择合适的数据库连接
- 选择目标表
- 勾选增加创建表语句和每个语句另起一行
- 填写输出文件的路径和文件名
- 扩展名默认为sql,这个不需要更改
本章节任务:将student表的表结构和数据利用kettle导出成sql文件备份
3.2.4 表输出
表输出控件可以将kettle数据行中的数据直接写入到数据库中的表中,企业里做ETL工作会经常用到此控件。
- 选择合适的数据库连接
- 选择目标表,目标表可以提前在数据库中手动创建好,也可以输入一个数据库不存在的表,然后点击下面的SQL按钮,利用kettle现场创建
- 如果目标表的表结构和输入的数据结构不一致,还可以自己指定数据库字段
本章节任务:熟悉表输出控件,然后将student表的数据导入到student2表中,要求利用kettle现场创建student2表
3.2.5 更新&插入/更新
更新和插入/更新,这两个控件是kettle提供的将数据库已经存在的记录与数据流里面的记录进行对比的控件。企业级ETL经常会用到这两个控件来进行数据库更新的操作
两者区别:
更新是将数据库表中的数据和数据流中的数据做对比,如果不同就更新,如果数据流中的数据比数据库表中的数据多,那么就报错。
插入/更新的功能和更新一样,只不过优化了数据不存在就插入的功能,因此企业里更多的也是使用插入/更新。
- 选择正确的数据库连接
- 选择目标表
- 输入两个表来进行比较的字段,一般来说都是用主键来进行比较
- 输入要更新的字段
本章节任务:手动修改下student表的数据(修改和新增),然后用修改后的数据和student2来进行对比,分别尝试更新和插入/更新控件的区别
3.2.6 删除
删除控件可以删除数据库表中指定条件的数据,企业里一般用此控件做数据库表数据删除或者跟另外一个表数据做对比,然后进行去重的操作。
- 选择数据库连接
- 选择目标表
- 设置数据流跟目标表要删除数据的对应字段
本章节任务:删除student2表格中student表里面已有的数据(按照student表对student2表数据进行去重)
3.3 Kettle转换控件
转换控件是转换里面的第四个分类,转换控件也是转换中的第三大控件,用来转换数据。转换是ETL里面的T(Transform),主要做数据转换,数据清洗的工作。ETL整个过程中,Transform的工作量最大,耗费的时间也比较久,大概可以占到整个ETL的三分之二。
由于Kettle中自带的转换控件比较多,本文只挑出开发中经常使用的几个转换控件来进行讲解,详情如下图。
3.3.1 Concat fields
转换控件Concat fields,顾名思义,就是将多个字段连接起来形成一个新的字段。
本章节任务:将staff表的firstname和lastname拼接起来,形成name字段,然后再将数据插入到新表emp中
提示:如果涉及到中文乱码问题,请参考资料:Mysql中文乱码问题.docx
3.3.2 值映射
值映射就是把字段的一个值映射成其他的值。在数据质量规范上使用非常多,比如很多系统对应性别sex字段的定义不同。所以我们需要利用此控件,将同一个字段的不同的值,映射转换成我们需要的值。
- 选择映射的字段
- 还可以自定义映射完以后的新字段名
- 可以设置不匹配时的默认值
- 设置映射的值
本章节任务:将staff表的sex字段,映射成男or女,然后再插入到emp表中
3.3.3 增加常量&增加序列
增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加序列是给数据流添加一个序列字段,可以自定义该序列字段的递增步长。
本章节任务:给表staff的数据加一列固定值slary和一个递增的number序列,在控制台预览下数据即可,不用输出。
3.3.4 字段选择
字段选择是从数据流中选择字段、改变名称、修改数据类型。
本章节任务:在上一章节的转换之后,添加字段选择控件,移除掉firstname字段,并且将lastname重命名为name,将slary重命名为money,然后再次预览数据,查看数据的变化
3.3.5 计算器
计算器是一个函数集合来创建新的字段,还可以设置字段是否移除(临时字段)。我们可以通过计算器里面的多个计算函数对已有字段进行计算,得出新字段。
本章节任务:在上一节的任务基础之上,添加计算器控件对money和number字段进行相乘,得出新字段acount,然后预览数据。
3.3.6 字符串剪切&替换&操作
转换控件中有三个关于字符串的控件,分别是剪切字符串,字符串操作,字符串替换
剪切字符串是指定输入流字段裁剪的位置剪切出新的字段。
字符串替换是指定搜索内容和替换内容,如果输入流的字段匹配上搜索内容就进行替换生成新字段。
字符串操作是去除字符串两端的空格和大小写切换,并生成新的字段。
本章节任务:在上一节任务之后,添加剪切字符串,字符串替换,字符串操作三个控件,利用这三个控件分别对sex字段进行剪切,替换,操作(去空格,转大小写)
3.3.7 排序记录&去除重复记录
去除重复记录是去除数据流里面相同的数据行。但是此控件使用之前要求必须先对数据进行排序,对数据排序用的控件是排序记录,排序记录控件可以按照指定字段的升序或者降序对数据流进行排序。因此排序记录+去除重复记录控件常常配合组队使用。
wom
------------------------------------------------------------------ 我是低调的分隔线 ----------------------------------------------------------------------
吾欲之南海,一瓶一钵足矣...