Kettle-6.1安装部署及使用教程

时间:2022-09-16 22:23:10

一、Kettle概念

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

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

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

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

二、下载和部署

下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可.

下载kettle包,并解压http://community.pentaho.com/projects/data-integration/

Kettle-6.1安装部署及使用教程

压缩包:(这里使用的是Kettle6.1版本)

Kettle-6.1安装部署及使用教程

解压:

Kettle-6.1安装部署及使用教程

三、Kettle环境配置

1、安装JDK(略)

2、测试JDK安装成功(略)

JDK安装步骤见《kettle安装部署及远程执行.docx》

强调:kettle6.1版本,必须配套使用JDK1.7及以上版本。

3、运行Kettle

Windows下找到$KETTLE_HOME/spoon.bat,双击运行.

 Kettle-6.1安装部署及使用教程

欢迎界面如下图所示:

Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

四、Kettle组件介绍与使用

1 、Kettle使用

Kettle提供了资源库的方式来整合所有的工作,;

1)创建一个新的transformation,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为Trans,kettle默认transformation文件保存后后缀名为ktr;

2)创建一个新的job,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为Job,kettle默认job文件保存后后缀名为kjb;

 Kettle-6.1安装部署及使用教程Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

2 、组件树介绍

2.1 、Transformation的主对象树和核心对象分别如下图:

 Kettle-6.1安装部署及使用教程Kettle-6.1安装部署及使用教程

ransformation中的节点介绍如下:

Main Tree:菜单列出的是一个transformation中基本的属性,可以通过各个节点来查看。

DB连接:显示当前transformation中的数据库连接,每一个transformation的数据库连接都需要单独配置。

Steps:一个transformation中应用到的环节列表

Hops:一个transformation中应用到的节点连接列表

核心对象菜单列出的是transformation中可以调用的环节列表,可以通过鼠标拖动的方式对环节进行添加:

Input:输入环节

Output:输出环节

Lookup:查询环节

Transform:转化环节

Joins:连接环节

Scripting:脚本环节

2.2 、Job的主对象树和核心对象分别如下图:

 Kettle-6.1安装部署及使用教程Kettle-6.1安装部署及使用教程

Main Tree菜单列出的是一个Job中基本的属性,可以通过各个节点来查看。

DB连接:显示当前Job中的数据库连接,每一个Job的数据库连接都需要单独配置。

Job entries/作业项目:一个Job中引用的环节列表

核心对象菜单列出的是Job中可以调用的环节列表,可以通过鼠标拖动的方式对环节进行添加。

每一个环节可以通过鼠标拖动来将环节添加到主窗口中。

并可通过shift+鼠标拖动,实现环节之间的连接。

 2.3 、kettle的简单使用

DB连接

我们可以看到转换的主对象树和核心对象区域,然后我们添加一个DB连接。

  选择“主对象树”,双击“转换”标签下的“DB连接”会弹出一个配置窗口。填入连接名称,选择连接类型,配置数据库设置,然后测试下配置是否正确。

  由于kettle没有将所有数据库的Driver文件集成,所以如果想连接指定的数据库,需要自己下载JDBC驱动,放入指定的lib目录下。添加完JDBC驱动后,必须重启kettle才能正确加载驱动(添加oracle数据库的jdbc驱动,参见6、常见问题 6.1【Kettle】JDBC连接oracle报找不到驱动)。

 Kettle-6.1安装部署及使用教程

注:在转换之前需要创建转换所需的表,原始表和转换的目标表。

  点击“核心对象”标签页中的“输入”,选择“表输入”拖到“转换”区域。

  双击“表输入”图标弹出表输入对话框,填入步骤名称,选择数据库连接,点击“获取SQL查询语句”,或者直接写入SQL语句,填写附件信息,点击“预览”按钮查看执行结果,没有错误,点击“确认”关闭对话框。

 Kettle-6.1安装部署及使用教程

点击“核心对象”—“输出”,选择“Excel输出”拖入到转换区,双击Excel输出图标,弹出对话框,选择文件名和其它附加参数,点击确认

 Kettle-6.1安装部署及使用教程

点击输入表的图标,同时按下shift键,再点击输出文件,将两者连接起来。然后双击Excel输出进行配置。

 Kettle-6.1安装部署及使用教程

最后一步就是执行kettle脚本,点击工具栏的播放箭头即可。

 Kettle-6.1安装部署及使用教程

点击“启动”开始转换,在转换过程中会出现转换的信息,如下图所示。

 Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

完成转换后,我们可以在Excel输出目录中查看转换结果。

 Kettle-6.1安装部署及使用教程

注:时间字段转换到Excel为空,修改SELECT语句中使用TO_CHAR转换成字符串,例如:to_char(start_time,’yyyy-mm-dd HH24:MM:SS’) as start_time.

