Kettle学习大集合

更新时间:2023-03-17 18:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Kettle学习大集合

1. 什么Kettle?

Kettle是一个开源的ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)项目,项目名很有意思,水壶。按项目负责人Matt的说法:把各种数据放到一个壶里,然后呢,以一种你希望的格式流出。Kettle包括三大块: Spoon——转换/工作(transform/job)设计工具 (GUI方式) Kitchen——工作(job)执行器 (命令行方式) Span——转换(trasform)执行器 (命令行方式)

Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高 效稳定。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

2. Kettle简单例子 2.1 下载及安装Kettle

下载地址:http://sourceforge.net/projects/pentaho/files

现在最新的版本是3.6,为了统一版本,建议下载3.2,即下载这个文件pdi-ce-3.2.0-stable.zip。 解压下载下来的文件,把它放在D:\\下面。在D:\\data-integration文件夹里,我们就可以看到Kettle的启动文件Kettle.exe或Spoon.bat。

2.2 启动Kettle

点击D:\\data-integration\\下面的Kettle.exe或Spoon.bat,过一会儿,就会出现Kettle的欢迎界面:

稍等几秒,就会出现Kettle的主界面:

2.3 创建transformation过程

a.配置数据环境

在做这个例子之前,我们需要先配置一下数据源,这个例子中,我们用到了三个数据库,分别是:Oracle、MySql、SQLServer,以及一个文本文件。而且都放置在不同的主机上。

Oralce:ip地址为192.168.1.103,Oracle的实例名为scgtoa,创建语句为: create table userInfo(

id int primary key,

name varchar2(20) unique, age int not null, address varchar2(20) );

insert into userInfo values(1,'aaa',22,'成都市二环路'); insert into userInfo values(2,'东方红',25,'中国北京'); insert into userInfo values(3,'123',19,'广州白云区'); MySql:ip地址为192.168.1.107,数据库名为test2,创建语句为: create database test2;

use test2;

create table login( id int primary key,

realname varchar(20) unique, username varchar(20) unique, password varchar(20) not null, active int default 0 );

insert into login values(1,'aaa','admin','admin',0); insert into login values(2,'东方红','test','test',1); insert into login values(3,'123','xxx123','123456',1); SQLServer:本机,ip为192.168.1.115,创建语句为: create database test3;

use test3;

create table student(

sid varchar(20) primary key, sname varchar(20) unique, teacher varchar(20) not null, );

insert into student values('078','aaa','李老师'); insert into student values('152','东方红','Mr Wu'); insert into student values('034','123','徐老师');

文本文件:名为dbtest.log,位于192.168.1.103\\zhang\\上,即跟Oracle同一个主机。

数据仓库:位于192.168.1.107上,跟MySql一台主机,而且数据库也是MySql,也就是说,MySql上有2个数据库,test2和test4。创建语句为: create database test4;

use test4;

create table inforTotal( id int primary key,

name varchar(20) unique, age int not null, address varchar(20),

username varchar(20) unique, password varchar(20) not null, active int default 0, sid varchar(20) unique,

teacher varchar(20) not null, cat varchar(20), dog varchar(20) );

b.Spoon界面

在主界面,选择没有资源库,进入工作空间。

c.创建transformation文件 1.新建transformation文件

双击左边转换将创建一个新的transformation(也可以通过菜单里面的文件-新建-转换方式新建文件),点击

另存为,保存到本地路径,例如保存到D:/etltest

下,保存文件名为EtltestTrans,kettle默认transformation,文件保存后后缀名为ktr。

2.创建数据库连接

在transformation页面下,点击左边的【主对象树】,双击【DB连接】,进行 数据库连接配置。

在Connection Name下面的数据库里输入连接的名字,如oracle 在Settings里的Host Name里输入主机名,如102.169.1.103 在Settings里的Database Name里输入数据库名,如scgtoa 在 Settings里的User Name里输入数据库用户名,如bbs 在Settings里的Password里输入数据库密码,如bbs

然后点击”Test”按钮测试连接是否成功,如果成功后,点击OK按钮。

同样地,我们创建MySql和SQLServer的连接,如:

最后我们看到这样的界面:

d.抽取、转换、装载过程 1.表输入

在EtltestTrans页面下,点击左侧的【核心对象】,点击【输入】,选中【表输入】,拖动到主窗口释放鼠标。

双击工作区中【表输入】图标,数据库连接选择刚刚创建好的连接名为Oracle的数据库连接,在主窗口写入对应的查询语句: SELECT ID , NAME , AGE

, ADDRESS

FROM USERINFO ORDER BY NAME

步骤名称写为:oracle - userInfo表输入

可以通过预览,查看这个步骤输出的数据。

同样地,我们建立一个MySql的表输入组件:查询语句为 SELECT id

, realname , username , password , active FROM login

ORDER BY realname

步骤名称为:mysql - login表输入

2.表连接查询

在EtltestTrans页面下,点击左侧的【核心对象】,点击【连接】,选中【Merge Join】,拖动到主窗口释放鼠标。如图:

然后,点击表输入,按住shift键,再拖动鼠标到Merge Join,这时就实现了在两个组建之间的连线。如图:

双击工作区中的Merge Join,在出现的窗口里: 步骤名称命名为:表连接查询

第一个步骤选择:oracle - userInfo表输入 第二个步骤选择:mysql - login表输入 连接类型选择:FULL OUTER

在连接字段里,第一个步骤写:NAME,第二个步骤写:realname

3.表连接查询与表输入再次连接查询 SQLServer表输入,如图:

4.远程文本文件输入

在EtltestTrans页面下,点击左侧的【核心对象】,点击【输入】,选中【文本文件输入】,拖动到主窗口释放鼠标。 双击这个图标,进入编辑窗口:

输入步骤名称:远程文本文件输入

在选中的文件里的文件/目录下面输入,文件所在的路径,注:这个路径可以通过本机的网上邻居访问。 5.第三次表连接查询

再次拖入一个表连接查询图标,将上次的查询结果与远程文本文件相连,再进行一次表连接查询。

6.插入/更新

在EtltestTrans页面下,点击左侧的【核心对象】,点击【输出】,选中【插入/更新】,拖动到主窗口释放鼠标。将它与第三次表连接查询进行连线。 双击”插入/更新”图标,进入编辑窗口。

数据库连接选择数据仓库的数据库,目标表选择对应的infortaotal表,在查询关键字里,表字段写name(表示仓库表里的字段),流里的字段1里写入NAME(即上一个步骤输入的内容里的NAME)。比较符用”=”号。点击Edit mapping按钮,将表字段,与流利的字段进行对应,即流里字段里的值输入到表里的哪个字段里去。

行扁平化

这个步骤允许你扁平化预备的数据。 示例:

上面的示例,步骤设置如下:

值映射

这个步骤简单的映射字符串,从一个值映射到另一个值。

被冻结的步骤(Blocking Step)

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

记录关联(笛卡尔输出)

这个步骤允许你组合步骤中所有的行。

1、 临时目录:如果你想更多的行,指定系统存储临时文件的目录。 2、 最大缓存大小:系统从临时文件读取数据的缓存大小。 3、 读取的主要步骤:指定读取最多数据的步骤名称。 4、 条件:你可以指定复杂的条件来限制输出行数。

数据库连接

这个步骤允许你使用先前的步骤的数据,运行一个数据库查询。 能够指定查询参数: 在sql查询中用“?”,运行查询时使用数据网格中的数据。

1、 Number of rows to return :0代表所有行,其他数字限制行的输出。 2、 外连接?:选中,则总会返回一个结果,就算查询脚本没有结果。 3、 获取字段:获取来自上一个步骤的数据。

合并记录

这个步骤允许你比较两个行流。如果你想在两个不同时间比较数据,这是非常有用的。它常被用于数据仓库源系统没有包含最后更新日期的情况。两个行流被合并,一个是引用流(旧数据),一个比较流(新数据)。每次都是行的最后版本通过下一个步骤。行有以下标记:

1、 “identical”:关键字在两个流中都存在,并且值相同。 2、 “changed”:关键字在两个流中都存在,但是一个或者更多的值不同 3、 “new”:引用流中没有找到关键字。 4、 “deleted”:比较流中没有找到关键字。

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

排序合并(Sorted Merge)

这个步骤合并来自多个输入步骤的数据行,并且这些行用指定的关键字排序。包括以下选项: 1、 字段:指定排序的关键字段。

Merge Join(合并连接)

这个步骤将来自两个不同步骤输入的数据执行一个高效的合并。合并选项包括Inner、left outer、right outer、full outer。

备注:这个步骤将输入的行按指定的字段存储。连接时连接字段必须有序。

Java Script值(Modified Java Script Value)

这个步骤允许你用JavaScript语言做复杂的运算,改进的js效率更高,更易用。 1、 插入字段:插入字段及字段的值。 2、 测试脚本:测试脚本的语法。

3、 获取变量:获取最新的变量并且插入到“字段”网格中 4、 js函数见附录1。

改进的js针对可用的脚本、函数、输入字段和输出字段,提供一个树菜单浏览。 1、 Transformation Script:展示你在步骤中创建的脚本列表。 2、 Transformation Constants(转换常量):一个包含

SKIP_TRANSFORMATION,ERROR_TRANSFORMATION,CONTINUE_TRANSFORMATION等静态常量的列表。

3、 Transformation Functions:包含多种String,Numeric,Date,Logic以及特殊函数,你可

以在创建脚本的时候使用它。

4、 Input fields:步骤输入字段列表。双击或者拖拉可以将字段插入到你的脚本中。 5、 Output fields:步骤输出的字段。

执行SQL语句

这个步骤中你可以执行sql脚本(执行增删改脚本DDL等),或者在转换初始化的时候执行,或者在步骤的每一个输入行执行。

1、 执行每一行:读取上一步骤传来的每一行时都执行一次sql脚本。 2、 参数:用来给sql中的“?”赋值。

3、 包含插入状态的字段:该字段值为执行sql语句插入的行数。 4、 包含更新状态的字段:该字段值为执行sql语句更新的行数。 5、 包含删除状态的字段:该字段值为执行sql语句删除的行数。 6、 包含读状态的字段:该字段值为执行sql语句读数据的行数。

注意:该步骤主要用来对数据进行增、删、改,执行对数据的查询操作,使用“表输入”步骤(可以执行任何查询语句,包含连接、分组、排序等)。 例子:

本文来源:https://www.bwwdw.com/article/a48f.html

Top