Kettle 使用详解

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kettle 使用详解相关的知识,希望对你有一定的参考价值。

第0章 ETL简介

ETL (Extract-Transform-Load 的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可少。

市面上常用的ETL工具有很多,比如Sqoop,DataX, Kettle, Talend 等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的ETL工具是Kettle!

第1章 Kettle简介

1.1 Kettle是什么

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、 Unix.上运行,绿色无需安装,数据抽取高效稳定。

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

Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

Kettle中有两种脚本文件,transformationjob,transformation 完成针对数据的基础转换,job则完成整个工作流的控制。

Kettle(现在已经更名为PDI, Pentaho Data Integration Pentaho数据集成)

1.2 Kettle的两种设计

简述:

  • Transformation (转换) :完成针对数据的基础转换。

  • Job (作业) :完成整个工作流的控制。

区别:

  • (1) 作业是步骤流,转换是数据流。这是作业和转换最大的区别。

  • (2)作业的每一个步骤,必须等到前面的步骤都跑完了,后面的步骤才会执行;而转换会一次性把所有控件全部先启动(一个控件对应启动一个线程),然后数据流会从第一个控件开始,一条记录、一条记录地流向最后的控件;

1.3 Kettle的核心组件

  • Spoon.bat / spoon.sh(重点):是一个图形化界面,可以让我们用图形化的方式开发转换和作业(Windows选择Spoon.bat;Linux选择Spoon.sh)

  • Pan.bat / pan.sh:利用Pan可以用命令行的形式执行由Spoon编辑的转换和作业

  • Kitchen.bat / kitchen.sh:利用Kitchen可以使用命令调用由Spoon编辑好的Job

  • Carte.bat / Carte.sh:Carte是一个轻量级的Web容器,用于建立专用、远程的ETL Server

1.4 Kettle的特点

第2章 Kettle安装部署

2.1 Kettle 下载

2.1.1 下载地址

官网:官网地址

下载地址:各版本下载链接

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文件(test.csv).然后点击下面的获取字段按钮,将我需要的字段加载到kettle中

3)按住键盘 shift 键,并且点击鼠标左键将两个控件链接起来,链接时选择 “主输出步骤”

4)双击Excel输出控件,在弹出的设置框里设置文件输出路径和文件名称,然后点击上的字段框,依次点击下面的获取字段和最小宽度,获取到输出字段

5)点击运行,启动,查看转换好的文件

转换成功:

2.5 Kettle 核心概念

2.5.1 可视化编程

Kettle可以被归类为可视化编程语言,因为Kettle可以使用图形化的方式定义 复杂的ETL程序和工作流。可视化编程一直是Kettle里的核心概念,它可以让你 快速构建复杂的ETL作业减低维护工作量。它通过隐藏很多技术细节,使IT领域更贴近于商务领域。Kettle里的代码就是 转换作业

2.5.2 转换

转换(transaformation)负责数据的输入、转换、校验和输出等工作。Kettle 中使用转换完成数据 ETL 全部工作。转换 由多个步骤(Step)组成,如文本文件输入,过滤输出行,执行SQL脚本等。各个步骤使用跳(Hop)(连接箭头) 来链接。跳定义了一个数据流通道,即数据由一个步骤流(跳)向下一个步骤。在 Kettle中数据的最小单位是数据 行(row),数据流中流动其实是缓存的 行集(RowSet)

2.5.3 步骤

步骤(控件)是 转换里的基本的组成部分,快速入「]的案例中就存在两个步骤, “CSV文件输入”“Excel输出”

一个步骤有如下几个关键特性:

  • 1.步骤需要有一个名字,这个名字在同一个转换范围唯一

  • 2.每个步骤都会读、写数据行(唯一例外是 “生成记录”步骤,该步骤只写数据

  • 3.步骤将数据写到与之相连的一个或多个输出跳(hop),再传送到跳的另一端的步骤

  • 4.大多数的步骤都可以有多个输出跳。–个步骤的数据发送可以被设置为分发复制

分发是目标步骤轮流接收记录,复制是所有的记录被同时发送到所有的目标步骤

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输入控件

输入是转换里面的第一个分类, 输入控件也是转换中的第一大控件, 用来抽取数据或者生成数据。输入是ETL里面的E (Extract),主要做 数据提取的工作。

由于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文件

使用文本文件输入控件步骤:

1) 添加需要转换的日志文件

2)按照日志文件格式,指定分隔符

3)获取下字段,并给字段设置合适的格式(数字类型的数据尽量选Integer,因为number类型有两位小数点)

4)最后点下预览记录,看看能否读到数据

3.1.3 Excel文件输入

Excel输入控件也是很常用的输入控件,一般企业里会用此控件对大量的Excel文件进行ETL操作。

任务:两张sheet表合二为一

使用Excel输入控件步骤如下

原始数据:

1)按照读取的源文件格式指定对应的表格类型为 xls 还是 xlsx

2)选择并添加对应的excel文件

3)获取excel的sheet工作表

4)获取字段,并给每个字段设置合适的格式

5)预览数据

3.1.4 XML输入

1)XML简介

XML可扩展标记语言eXtensible MarkupLanguage,由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操作。

任务:熟悉XML输入控件,将XML文件的学生数据写到excel文件中

1.浏览获取xml文件,将xml文件添加到kettle中

2.获取 xml文档的所有路径,设置合适的循环读取路径

3.获取字段,获得自己想要读取的所有字段,并且设置适当的格式

4.预览数据,看看能否读取到自己想要的数据

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’ ]

3)JSON 输入控件

了解JSON格式和JSON Path以后,我们要学习使用JSON输入控件,JSON控件也是企业里做ETL常用的控件之一

任务:获取到JSON文件里面的id,field,value字段,写到excel文件中

原始数据:

1.浏览获取JSON文件(注意文件路径不能有中文),将json文件获取到kettle中

2.根据JSON Path点记法,获取到需要的字段,并且设置合适格式

3)新建JSON输入控件2

第二步的数据内容为:

3.1.6 表输入

表输入可以说是kettle中用到最多的一种输入控件, 因为企业中大部分的数据都会存在数据库中。kettle可以连接市面上常见的各种数据库,比如Oracle,mysql, SqlServer等。但是在连接各个数据库之前,我们需要先配置好对应的数据库驱动,本教程以mysql为例,给大家讲解kettle连接mysql数据库的过程。

1)创建数据库连接

MySQL驱动下载(一定要下载对应数据库版本):官网下载地址

首先我们要将对应版本的mysql连接驱动放到kettle 安装目录下面的lib文件夹下,然后重启kettle 的客户端Spoon

重启Spoon客户端以后,我们就可以创建对应的数据库连接了,在转换视图的主对象树目录下,有个DB连接,右键然后选择新建,在打开数据库连接框里,填写正确的数据库信息,然后测试,测试无误后,可以保存此数据库连接。

数据库连接默认只对本转换有效,换一个转换以后,这个连接就没法用了,还需要新建数据库连接,所以我们需要将建好的这个数据库连接进行共享下,共享以后,其他的转换也能用我们提前建好的这个数据库连接了。

2)表输入

创建好数据库连接以后,我们就可以使用表输入控件了,双击表输入控件,选择刚刚创建的数据库连接,然后在SQL框里输入合适的查询语句,然后点击预览按钮,看能否预览到我们期望的数据

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输出。

1)选择合适的扩展名

2)点击浏览,补全输出文件的路径已经文件名

3.2.2 文本文件输出

文本文件输出控件,顾名思义,这是一个能将数据输出成文本的控件,比较简单,在企业里面也比较常用。

1.设置对应的目录和文件名

2.设置合适的扩展名,比如txt,csv等

3.在内容框里设置合适的分隔符,比如分号,逗号,TAB等

4.在字段框里获取字段,并且给每个字段设置合适的格式

3.2.3 SQL文件输出

SQL文件输出一般跟表输入做连接,然后将数据库表的表结构和数据以sql文件的形式导出,然后 做数据库备份的这么一个工作。(Kettle里面没varchar类型尽量少用)

1.选择合适的数据库连接

2.选择目标表

3.勾选增加创建表语句和每个语句另起一行

4.填写输出文件的路径和文件名

5.扩展名默认为sql,这个不需要更改

3.2.4 表输出

表输出控件可以将kettle数据行中的数据直接写入到 数据库中的表中,企业里做ETL工作会经常用到此控件。

1.选择合适的数据库连接

2.选择目标表,目标表可以提前在数据库中手动创建好,也可以输入一个数据库不存在的表,然后点击下面的SQL按钮,利用kettle现场创建

3.如果目标表的表结构和输入的数据结构不一致,还可以自己指定数据库字段

3.2.5 更新&插入/更新

更新和插入/更新,这两个控件是kettle提供的将 数据库已经 存在的记录与 数据流里面的记录进行对比的控件。企业级ETL 经常会用到这两个控件来进行数据库更新的操作

两者区别

  • 更新是将数据库表中的数据和数据流中的数据做对比,如果不同就更新,如果数据流中的数据比数据库表中的数据多,那么就报错。

  • 插入/更新的功能和更新一样,只不过优化了数据不存在就插入的功能,因此企业里更多的也是使用插入/更新。

步骤:

1.选择正确的数据库连接

2.选择目标表

3.输入两个表来进行比较的字段,一般来说都是用主键来进行比较

4.输入要更新的字段

3.2.6 删除

删除控件可以删除数据库表中指定条件的数据,企业里一般用此控件做数据库表数据删除或者跟另外一个表数据做对比,然后进行去重的操作。

1.选择数据库连接

2.选择目标表

3.设置数据流跟目标表要删除数据的对应字段

3.3 Kettle转换控件

转换控件是转换里面的第四个分类,转换控件也是转换中的第三大控件,用来转换数据。转换是ETL里面的T(Transform),主要做 数据转换,数据清洗的工作。ETL整个过程中,Transform的工作量最大,耗费的时间也比较久,大概可以占到整个ETL的三分之二。

由于Kettle中自带的转换控件比较多,本文只挑出开发中经常使用的几个转换控件来进行讲解,详情如下图。

3.3.1 Concat fields

转换控件Concat fields,顾名思义,就是将多个字段连接起来形成一个新的字段

任务:将staff表的firstname和lastname拼接起来,形成name字段,然后再将数据插入到新表emp中

原始数据:

3.3.2 值映射

值映射就是把字段的一个值映射(转换)成其他的值。在数据质量规范上使用非常多,比如很多系统对应性别sex字段的定义不同。所以我们需要利用此控件,将同一个字段的不同的值,映射转换成我们需要的值。

任务:将staff表的sex字段,映射成男or女,然后再插入到emp表中

原始数据:

1.选择映射的字段

2.还可以自定义映射完以后的新字段名

3.可以设置不匹配时的默认值

4.设置映射的值

3.3.3 增加常量&增加序列

增加常量就是在本身的数据流里面添加一列数据,该列的数据都是相同的值。
增加序列是给数据流添加一个序列字段,可以自定义该序列字段的递增步长。

任务:给表staff的数据加一列固定值slary和一个递增的number序列,在控制台预览下数据即可,不用输出

3.3.4 字段选择

字段选择是从数据流中选择字段、改变名称、修改数据类型。

任务:在上一章节的转换之后,添加字段选择控件,移除掉firstname字段,并且将lastname重命名为name,将slary重命名为money,然后再次预览数据,查看数据的变化

3.3.5 计算器

计算器是一个 函数集合来创建新的字段,还可以设置字段 是否移除(临时字段)。我们可以通过计算器里面的多个计算函数对已有字段进行计算,得出新字段。

任务:在上一节的任务基础之上,添加计算器控件对money和number字段进行相乘,得出新字段acount,然后预览数据

执行结果:

3.3.6 字符串剪切&替换&操作

转换控件中有三个关于字符串的控件,分别是剪切字符串,字符串操作,字符串替换

剪切字符串是指定输入流字段裁剪的位置剪切出新的字段

字符串替换是指定搜索内容和替换内容,如果输入流的字段匹配上搜索内容就进行替换生成新字段

字符串操作是去除字符串两端的空格和大小写切换,并生成新的字段

执行结果:

3.3.7 排序记录&去除重复记录

去除重复记录是 去除数据流里面 相同的数据行。但是此控件使用之前要求必须先对数据进行排序,对数据排序用的控件是排序记录,排序记录控件可以按照指定字段的升序或者降序对数据流进行排序。因此排序记录+去除重复记录控件常常配合组队使用。

任务:利用excel输入控件读取input目录下的06_去除重复记录.xlsx,然后对里面重复的数据进行按照id排序并去重

原始数据:

执行结果:

3.3.8 唯一行(哈希值)

唯一行(哈希值)就是删除数据流重复的行。此控件的效果和(排序记录+去除重复记录)的效果是一样的,但是实现的原理不同。排序记录+去除重复记录对比的是每两行之间的数据,而唯一行(哈希值)是给每一行的数据建立哈希值,通过哈希值来比较数据是否重复,因此唯一行(哈希值)去重效率比较高,也更建议大家使用。

任务:利用唯一行(哈希值)控件对06_去除重复记录.xlsx去重,并且查看最后输出的数据跟上个任务有何区别

执行结果:

3.3.9 拆分字段

拆分字段是把字段按照分隔符拆分成两个或多个字段。需要注意的是,字段拆分以后, 原字段就会从数据流中消失

任务:将拆分字段.xlsx里面的NBA球星的姓名,拆分成姓跟名

文件内容:

执行结果:

3.3.10 列拆分为多行

列拆分为多行就是把 指定字段按指定 分隔符进行拆分为 多行

以上是关于Kettle 使用详解的主要内容,如果未能解决你的问题,请参考以下文章

kettle的下载安装和初步使用(windows平台下)(图文详解)

Kettle 使用详解

Kettle应用之插入更新组件详解

Kettle系列:使用Kudu API插入数据到Kudu中

ETL利器Kettle实战应用解析系列一Kettle使用介绍

ETL之Kettle