日期:2014-05-16  浏览次数:20450 次

kettle4.1学习使用笔记

最近公司要用一个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, 你将获得 5x4000 row inserts/sec。集群的效果非常好.

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

8 . 数据库分