Kettle入门教程

最近作的项目用到了ETL工具Kettle,这个工具至关好用,能够将各类类型数据做为数据流,通过处理后再生成各类类型的数据。正如其名“水壶”,将各个地方的水倒进水壶里,再用水壶倒入不一样的容器。不过一来初学乍用,二来对此任务不是很感兴趣,研究的不是很深刻,多是以一种不科学的方法使用的,但观教程,经常使用的内容彷佛也涉及到了,而且Y大说过,要善于总结,因而有了这篇,做为入门说明吧。javascript

1、下载与安装

官网地址
大概700~800M,下载好解压缩便可。固然,要求JDK环境(彷佛有自带)html

2、任务(.kjb)与转换(.ktr)

 
Kettle工具的主界面-做业

简单地说,一个转换就是一个ETL的过程,而做业则是多个转换、做业的集合,在做业中能够对转换或做业进行调度、定时任务等(听说定时很差用,能够经过其余方式,好比linux的crontab命令,不过实际使用中,这个指令也不大好使,有待查看日志探明缘由。)
我在实际过程当中,写的流程不是很复杂,当数据抽取须要多步骤时,分红多个转换,在集合到一个做业里顺序摆放,而后执行便可,不放到做业里的话,要对多个转换依次执行命令,比较麻烦。java

3、煎锅、勺子、厨房

 
 

是否是莫名其妙,觉得走错了片场?然而这是几个重要的工具名称。python

1)勺子-Spoon.bat/spoon.sh

图形界面工具,就是启动上图主界面的命令行。这个界面应该是JavaFX作的。
这个用来在有图形界面的系统下写任务(如何经过命令行写我不知道,而且我怀疑没有这个可能……),如Windows,写好后,也能够经过该工具进行执行,调试。这个工具最大的问题是启动很慢,而且若是修改了数据库链接的配置,只有从新启动才能生效了。这时候就体现了命令行的优越性。linux

转换窗口
 
简单的转换示例

左边有不少控件可供选择,上图展现了我在使用中常常用到的几个控件。程序员

  • 执行SQL脚本:能够直接在控件里写SQL,并指定执行的库。
 
 
  • 表输入:经过查询数据库的表来获取输入数据流。该控件中也能够写SQL
 
 
  • 表输出:将数据流映射到指定的表中。
     
     

    在这里,指定了数据库链接(后叙)和目标表以后,能够勾选指定数据库字段,如此下方的数据库字段标签的内容就成了可编辑状态(由于表输入和表输出的数据表结构不可能彻底一致,经过这样能够将A表列对应到指定的B表列中)
  • 发送邮件:转换完成后,经过指定的邮箱发送邮件到指定的联系人。
     
     

2)厨房(Kitchen.bat/kitchen.sh)与煎锅(Pan.bat/pan.sh)

这两个指令均可以套用在下面这个命令上sql

./kichen.sh -file ./YourScirpts/demo.kjb
./pan.sh -file ./YourScripts/demo.ktr

做业脚本的后缀是kjb,转换脚本的后缀是ktr
这是最简单的执行方法,有时候,可能须要将日志输出到某个地方,能够加-log参数,不过我在实际使用中,是让运维将指令运行结果日志保存的,而不是经过这个工具,因此暂且忽略(不错,能省事儿则省事儿……)
还有比较高级的用法,即命令行参数替换。在脚本中(好比上图中,表输入的那个地方),能够添加变量:shell

select * from testTable where date=${datetime}

并勾选控件下方的“替换SQL语句里的变量”,保存,双击转换界面空白处,打开转换属性设置窗口:数据库


 
 

在命名参数标签下填入命名参数名称,使用以下命令:运维

./pan.sh -file YourScripts/test.ktr -param:datetime="'2015-01-01'"

实际应用中,经过python计算日期,再调用shell,便可以实现根据指定日期循环执行脚本了。

import datetime
import os
date1=datetime.datetime(2016,11,7)
date2=datetime.datetime(2016,11,4) #5号执行的任务应该处理4号的
while date1 > date2:
 temp = date1- datetime.timedelta(days=1)
 print "处理日期:>>>"+temp.strftime("%Y-%m-%d")+"~"+date1.stftime("%Y-%m-%d")
 os.system("/usr/local/data-integration/pan.sh -file /usr/local/data-integration/Demo/test.ktr -param:date1=\"'"+temp.strftime("%Y-%m-%d")+"'\" -param:date2=\"'"+date1.strftime("%Y-%m-%d")+"'\"")
 date1 = temp
 print ">>>处理完成<<<"

4、设置数据库

在实际使用中,用到了两种方式,一个是直接配置在转换中,一个是配置在jndi配置文件里。
先说第一种:


 
 

这与其余工具链接数据库没有什么不一样,写好改填的内容,点一下测试,若是没有报错,就没问题了。配置好后,在上述过程当中的数据库链接就能看到了(PS,这个见面就是在数据库链接下拉框右边的新建打开的)
这种方式的优势是随用随配,若是须要改变连接,修改此处配置能够当即生效。缺点是若是转换比较多了,一旦须要修改数据源,每一个转换都要进行改动,十分麻烦。因此仍是经过配置文件更为方便些:


 
 

链接名称是为了在转换中好选择进行填写的,填什么都行,我是与JNDI名称相同。JNDI的配置文件在Kettle工具文件夹的根目录下里的simple-jndi里:
 
 