注:Excel(2007之前版本)中的记录不能超过65535条,否则会自动关闭文件,导致转换失败。

至此,一个简单的数据迁移脚本,从oracle数据库导出数据到EXCEL文件中就大功告成了。  

 

3、使用举例1

3.1、建立转换

选中列表中的的“表输入”、“表输出”、“插入/更新”,拖拽到右侧工作区。鼠标选中节点键盘按shift键,拖拽即可连线。下图是一个转换,有两个动作,一是直接从数据源表同步数据到目标表,一是检查源表的插入和更新,同步到目标表。

 Kettle-6.1安装部署及使用教程

黑色线为生效,灰色线为失效,节点和连接可双击进行编辑。

 Kettle-6.1安装部署及使用教程

可预览数据是否正确。

 Kettle-6.1安装部署及使用教程

双击编辑表输出动作。

 Kettle-6.1安装部署及使用教程

要获取的字段设置如下所示:

 Kettle-6.1安装部署及使用教程

点击“Enter field mapping/输入字段映射”进行字段选择。

 Kettle-6.1安装部署及使用教程

选择要用的字段后点确定,注意字段的约束条件。

编辑好后点击上面的执行即可。

Kettle-6.1安装部署及使用教程

左侧参数暂不说明,执行完成后可以观看下方的日志。

 Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

双击编辑“插入/更新”动作。

Kettle-6.1安装部署及使用教程

然后点击运行。 

执行前,在源库里加条新纪录。确定作业执行正常后可以保存作业。

3.2、建立执行的JOB/作业

建立JOB的前提是有可以完整执行的作业,上面步骤定制的作业进行保存

Kettle-6.1安装部署及使用教程

Kettle-6.1安装部署及使用教程

从左侧列表拖拽“START”,“Success”,“转换”,“发送邮件”到工作区并连接,如下图。

Kettle-6.1安装部署及使用教程

然后双击“START”动作进行编辑

 Kettle-6.1安装部署及使用教程

然后双击编辑“Transformation”活动。

转换文件名选择上一步编辑好的转换位置

 Kettle-6.1安装部署及使用教程

编辑完成后直接点击运行即可。

 Kettle-6.1安装部署及使用教程

运行后查看日志。

 Kettle-6.1安装部署及使用教程

当任务执行以后可以查看相对应的日志,也可自行配置日志。

 Kettle-6.1安装部署及使用教程

五、常见问题解决

1 、【Kettle】JDBC连接oracle报找不到驱动

初次接触kettle,环境都配置好以后,启动kettle的spoon,新建作业,配置jdbc的oracle数据源连接,报找不到驱动。

Kettle-6.1安装部署及使用教程

解决办法:
1)、下载OJDBC14.jar包
2)、 将该包拷贝到kettle的~\data-integration\libswt或者~ \data-integration\lib路径下都可以。3、重启kettle,重新配置数据源连接。问题解。

2、 IP地址输入错误

 Kettle-6.1安装部署及使用教程

3、数据库实例输入错误

错误连接数据库 [GCS] : org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.1.46:1521:ORCL1

org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.1.46:1521:ORCL1

4、用户名密码错误

 Kettle-6.1安装部署及使用教程

六、注意事项

1、表输入中书写sql若有参数,图中替换SQL语句里的变量必须勾上

 Kettle-6.1安装部署及使用教程

2、若开发步骤中由一个步骤变俩个步骤,需要分清楚,分发与复制。分发数据轮流进入目标步骤,复制是俩个步骤同时进入。

Kettle-6.1安装部署及使用教程

3、俩个表输入步骤做记录集(表关联)关联,必须提前将关联字段排序,不然会漏掉数据

 Kettle-6.1安装部署及使用教程

七、kettle组件介绍说明

1、文本文件输入(text input)读取大量不同的文本文件。大多是通过工具生成的CSV文件。

2、表输入(table Input):常用来利用连接和SQL,从数据中读取信息,自动生成基本的SQL语句。

3、获取系统信息(get system info):这个步骤从 Kettle 环境中获取信息。

