kettle4.1学习使用笔记

Posted on Posted in kettle经验分享

最近公司要用一个ETL工具,Google了一下,发现Kettle用的人好像比较多,于是下载下来试用了一下!

首先从网上下载了一些教程学习,主要是针对Spoon设计器的,大部分都比较简单,然后自己摸索,发现Kettle的功能还是很强大的,但是也发现了一些问题。

 

一、表输出

使用Spoon设计器的时候,在转换当中,有一个表输出的功能,如果不勾选Specify database field复选框,则表输出的字段必须要和输入的字段名称一致,否则会出错,即使是配置好映射关系也不行。表输出主要是把数据存到一个数据库表中,不会考虑记录是否存在,故要考虑是否重复时,应该使用插入/更新

 

二、资源库 

Kettle在Spoon中的设计的转换或Job可以保存为XML文件,也可以保存到资源库中,在Tools下可以找到该选项

资源库分为数据库类型和目录类型

数据库类型就是把Kettle设计的转换或者Job存到数据库当中去

这个版本的资源库表相当的多,差不多有40多个,

下面是我从网上找的一段介绍,主要的表都有,自己觉得看一下资源库表的字段和内容对理解Kettle有一定的好处,特别是API:

 

1. R_DATABASE            R_DATABASE_ATIRIBUTE        R_DATABASE_CONTYPE        R_DATABASE_TYPE
2. R_JOB            R_JOB_HOP            R_JOBENTRY            R_JOBENTRY_ATIRIBUTE            R_JOBENTRY_TYPE
3. R_LOG            R_LOGLEVEL
4. R_STEP            R_STEP_DATABASE
5. R_TRANS_ATIRIBUTE        R_TRANS_HOP            R_TRANS_CONDITION
6. R_USER            R_VALUE                R_PERMISSION
7. R_CLUSTER            R_CLUSTER_SLAVE            R_SLAVE
8. R_PARTITION            R_PARTITION_SCHEMA

1 . database的链接信息.在R_DATABASE_TYPE 表里面包含了所有支持的数据库链接信息,一共是25种,算是支持非常的多了.

2. 任务设计部分的表,R_JOB_HOP 是指两个数据之间的链接部分, R_JOBENTRY_TYPE
是目前支持的操作种类,一共有27种,包括Transformation , Job , Shell , Mail , SQL ,FTP
,Table exists ,File Exists , JavaScript , Secure FTP , HTTP , Create
File , Delete File , Wait for File , Put a file with SFTP , File Compare
, BulkLoad into Mysql , Display Msgbox Info , Wait for , Zip file , XSL
Transformatio, BulkLoad from Mysql into File , Abort Job , Get mails
from POP , Ping a host , Dummy Job Entry .
其中BulkLoad 只跟Mysql有关,我感觉很奇怪,BulkLoad
是数据库批量处理的方式,大型数据库都是支持的,比如oracle就有sqlloader来支持批量处理,其他的大型数据库应该也有吧,而且在transform里面kettle也有oracle的支持,在任务设计的时候就只有mysql的支持,不知道什么原因.
最后一个Dummy Job Entry 就是什么都不做.

3. Log记录,loglevel 一共有6种,Nothing at all , Minimal loggin , Basic
loggin , Detailed loggin , Debugging , RowLevel(very
detailed).根据你自己的需要来选择log的级别.

4. 每一步操作的表格与你使用的数据库

5. 转换的定义.一共有70种不同的转化,你不会想看到全部列出来的,其中有几种很有用的,比如DimensionLookup , 它的解释就是”在一个数据仓库里更新一个渐变维,或者在这个维里查询信息.
还有基于关键字删除记录,
cuebOutput, 把数据写入一个cube,
从一个excel文件读数据,执行一个sql脚本,调用数据库的储存过程,
OraBulkLoader ,调用oracle 的bulk loader to load data ,(应该是指Oracle的SQLLOADER吧).
ProSAPCONN, 从一个SAP系统取数据.
MergeRows,合并两个数据流, 并根据某个关键字排序.  这两个数据流被比较,以标识相等的、变更的、删除的和新建的记录.

插一句关于merge的概念,从网上copy下来的:
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

6. 用户与权限.一开始建立的用户有两种,admin和guest ,权限有5种,Read only access , Administrator , Use transformations , Use Jobs , Use schemas .

7. pentaho官方网站上面有一个新闻是关于在mysql的
Kettle集群新记录:
最近Kettle集群基于 Amazon Elastic Computing Cloud做了一次测试,单台服务器输出4000 rows/sec
,数据库为MySQL. 如果你发送数据通过sockets从一个master到5个slave servers, 你将获得 5×4000 row
inserts/sec。集群的效果非常好.

我个人也做过测试。数据库是oracle 10.2.0.1,内网连接,从一台机器的oracle到本地机器,没有集群,速度也大概是4000 多一点 ,数据量大概是16万。

8 . 数据库分区是数据库的高级特性之一,oracle的XE版和Enterprise版本的有一个差别就是XE版不支持分区。

三、kettle与应用程序的集成

kettle是java开源的ETL工具,因此可以很容易的与java项目进行集成,

我主要是参考了这篇文章http://kettleking.iteye.com/blog/1108451,其中提到的Pentaho Kettle Solutions源码,下载下来可以参考,

 

 

四、日志部分:在进行数据转换的时候,日志是一个非常重要的部分,在Spoon中我们可以看到数据处理情况,但是如果我们把Kettle集成到项目中,就需要我们把处理情况存到日志表里了。资源库里有一个叫r_LOG的表,但是好像没有用到。真正的日志设置是在转换属性里的设置

其中有四个日志标准,Transformation,Step,performance,logging channels,各个字段都有英文的详细说明,

如果数据库中没有这张表,需要点SQL按钮,kettle会在数据库中建立这张表,每一个标准需要新建立一张不同表

 

五:Job的日志问题

Job的功能比转换强大很多,job得到的日志记录是根据转换的日志设置得到的,我在用的时候发现如果job不设置重复,则没有问题,资源库中的日志记录是正确的,但是如果设置为重复,则日志中logdate的日期在变化,但是LINES_READ等字段为空,不会有值,

还有就是在日志设置时不能勾选LOG_FIELD字段,否则会报错。

六:出错处理

在转换过程中,如果有一条记录的长度不符合目标表,无法插入,则运行会自动停止,在日志表中的ERRORS字段中会显示出出错的个数

除非设置了错误处理,在某一步右键,点击定义错误处理

 

 

此时,如果有些记录不符合条件,则会把不符合条件的记录输出到另外的表中,你也可以选择输出到文件中去,同时日志表的LINES_REJECTED会显示出不符合条件的个数,此时ERRORS字段的值为0

 

这是我最近学习使用过程中碰到的一些问题,自己摸索的经验,做个笔记,以后好复习。