为了方便,我加了不一样的后缀以做区分,使用时再更名。真正生效的只有jdbc.properties,里面内容以下:
 
 

看到这个忽然想起来有件重要的事情没有说,相关的数据库链接驱动,要放在data-integration目录下的lib文件夹内,不然测试链接报错。
我这三个配置分别对应了只读库,中间库,报表库,具体配置不作赘述。如此在数据库链接中,选择JNDI,填入正确的JNDI名称(如TBIN)便可使用。
这种方式的好处是在转换中须要填写的配置只有个名称而已,修改起来也只须要改变配置,切换环境十分方便。缺点如前所言,若是修改了配置文件,还须要重启spoon才能生效,然而这个过程颇为缓慢,本人8G的内存,开起来也得等个好几分钟。。。Java写桌面应用,前途依然任重而道远。好在有命令行的执行方式,能够解决这个问题。

总结

至此,我所会的差很少说完了,其实没有什么难度,不少内容能够经过控件上的字面描述理解。难在过程的设计以及sql的维护等,设计什么的,我没有操太多心,根据负责人的要求left join就over了→_→
在此过程当中,学到了很多shell指令,甚至还写了个python脚本,将我多年前学到的一丢丢python用到了实际中,仍是颇感欣慰的。
以上这些应该能知足基本要求了,实际上还有不少高级内容,好比将做业、转换维护在数据库中(配置资源库),定时任务(双击做业视图下的start控件便可看到),日志输出(指定输出的内容,等级),我并无深究,感受作这个已经超纲了,再深刻就更没意思了。(比起那些只要作了就作到完美的人,我真是太……然而偷懒下来的时光,我用来贡献黑客派了,哈哈~)

 

出处:https://www.jianshu.com/p/4d8171150faf

===========================================================================

本文要点:Kettle的创建数据库链接、使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录。若存在,则更新。

 

Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,能够在Window、Linux、Unix上运行,数据抽取高效稳定。Kettle 中文名称叫水壶,该项目的主程序员MATT 但愿把各类数据放到一个壶里,而后以一种指定的格式流出。Kettle这个ETL工具集,它容许你管理来自不一样数据库的数据,经过提供一个图形化的用户环境来描述你想作什么,而不是你想怎么作。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工做流的控制。(引用百度百科)

一、Kettle的下载与安装(在本文中使用的kettle版本为6.1.0.1-196)

  kettle的最新下载地址:http://community.pentaho.com/projects/data-integration/

二、打开kettle。

  首先解压下载下来的压缩包如:pdi-ce-6.1.0.1-196.zip

  而后打开Spoon.bat,如图所示:

  

  打开后请耐心等待一下子时间。

三、创建转换。

  在文件->新建装换。

  新建转换后在左边的主对象树中创建DB链接用以链接数据库。如图所示:

  

  创建数据库链接的过程与其余数据库管理软件链接数据库相似。

  注意:在数据库连接的过程当中,可能会报某个数据库链接找不到的异常。那是由于你没有对应的数据库连接驱动,请下载对应驱动后,放入kettle的lib文件夹。

四、简单的数据表插入\更新

  (1)新建表插入

  在左边的面板中选择“核心对象”,在核心对象里面选择“输入->表输入”,用鼠标拖动到右边面板。如图所示:

 

 

 

  双击拖过来的表,能够编辑表输入。

  选择数据库链接和编辑sql语句,在这一步能够点击预览,查看本身是否链接正确。

 

  (2)经过插入\更新输出到表。

  在左边面板中选择核心对象、选择“输出->插入\更新”如图所示:

 

  编辑插入更新:

  首先:表输入链接插入更新。

    选中表输入,按住shift键,拖向插入更新。

  而后:双击插入更新,编辑它。

 

  到这里基本上,这个转换就要作完了,能够点击运行查看效果,看是否有误,这个要先保存了才能运行,能够随意保存到任何一个地方。

五、使用做业控制上面装换执行。

  使用做业能够定时或周期性的执行转换,新建一个做业。并从左边面板拖入start 和转换。

  

  双击start能够编辑,能够设置执行时间等等

  点开装换,能够设置须要执行的转换任务,好比能够执行上面咱们作的转换,XXX.ktr

  最后点击运行便可。

 

  到这里,一个简单的经过做业调度的kettle就算作完了。

附录:测试数据表

 

复制代码
 1 -- ----------------------------
 2 DROP TABLE IF EXISTS `student`;
 3 CREATE TABLE `student` (
 4   `userId` int(11) NOT NULL AUTO_INCREMENT,
 5   `userName` varchar(20) DEFAULT NULL,
 6   `userage` int(11) DEFAULT NULL,
 7   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 8   PRIMARY KEY (`userId`)
 9 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
10 
11 -- ----------------------------
12 -- Table structure for student2
13 -- ----------------------------
14 DROP TABLE IF EXISTS `student2`;
15 CREATE TABLE `student2` (
16   `userId` int(11) NOT NULL AUTO_INCREMENT,
17   `userName` varchar(20) DEFAULT NULL,
18   `userage` int(11) DEFAULT NULL,
19   `timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
20   PRIMARY KEY (`userId`)
21 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
复制代码

 

 

出处:https://www.cnblogs.com/qcsy/p/5553801.html

相关文章
相关标签/搜索