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下载地址:现在最新的版本是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,创建语句为:createtableuserInfo(idintprimarykey,namevarchar2(20)unique,ageintnotnull,addressvarchar2(20));insertintouserInfovalues(1,'aaa',22,'成都市二环路');insertintouserInfovalues(2,'东方红',25,'中国北京');insertintouserInfovalues(3,'123',19,'广州白云区');MySql:ip地址为192.168.1.107,数据库名为test2,创建语句为:createdatabasetest2;usetest2;createtablelogin(idintprimarykey,realnamevarchar(20)unique,usernamevarchar(20)unique,passwordvarchar(20)notnull,activeintdefault0);insertintologinvalues(1,'aaa','admin','admin',0);insertintologinvalues(2,'东方红','test','test',1);insertintologinvalues(3,'123','xxx123','123456',1);SQLServer:本机,ip为192.168.1.115,创建语句为:createdatabasetest3;usetest3;createtablestudent(sidvarchar(20)primarykey,snamevarchar(20)unique,teachervarchar(20)notnull,);insertintostudentvalues('078','aaa','李老师');insertintostudentvalues('152','东方红','MrWu');insertintostudentvalues('034','123','徐老师');文本文件:名为dbtest.log,位于192.168.1.103\zhang\上,即跟Oracle同一个主机。数据仓库:位于192.168.1.107上,跟MySql一台主机,而且数据库也是MySql,也就是说,MySql上有2个数据库,test2和test4。创建语句为:createdatabasetest4;usetest4;createtableinforTotal(idintprimarykey,namevarchar(20)unique,ageintnotnull,addressvarchar(20),usernamevarchar(20)unique,passwordvarchar(20)notnull,activeintdefault0,sidvarchar(20)unique,teachervarchar(20)notnull,catvarchar(20),dogvarchar(20));b.Spoon界面在主界面,选择没有资源库,进入工作空间。c.创建transformation文件1.新建transformation文件双击左边转换将创建一个新的transformation(也可以通过菜单里面的文件-新建-转换方式新建文件),点击另存为,保存到本地路径,例如保存到D:/etltest下,保存文件名为EtltestTrans,kettle默认transformation,文件保存后后缀名为ktr。2.创建数据库连接在transformation页面下,点击左边的【主对象树】,双击【DB连接】,进行数据库连接配置。在ConnectionName下面的数据库里输入连接的名字,如oracle在Settings里的HostName里输入主机名,如102.169.1.103在Settings里的DatabaseName里输入数据库名,如scgtoa在Settings里的UserName里输入数据库用户名,如bbs在Settings里的Password里输入数据库密码,如bbs然后点击”Test”按钮测试连接是否成功,如果成功后,点击OK按钮。同样地,我们创建MySql和SQLServer的连接,如:最后我们看到这样的界面:d.抽取、转换、装载过程1.表输入在EtltestTrans页面下,点击左侧的【核心对象】,点击【输入】,选中【表输入】,拖动到主窗口释放鼠标。双击工作区中【表输入】图标,数据库连接选择刚刚创建好的连接名为Oracle的数据库连接,在主窗口写入对应的查询语句:SELECTID,NAME,AGE,ADDRESSFROMUSERINFOORDERBYNAME步骤名称写为:oracle-userInfo表输入可以通过预览,查看这个步骤输出的数据。同样地,我们建立一个MySql的表输入组件:查询语句为SELECTid,realname,username,password,activeFROMloginORDERBYrealname步骤名称为:mysql-login表输入2.表连接查询在EtltestTrans页面下,点击左侧的【核心对象】,点击【连接】,选中【MergeJoin】,拖动到主窗口释放鼠标。如图:然后,点击表输入,按住shift键,再拖动鼠标到MergeJoin,这时就实现了在两个组建之间的连线。如图:双击工作区中的MergeJoin,在出现的窗口里:步骤名称命名为:表连接查询第一个步骤选择:oracle-userInfo表输入第二个步骤选择:mysql-login表输入连接类型选择:FULLOUTER在连接字段里,第一个步骤写:NAME,第二个步骤写:realname3.表连接查询与表输入再次连接查询SQLServer表输入,如图:4.远程文本文件输入在EtltestTrans页面下,点击左侧的【核心对象】,点击【输入】,选中【文本文件输入】,拖动到主窗口释放鼠标。双击这个图标,进入编辑窗口:输入步骤名称:远程文本文件输入在选中的文件里的文件/目录下面输入,文件所在的路径,注:这个路径可以通过本机的网上邻居访问。5.第三次表连接查询再次拖入一个表连接查询图标,将上次的查询结果与远程文本文件相连,再进行一次表连接查询。6.插入/更新在EtltestTrans页面下,点击左侧的【核心对象】,点击【输出】,选中【插入/更新】,拖动到主窗口释放鼠标。将它与第三次表连接查询进行连线。双击”插入/更新”图标,进入编辑窗口。数据库连接选择数据仓库的数据库,目标表选择对应的infortaotal表,在查询关键字里,表字段写name(表示仓库表里的字段),流里的字段1里写入NAME(即上一个步骤输入的内容里的NAME)。比较符用”=”号。点击Editmapping按钮,将表字段,与流利的字段进行对应,即流里字段里的值输入到表里的哪个字段里去。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/fileD:\etltest\EtltestTrans.ktr2.kjb的运行:运行job文件是通过kitchen.bat来运行的。打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration,然后执行文件的命令为:kitchen/fileD:\etltest\jobOK.kjb2.bat文件运行如果觉得通过打开命令行输入麻烦,我们可以把它写在一个批处理文件中。如: