Kettle入门教程

mysql驱动下载sqlserver驱动下载

最近做的项目用到了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控件即可看到),日志输出(指定输出的内容,等级),我并没有深究,感觉做这个已经超纲了,再深入就更没意思了。(比起那些只要做了就做到完美的人,我真是太……然而偷懒下来的时光,我用来贡献黑客派了,哈哈~)

作者:O型血橙 链接:http://www.jianshu.com/p/4d8171150faf 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间: 2024-10-16 02:22:06

Kettle入门教程的相关文章

&lt;zz&gt;bower入门教程

from http://www.cnblogs.com/xiaokai0203/p/5891927.html bower入门教程 什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍. 准备工作 安装node环境:node.js 安装Git,bower从远程git仓库获取代码包:git简易指南 安装bower 使用

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

SEO学习步骤总结入门教程

在这里,简单的把SEO的学习步骤说了一下,今天我们一起来把SEO学习步骤每一步的主要内容拿出来重点强调一下并做个总结.  定位好网站内容以后把你所想做排名的关键词定位好,关键词里包括了主关键词和长尾关键词.这里重点强调了不可以忽略长尾关键词的作用.  对于一个好的网站结构可以让搜索引擎蜘蛛顺利的抓取我网站的内容,进而达到被收录的目的.比较有利于蜘蛛抓取的网站结构,一般来说,收录数量相对来说会比较多.,只有让搜索引擎收录你网站页面那搜索引擎才会释放出来,这样网站关键词才可能有排名.  这里重点要注

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert

Android基础入门教程——2.3.12 Date &amp; Time组件(下)

Android基础入门教程--2.3.12 Date & Time组件(下) 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来继续学习Android系统给我们提供的几个原生的Date & Time组件,他们分别是: DatePicker(日期选择器),TimePicker(时间选择器),CalendarView(日期视图),好吧, 其实一开始让我扣这几个玩意我是拒绝的,因为在我的印象里,他们是这样的: 简直把我丑哭了,有木有,终于知道为什么那么多人喜欢自定义这种类型的

Android基础入门教程——2.1 View与ViewGroup的概念

Android基础入门教程--2.1 View与ViewGroup的概念 标签(空格分隔): Android基础入门教程 本节引言: 告别了第一章,迎来第二章--Android中的UI(User Interface)组件的详解, 而本节我们要学习的是所有控件的父类View和ViewGroup类!突发奇想,直接翻译官方文档对 这两个东西的介绍吧,对了,天朝原因,google上不去,Android developer上不去,我们可以 改hosts或者用vpn代理,当然也可以像笔者一样使用国内的API

[EA]入门教程

一.简介 生命周期软件设计方案--Enterprise Architect是以目标为导向的软件系统.它覆盖了系统开发的整个周期,除了开发类模型之外,还包括事务进程分析,使用案例需求,动态模型,组件和布局,系统管理,非功能需求,用户界面设计,测试和维护等.为整个团队提供高级的UML 2.0建模工具. EA为用户提供一个高性能.直观的工作界面,联合UML 2.0最新规范,为桌面电脑工作人员.开发和应用团队打造先进的软件建模方案.该产品不仅特性丰富,而且性价比极高,可以用来配备您的整个工作团队,包括分