Kettle例子加文档

rxpcj1

贡献于2011-02-26

字数:5192 关键词: 数据挖掘

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按钮,将表字段,与流利的字段进行对应,即流里字段里的值输入到表里的哪个字段里去。 e.执行transformation 这样,我们的transformation就创建完成了,这时,我们可以点击运行,测试创建的transformation是否成功。 点击这个按钮,就会执行ETL过程,这时我们可以查看数据仓库的表,如果有数据,并符合我们的要求,那么说明我们的transformation成功了。 2.4 创建job过程 Job就是把一个或多个transformation按照一定的顺序组合起来,形成一个流程。 a.创建job文件 通过菜单里的“文件-新建-作业”就可以创建一个job文件,点击另存为D:\etltest\jobtest.kjb。 b.job流程 1.拖入图标并连线 在EtlscriptJob页面,点击【核心对象】,点击【通用】,选中【START】拖动到主窗口释放鼠标,再选中一个【Transformation】,拖动到主窗口释放鼠标, 建立【START】与【Transformation】之间的连接。 2. 编辑”开始”流程 双击”START”图标,就进入编辑窗口。 我们可以选择这个job是否是重复的,如果是重复的,需要选择重复的类型,在根据类型判断是否需要编辑时间间隔。 3. 编辑transformation流程 双击”transformation”图标,就进入编辑窗口。 其中,我们要输入job名称:如jobOK,点击转换文件名后面的按钮,浏览我们我们要转换的文件,并选中。其他的选项可以根据实际需要再进行配置。 点击确定按钮,退出编辑窗口。 c.运行job 这时一个简单的job流程就建立好了,这时我们点击按钮,就可以运行这个job了。如图: d.什么时候用Job 这个job跟上面的转换其实是完成了同样的工作,只不过job可以把多个transformation放在一起组成一个流程,什么时候用job或transformation,是根据需要来定的,比如只有一个transformation时,就可以直接用transformation,但如果这个转换需要定时,那么就必须用job了。多个transformation需要组成一个流程时也必须用job。 2.5 命令行运行ktr和kjb 在上面的过程中,我们都是在IDE工具中,直接点击按钮进行运行文件的,但在实际中,我们需要脱离IDE,进行单独的运行,这时就必须用到命令行来运行文件了。 1.cmd方式运行 1.ktr的运行:运行transformation文件是通过Pan.bat来运行的。 打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration,然后执行文件的命令为:pan /file D:\etltest\EtltestTrans.ktr 2.kjb的运行:运行job文件是通过kitchen.bat来运行的。 打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration,然后执行文件的命令为:kitchen /file D:\etltest\jobOK.kjb 2.bat文件运行 如果觉得通过打开命令行输入麻烦,我们可以把它写在一个批处理文件中。如: d: cd D:\data-integration pan /file D:\etltest\EtltestTrans.ktr 把这些内容保存在pan.bat里,通过双击panKtr.bat就可以执行ktr文件了。 同样地,我们把下面的内容: d: cd D:\data-integration kitchen /file D:\etltest\jobOK.kjb 保存在kitchenKjb.bat里,双击它,也可以执行kjb文件。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享文档获得金币 ]
12 人已下载

下载文档

相关文档