4、生成行(Generate Rows :这个步骤输出一定数量的行,缺省为空。可选包括一定数量的静态字段。

5、Cube输入(文件反序列化)(De-serialize from file):从二进制 Kettle Cube 文件中读取数据行。 备注:这个步骤仅仅用来存储短期数据。不同版本之间不保证文件的格式一样。

6、XBase输入: 使用这一步可以读取大多数被称为 XBase family派生的 DBF文件。

7、Excel输入:利用这个步骤可以从 Kettle 支持的系统的 Excel文件里面读取数据。

8、XML输入:这个步骤允许你读取存储在 XML 文件中的数据。它也提供一个接口,你可以定义你想读取的文件名、XML 文件的数据重复部分、获取的字段等。你可以指定元素或属性字段。

9、获取文件名(Get File Names):这个步骤可以获取系统的文件名信息。

10、表输出(Table output)这个步骤可以存储信息到数据库表中。

11、插入/更新(Insert/Update):这个步骤利用查询关键字在表中搜索行。如果行没有找到,就插入行。如果能被找 到,并且要被更新的字段没有任何改变,就什么也不做。如果有不同,行就会被更新。

12、更新(Update ):这个步骤类似于插入/更新步骤,除了对数据表不作插入操作之外。它仅仅执行更新操作。

13、删除(Delete)这个步骤类似于上一步,除了不更新操作。所有的行均被删除。

14、Cube output(序列化到文件)(Serialize to file):这一步骤存储数据到一个二进制文件。这个步骤有个优势就是回读的时候,文本文件的内容不需要解析。这是因为元数据也同时存储在 CUBE 文件里面。

15、XML输出:这个步骤允许你从源中写入行到一个或者多个 XML 文件。

16、EXCEL输出:利用这个步骤,在 Kettle 支持的系统中,你可以写入数据到一个或者多个Excel 文件中。

17、Access 输出(Microsoft Access Output): 允许你在转换中创建一个新的 Access 数据库文件作为输出。

18、数据库查询(Database lookup):这个步骤类型允许你在数据库表中查找值。

19、流查询(Stream lookup):这个步骤类型允许你从其它步骤中查询信息。首先,“源步骤”的数据被读到内存中,然后被用来从主要的流中查询数据。

20、调用数据库存储过程(Call DB Procedure):这个步骤允许你运行一个数据库存储过程,获取返回结果。

21、HTTP 客户端(HTTP Cient):HTTP 客户端根据一个附带条件的基准 URL,来调用一个简单的调用。

22、字段选择  (Select values) :这个步骤常常用来 选择字段  重命名字段  指定字段的长度或者精度  

下面是三个不同标签的功能:  

         选择和修改:指定需要流到输出流中的字段的精确顺序和名称  

         删除:指定必须从输出流中删除的字段  

         元数据:修改元数据字段的名称、类型、长度和精度  

23、过滤记录(Filter rows):这个步骤允许你根据条件和比较符来过滤记录。 一旦这个步骤连接到先前的步骤中,你可以简单的单击“<field>”,“=”和“<value>” 区域来构建条件。  

24、排序记录(Sort rows):这个步骤利用你指定的字段排序行,无论他们是按照升序还是降序。

备注:当行数超过 5000 行的时候,Kettle 使用临时文件来排序行。

25、添加序列(Add sequence):这个步骤在流中增加一个序列。一个序列是在某个起始值和增量的基础上,经常改变的整数值。你可以使用数据库的序列,也可以使用 Kettle 决定的序列。

备注:Kettle 序列在同一个转换中是唯一使用的。每一次转换运行的时候,序列的值又会重新循环一次(从开始值开始)

26、空操作-什么都不做(Dummy-do nothing):这个操作什么都不做。它的主要作用是,在你想测试什么的时候,充当一个占位符。例如有一个转换,你至少需要两个彼此连接的步骤。如果你想测试文本文件输入步骤,你可以将它连接到一个 Dummy 步骤。

27、行转列(Row Normaliser):这个步骤转动表,标准化数据。

28、拆分字段(Split Fields):这个步骤允许你根据分隔符来拆分字段。

29、去除重复记录(Unique rows):这个步骤从输入流中称移除重复的记录。

30、分组(Group By)这个步骤允许你通过定义分组的字段来计算值。

例如:计算产品的平均销售额,获取库存的黄色衬衫的数量等等。

31、设置为空值(Null if):如果某个字符串的值等于指定的值,设置那个值为空。

32、计算器(Calculator ):这个步骤提供一个功能列表,可以在字段值上运行。

计算器的一个重要优势是,它有着几倍于常用的 JavaScript 脚本的速度。

33、增加 XML (XML Add ):这个步骤允许你将在 XML 中的行字段内容编码,XML 以字符串字段的形式添加到行中。

34、增加常量(Add constants ):这个步骤很简单,主要是添加常量到流中。它的使用也很容易:用字符串形式指定名称,类型和值。利用选择的数据类型指定转换格式。

36、行转列(Row Denormaliser ):这个步骤允许你通过查询键值对来反向规格化数据。也可以立即转换数据类型。

37、行扁平化(Flattener ):这个步骤允许你扁平化预备的数据。

38、值映射(Value Mapper ):这个步骤简单的映射字符串,从一个值映射到另一个值。通常你想解中转换表的问题,不管怎么说,这是一种可选的方案:简单的将转换表作一部分。

例如:如果你想替换 Language codes,你可以:

使用的字段名:LanuguageCode 目标字段名:LanguageDesc

源值/目标值:EN/English,FR/French,NL/Dutch,ES/Spanish,DE/German,…

39、被冻结的步骤(Blocking step ):它冻结所有的输出,直到从上一步骤来的最后一行数据到达,最后一行数据将发送到下一步。你可以使用这个步骤触发常用插件、存储过程和 Java Script等等。

记录关联(笛卡尔输出)(Join Rows-Cartesian Product ):这个步骤允许你组合输入流中的所有行(笛卡尔输出)。

40、数据库连接(Database Join ):这个步骤允许你使用先前步骤的数据,运行一个数据库查询。能够指定查询参数:在 SQL 查询中使用“?” ; 在 SQL 查询中使用数据网格中的字段

42、合并记录(Merge rows ):这个步骤允许你比较两个行流。如果你想在两个不同的时间比较比较数据,这是非常有用的。它常被用于数据仓库源系统没有包含最后更新日期的情况。

两个行流被合并,一个是引用流(旧数据),一个比较流(新数据)。每次都是行的最后版本通过进入下一步骤。行有以下标记:

“identical”:关键字在两个流中都存在,并且值相同

“changed”: 关键字在两个流中都存在,但是一个或者更多的值不同

“new”:引用流中没有找到关键字

“deleted”: 比较流中没有找到关键字

比较流中的数据进入下一步骤,除非在“删除“的情况。

43、存储合并(Stored Merge ):这个步骤合并来自多个输入步骤的数据行,并且这些行用指定的关键字排序。

44、合并连接(Merge Join) :这个步骤将来自两个不同的步骤输入的数据执行一个高效的合并。合并选项包括INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER。

备注:这个步骤将输入的行按指定的字段存储

45、Java Script 值(Java Script Value ):这个步骤允许你用 JavaScript 语言做复杂的运算。使用的 JavaScript 引擎是 Rhino 1.5R5。

46、改进的 Java Script 值(Modified Java Script Value ):这个步骤是“Javascript Values”的进改版本,它可以提供更好的效率,也更容

易使用。

47、执行 SQL 语句(Execute SQL script ):在这个步骤中你可以执行 SQL 脚本,或者在转换初始化的时候执行,或者在步骤的每一个输入行执行

49、联合更新/查询(Combination lookup/update ):这个步骤允许你在一个 junk-dimesion 表里存储信息。

50、映射(Mapping ):如果你希望某个转换多次运行,你可以将重复的部分添加到一个映射中。映射是一个这样的转换:指定输入如何从映射输入中到达 ;指定输入字段如何转换:字段被添加或者删除

51、从结果获取记录(Get rows from result ):这个步骤返回在一个任务中先前步骤生成的行。你可以进入选择先前步骤生成的元数据字段。

52、复制记录到结果(Copy rows to result ):这个步骤允许你在一个任务中将行数据(内存中的)传递到下一个步骤

53、设置变量(Set Variable):这个步骤允许你在一个任务中或者虚拟机中设置变量。它仅仅可以用一行数据来设置变量值。

54、获取变量(Get Variable ):这个步骤允许你获取一个变量,它可以返回行或者附加值到输入行。

备注:你需要指定完整的变量格式${variable}或者%%variable%%。

55、从以前的结果获取文件(Get files from result ):每次在转换、任务、文件细节、任务条目、步骤等处理、使用或者创建一个文件时,文件被捕获并且附加到结果中。你可以使用这个步骤访问那些信息。

56、复制文件名到结果(Set files in result):在某种情况下,我们可以操纵输出结果中的文件列表。例如 mail 任务条目可以使用文件列表来关联邮件,可能你不需要发送所有的文件,你可以在此步骤中指定你想要发送的邮件。

57、记录注射器(Injector ):注射器主要是针对以下人使用:想利用 Kettle API 和 JAVA 来注射记录到转换中。

58、套接字读入器(Socket Reader):套接字读入器是通过 TCP/IP 协议将数据从一个服务器向另一个服务器传输。

59、套接字输写器(Socket Writer):套接字输写器是通过 TCP/IP 协议将数据从一个服务器向另一个服务器传输。

60、聚合行(Aggregate Rows ):这个步骤允许你在所有行的基础上快速的聚集行。

61、流 XML 输入(Streaming XML Input):这个步骤主要提供值的解析,它信赖于 SAX 解析器,在大文件解析上能提供更好的性能。

它与 XML 输入非常相似,仅仅在内容和字段制表符上略有不同。

62、中止(Abort ):这个步骤允许你在观察输入的时候中止步骤。它的主要用途是错误处理,在一定数量的行流过错误的连接时中止转换。

63、Oracle 批量装载(Oracle bulk loader ):这个步骤允许你大批量加载数据到 Oracle 数据库,它将用一个正确的装载格式,然后调用 Oracle 的 SQL*Loader 数据加载工具加载到指定的表中。