kettle入门教程

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

一、下载与安装

官网地址
大概700~800M,下载好解压缩即可。当然,要求JDK环境(似乎有自带)

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

 
Kettle工具的主界面-作业

简单地说,一个转换就是一个ETL的过程,而作业则是多个转换、作业的集合,在作业中可以对转换或作业进行调度、定时任务等(据说定时不好用,可以通过其他方式,比如linux的crontab命令,不过实际使用中,这个指令也不大好使,有待查看日志探明原因。)
我在实际过程中,写的流程不是很复杂,当数据抽取需要多步骤时,分成多个转换,在集合到一个作业里顺序摆放,然后执行即可,不放到作业里的话,要对多个转换依次执行命令,比较麻烦。

三、煎锅、勺子、厨房

 
 

是不是莫名其妙,以为走错了片场?然而这是几个重要的工具名称。

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

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

转换窗口
 
简单的转换示例

左边有很多控件可供选择,上图展示了我在使用中经常用到的几个控件。

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

    在这里,指定了数据库连接(后叙)和目标表之后,可以勾选指定数据库字段,如此下方的数据库字段标签的内容就成了可编辑状态(因为表输入和表输出的数据表结构不可能完全一致,通过这样可以将A表列对应到指定的B表列中)
  • 发送邮件:转换完成后,通过指定的邮箱发送邮件到指定的联系人。
     
     
2)厨房(Kitchen.bat/kitchen.sh)与煎锅(Pan.bat/pan.sh)

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

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

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

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 ">>>处理完成<<<" 

四、设置数据库

在实际使用中,用到了两种方式,一个是直接配置在转换中,一个是配置在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则完成整个工作流的控制。(引用百度百科)

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

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

2、打开kettle。

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

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

  

  打开后请耐心等待一会儿时间。

3、建立转换。

  在文件->新建装换。

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

  

  建立数据库连接的过程与其他数据库管理软件连接数据库类似。

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

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

  (1)新建表插入

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

 

 

 

  双击拖过来的表,可以编辑表输入。

  选择数据库连接和编辑sql语句,在这一步可以点击预览,查看自己是否连接正确。

 

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

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

 

  编辑插入更新:

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

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

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

 

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

5、使用作业控制上面装换执行。

  使用作业可以定时或周期性的执行转换,新建一个作业。并从左边面板拖入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/s88888888/p/11578679.html

Kettle工具使用 培训教程 目录 ETL 简介 KETTLE 简介 KETTLE 安装和运行 KETTLE 菜单简介 KETTLE 案例讲解 控件介绍 日志介绍 一、ETL 简介 ETL 概念简介 ETL相关的质量特性 ETL 在数据仓库项目中的位置 二、kettle 工具简介 Kettle是一款国外开源的ETL工具, 纯java编写,可以在Window、 Linux、Unix上运行,数据抽取高效 稳定 Kettle中有两种脚本文件, transformation(转换)和job (作业),transformation完成 针对数据的基础转换,job则完 成整个工作流的控制。 Kettle 工具的模型架构 kettle 工具的优缺点 优点: 系统开源、免费 安装方便、图形化安装 支持多种数据源 支持多种字符集 具有简单的权限管理 支持各种复杂数据转换 缺点 稳定性差 性能差 缺乏元数据管理 KETTLE 的下载 Kettle可以在 http://kettle.pentaho.org/网站下载 下载kettle压缩包,因kettle为绿色软 件,解压缩到任意本地路径即可 Kettle 运行步骤 双击运行 kettle 文件夹下的 Kettle 文件,出 现 kettle 欢迎界面。 创建资料库(可省略) 创建数据库连接 创建转换 创建Jobs,进行流程化控制 KETTLE 的使用 进入到Kettle目录,如果Kettle部署在windows环 境下,双击运行spoon.bat文件,出现如下界面: Kettle 使用步骤 (1)创建转换 大概的来说一般由三步组成: 输入+转换等中间步骤+输出 (2)创建作业 将已经创建好的转换和相关的作业组件串联起来, 形成一个整体的任务。 Kettle 的执行顺序 作业:分串行执行和并行执行,串行执行是先执行完其中一条线再执 行另一条线,并行是两条线同时执行,同一条线上的两个步聚会先执 行前面的再执行后面的。每个步骤执行结果分两种:true(成 功)/false(失败),根据返回结果可以控制流程走向。 转换:一开始所有步骤同时运行,记录会从最前端的步骤向后传递, 传递到相应步骤则该记录被该步骤作相应处理,处理完成再把记录往 后传递,记录传递分复制和分发两种模式。 KETTLE 的目录介绍 根目录文件夹介绍: 【Docs】存放Kettle各种语言版本的API文档。 【 Launcher 】存放Kettle Spoon加载的一些配置信息。 【 Lib 】存放Kettle所使用到的第三方jar包。比如:数据库驱动包, 如缺少时需要把对应的数据库驱动包放入此文件夹中。 【 Libswt 】存放Kettle对应不同平台的相关UI jar包。 【 Plugins 】存放Kettle自定义插件时,需要把自定义好的插件打成 jar放在此目录。 【 Pwd 】存放Kettle配置集群时所需要的配置文件与加密文件。 【 Samples 】存放Kettle自带的一些Job与Trans实例。 【 Simple-jndi 】存放Kettle使用JNDI方式连接数据源方式的文件 存放目录。目录下的jdbc.properties配置文件中有相应的实例提供 参考。 【 Ui 】存放Kettle初始化使用到的图片及配置信息。 Kettle 菜单介绍-transformation Main Tree菜单列出的是一个 transformation中基本的属性, 可以通过各个节点来查看。 DB连接:显示当前transformation 中的数据库连接,每一个 transformation的数据库连接都需要 单独配置。 Steps:一个transformation中应用 到的环节列表 Hops:一个transformation中应用 到的节点连接列表 转换的菜单介绍: Kettle 菜单介绍-transformation Core Objects菜单列出的是 transformation中可以调用 的环节列表,可以通过鼠标 拖动的方式对环节进行添加。 Input:输入环节 Output:输出环节 Lookup:查询环节 Transform:转化环节 Joins:连接环节 Scripting:脚本环节 转换的菜单介绍: Kettle 菜单介绍-transformation 每一个环节可以通过鼠标拖动来将环节添加到主窗 口中。 并可通过shift+鼠标拖动,实现环节之间的连接。 Kettle 菜单介绍-transformation 转换的常用环节介绍: Kettle 菜单介绍-job Main Tree菜单列出的是一 个Job中基本的属性,可以 通过各个节点来查看。 DB连接:显示当前Job中的数据 库连接,每一个Job的数据库连接 都
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值