ETL工具kettl实际中的一些应用说明Word文件下载.docx
《ETL工具kettl实际中的一些应用说明Word文件下载.docx》由会员分享,可在线阅读,更多相关《ETL工具kettl实际中的一些应用说明Word文件下载.docx(41页珍藏版)》请在冰豆网上搜索。
将会看到如下页面:
这个就是本地的页面,比数据库简单多了,选择一下存放路径,给它一个ID号和名称,点击OK就可以了。
资源库建好之后就会进入到主页面了:
这个就是主页面了,表面上是空空如也的。
关于资源库的设置就就讲到这里了,关于更多的介绍请参照官方说明文档!
二:
实现增量更新的方法
Kettle工具并没有提供增量更新的选项,这个是要根据你的策略来实现的。
基本的策略是根据时间字段来做增量更新。
接下来我们就如何根据时间字段做增量更新。
要实现增量更新的前提必须是原表必须要有一个时间字段,然后目标表根据这个时间字段来做查询和更新。
(具体思想请参照开源ETL工具之增量更新设计技巧文档)
如图:
我将一一解释一下各个选项的具体作用。
第一个表输入:
这个是要获取目标表要做增量更新的时间字段的最大值,这个值将会传递给下一个表输入。
此查询必须要保证只能传送一个值。
第二个表输入:
这个就是对原表的查询,要注意SQL语句里面的where子句。
Where子句里面的判断字段就是做增量更新的时间字段,值就是前面一个表输入传递过来的。
此时判断的值要用?
来代替,
这两个选项要这样设置。
表输出:
这里就是要进行更新的目标表了,也就是第一个表输入的表。
里面具体的一些选项请参照kettle工具说明手册。
以上就是增量更新的实现方法。
三:
JOB定时的实现方法
我们在实际应用当中往往要实现定时的功能,kettle提供了定时的功能,这个只能在任务里面实现定时的功能。
见如下图:
在JOB里面的start选项里面提供了定时机制,可以根据你的需求来选择你需要的定时类型
这里要注意一下,要定时的时候一定要把重复的按钮给勾选上。
这里是通过kettle提供的机制来进行定时的,另一种定时的机制是依靠写脚本语句来定时调用kettle脚本。
(这种我们在后面会在脚本调用介绍到)
四:
kettle变量的设置与获取
变量在kettle里面使用的比较频繁,这里我就做一下简单的介绍,具体的变量设置请根据实际情况来设置。
我这里的案例是获取系统时间,然后分别设置四个变量,这四个变量分别代表着“年”、“月”、“日”、“时”。
如下图:
变量的相关选项在转换里面中的作业里面。
我获取的是系统信息是:
系统日期(关于这个选项请参看kettle手册)
为了达到我之前的需求,我在这里运用了kettle另一个功能。
中的javascript脚本选项。
这个步骤是讲系统时间认为的分割为四个字段。
这四个字段将会作为变量的值传递到下一个步骤。
(关于这个选项请参看kettle手册)
接下来就是到设置变量这个环节了。
这里面可以设置多个变量,第一列是字段名称(是前面传过来的值),第二列是变量名(此后可以用变量名调用变量),第三是变量的活动类型(一般选择是作为全局变量)
第四列是给变量设置默认值。
以上就是变量设置的相关介绍,变量在使用之前必须先执行这个变量设置的转换,这样在后面才能实现对变量的调用。
关于变量的获取,这个在选项中只要有
这个标志的都是可以用变量的,变量的获取可以使用CTRL+ALT+SPACE快捷键来选择你所需要的变量名。
五:
通过shell脚本调用kettle文件
在部署有kettle工具的机器上可以通过写脚本文件来调用kettle文件,这样就能实现不打开kettle工具而后台实现kettle文件的运行。
在kettle工具的文件下有这样两个文件
一下就是我在linux系统下写的一个脚本调用的案例:
#!
/bin/sh
./etc/profile
sh/sybase/data-integration/kitchen.sh-rep=111-user=admin-pass=admin-job=EXCL-dir="
/EXCL/"
-level=basic>
/sybase/pdi/EXCLlog.txt
~
就关于几个参数做一下介绍。
sh/sybase/data-integration/kitchen.sh——调用kettle文件下的kitchen.sh文件
-rep=111——资源库ID
-user=admin——资源库登陆用户
-pass=admin——登陆密码
-job=EXCL——调用JOB的名称
-dir="
——JOB的存放路径
-level=basic>
/sybase/pdi/EXCLlog.txt——kettle日志写入到文件中
相关的一些参数的详细说明如下:
Options:
-rep=Repositoryname
-user=Repositoryusername
-pass=Repositorypassword
-job=Thenameofthejobtolaunch
-dir=Thedirectory(dontforgettheleading/)
-file=Thefilename(JobXML)tolaunch
-level=Thelogginglevel(Basic,Detailed,Debug,Rowlevel,Error,Nothing)
-logfile=Theloggingfiletowriteto
-listdir=Listthedirectoriesintherepository
-listjobs=Listthejobsinthespecifieddirectory
-listrep=Listtheavailablerepositories
-norep=Donotlogintotherepository
-version=showtheversion,revisionandbuilddate
-param=Setanamedparameter<
NAME>
=<
VALUE>
.Forexample-param:
FOO=bar
-listparam=Listinformationconcerningthedefinedparametersinthespecifiedjob.
-export=Exportsalllinkedresourcesofthespecifiedjob.TheargumentisthenameofaZIPfile.
-maxloglines=ThemaximumnumberofloglinesthatarekeptinternallybyKettle.Setto0tokeepallrows(default)
-maxlogtimeout=Themaximumage(inminutes)ofaloglinewhilebeingkeptinternallybyKettle.Setto0tokeepallrowsindefinitely(default)
在linux系统中可以使用crontab命令来做定时,下面就简单介绍一下这个命令。
crontab命令的功能是在一定的时间间隔调度一些命令的执行。
在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。
每个用户可以建立自己的调度crontab。
crontab命令有三种形式的命令行结构:
crontab[-uuser][file]
crontab[-uuser][-e|-l|-r]
crontab-l-u[-e|-l|-r]第一个命令行中,file是命令文件的名字。
如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;
如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。
命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab;
命令行中-l选项的作用是显示用户crontab文件的内容。
使用命令crontab-uuser-e命令编辑用户user的cron(c)作业。
用户通过编辑文件来增加或修改任何作业请求。
执行命令crontab-uuser-r即可删除当前用户的所有的cron作业。
作业与它们预定的时间储存在文件/usr/spool/cron/crontabs/username里。
username使用户名,在相应的文件中存放着该用户所要运行的命令。
命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。
文件里的每一个请求必须包含以spaces和tabs分割的六个域。
前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,称为命令字段,其中包括了crontab调度执行的命令。
第一道第五个字段的整数取值范围及意义是:
0~59表示分
1~23表示小时
1~31表示日
1~12表示月份
0~6表示星期(其中0表示星期日)
/usr/lib/cron/cron.allow表示谁能使用crontab命令。
如果它是一个空文件表明没有一个用户能安排作业。
如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。
如果它是一个空文件表明任何用户都可安排作业。
两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。
第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令
下面是crontab的格式:
分时日月星期要运行的命令
这里有crontab文件条目的一些例子:
3021***/usr/local/apache/bin/apachectlrestart
上面的例子表示每晚的21:
30重启apache。
4541,10,22**/usr/local/apache/bin/apachectlrestart
上面的例子表示每月1、10、22日的4:
45重启apache。
101**6,0/usr/local/apache/bin/apachectlrestart
上面的例子表示每周六、周日的1:
10重启apache。
0,3018-23***/usr/local/apache/bin/apachectlrestart
上面的例子表示在每天18:
00至23:
00之间每隔30分钟重启apache。
023**6/usr/local/apache/bin/apachectlrestart
上面的例子表示每星期六的11:
00pm重启apache。
**/1***/usr/local/apache/bin/apachectlrestart
每一小时重启apache
*23-7/1***/usr/local/apache/bin/apachectlrestart
晚上11点到早上7点之间,每隔一小时重启apache
0114*mon-wed/usr/local/apache/bin/apachectlrestart
每月的4号与每周一到周三的11点重启apache
041jan*/usr/local/apache/bin/apachectlrestart
一月一号的4点重启apache
以上就是一些在实际应用中常用的一些技巧,接下来我们就根据具体的实例来做具体的分析和讲解。
六:
实例讲解
1从FTP服务器上下载文件
这个是JOB实现的是每隔一个小时从FTP服务器上下载当前时段的一个文件。
此JOB要实现的核心在于时间变量的设置,同时还需要根据你要下载的文件编写相应的正则表达式。
首先我们来看变量是如何设置的:
获取使用获取系统信息选项,此选项在装换当中的输入文件夹下面。
打开此选项我们可以看到有如下一些选择:
这里根据我们的需求选择“系统日期(可变)”,这个是第一步,接下来就要使用到另一个重要的选项“javascript”。
第二:
javascript选项来提取我们需要的时间格式
这里我们是要分别提取系统时间的“年”、“月”、“日”、“时”四个时段的值。
这个选项提供一些相应的方法来实现这个功能,我使用的是date2str(var,var)方法,此方法的说明如下:
vardValue=newDate();
Alert(date2str(dValue));
Alert(date2str(dValue,"
dd.MM.yyyy"
));
dd.MM.yyyyHH:
mm:
ss"
E.MMM.yyyy"
"
DE"
EN"
"
EST"
这个是选项中现成提供的一个,里面还有很多。
这里不单可以使用选项本身带有的,还可以自己编写相应的javascript脚本语句。
以下就我获取不同时段的代码:
years=date2str(sysdate,"
yyyy"
);
mons=date2str(sysdate,"
MM"
days=date2str(sysdate,"
dd"
hous=date2str(sysdate,"
HH"
这里一共有四个字段,这意味我们在后面要分别设置四个变量。
好,接下来就让我们来看看最后一步:
变量的设置
第三:
变量设置
我设置了四个变量:
分别是“年”、“月”、“日”、“时”,全部设置为全局变量。
好,到这里我们的定时下载FTP已经完成了第一步,这个为什么要设置四个变量呢?
接下来就会知道了。
然后就是FTP选项的相关设置
第一个页面是填写相关的FTP服务的信息。
填写正确之后有个“TESTCONNECTION”按钮可以测试服务器是否连接成功。
在看下面有一个控制编码选项,这个选项是选择相应的文件编码格式,特别是文件在不同系统之间传输最容易导致乱码问题。
这里手动指定相应的编码格式可以有效避免乱码问题。
第二个页面如下:
这里有两点需要注意一下,第一就是通配符选项。
此选项是用来写相应的正则表达式来提取相应的文件。
我们之前设置的变量也就是在这里使用。
我下载的是EXCL文件,文件名格式“广东电信C网拨测系统-服务质量支撑及管理系统-指标数据(2011年11月25日12点)”。
我们要实现动态提取当前文件就得根据文件名当中哪些是变化的,这里明显可以看出文件名当中的时间是变化的,但是此时间不是标准的时间格式,所以我们使用了四个变量也就是如此了。
相应的正则表达式如下:
.*(${years}.*${mons}.*${days}.*${hous}.*).xls
另一个需要注意的地方就是:
此选项可以实现相应的文件操作,比如跳过、覆盖等等一些。
以上就是从FTP服务器下载的整个JOB的流程,这个根据自己的需求还可以做很多变化,具体的有哪些变化,就交给大家去实践中体验了。
2从EXCL文件读取数据入库
上次我们讲到了从FTP下载文件,这次我们了解一下我们如何将EXCL文件导入到数据库当中。
Kettle工具提供了一个选项
,此选项的功能是把excl文件的数据提取出来。
在使用这个选项的时候,必须EXCL文件格式是标准的表模式。
(表模式—头一行是字段名,下面是数据行。
)
我们就来看看详细的配置:
第一个页面大体就是这样一些,要注意的地方就是写文件通配符那里。
这里可以写相关的正则表达式来提取你想要的特定文件以及使用变量。
第二个页面就是工作表,这里面选取excl文件中你需要的工作表。
这里可以设定你要的起始行和起始列。
第三个页面是内容:
这里可以设定相关的编码格式和一些选项。
比如是否需要头部一行。
第四个页面是错误处理,这个才平常中很少使用。
第五个就是字段:
这个按钮可以实现获取头部的字段名,当然你也可以自己写字段名以及修改字段类型和大小。
以上就是EXCL选项的相关信息,这个我把数据提取出来了,就可以做相关的处理了。
接下来我们就把数据入库。
数据库入库我们选用的选项就是表输入:
要注意的就是这个选项,此选项选上就可以使用
页面下的
这个两个功能。
此功能是获取前面的步骤传入的字段,然后与数据库表里面的字段相配对。
这里还要注意一点的就是如果你要导入数据的表不存在的话,你可以点击页面下面的SQL按钮。
如果表结构也有修改的话也可以点击SQL按钮来达到修改表结构的目的。
当然也可以自己在那个SQL框写相应的SQL语句。
如下:
还有一点需要注意的,就是如果在导入数据之前需要把原表的数据清空的话可以勾选上
这个按钮,这样在每次导入数据之前都会清空原表数据的。
以上就是从EXCL文件读取数据入库的基本信息,中间可以添加其他的一些操作,这个根据具体的需求来做相应的处理。
3从文本文件抽取数据入库
大体步骤如图:
这里我中间加了一个字段选择步骤,此步骤也是在实际应用当中经常会用到的一个选项。
我们先来看看文本文件输入选项的相关页面。
这个跟EXCL文件输入差不多,具体要注意的地方就是第二个页面。
在内容页面需要注意一下几点:
分隔符、格式、编码方式。
特别是在linux下面使用的时候一定要记得选择linux相对应的格式和编码方式。
我推荐使用的编码方式是GB2312。
分隔符则是对要跟文本文件的分隔符一致,如果不一致的话则会导致数据无法正确的读取。
格式是根据你使用的操作系统来决定使用什么格式。
我们要重点讲的是字段选择这个选项的使用。
主要页面如图:
有选择和修改、移除、元数据三个页面。
选择和删除页面主要实现对字段名的修改和选择。
移除页面主要实现对相关字段在数据流中的移除。
元数据页面则功能稍微多一些,如图:
也是实现对字段类型的修改和重命名。
表输出就不重复了,这个和之前差不多的。
以上就是从文本文件抽取数据入库的相关说明。
4从oracle数据库到sybase数据库
最基本的就是如下步骤:
从数据库到数据库最基本只要两个步骤就可以实现了。
表输入与表输出。
表输入:
关于表输入的具体说明之前已经介绍过,这里就不多讲了。
从oracle数据库到sybase数据库遇到的最大的问题就是字段类型不符。
特别是特殊字符的处理,有可能在oracle数据库里面是可读的,但是在sybase数据库里面就是不可读的,此时中间就需要额外的步骤来对出问题的字段进行处理。
常用到的处理主要有以下一些:
经常用到的主要有:
、
等等一些。
具体的根据具体需求选择相适应的选项。
各个相关选项的具体说明请参考“智能数据比对系统ELT平台操作手册V1.0”。
5kettle集群服务的使用。
这里就简单的介绍一下集群。
相关的一些说明请参考一下两个文件:
6通过JOB调用linuxshell脚本
这个JOB只有两个步骤,就是直接使用shell选项来调用linux下的shell脚本。
具体的设置如图:
如果你的shell脚本需要传入参数则在下面的参数框里面填写相应的参数,当然参数也可以有前面的步骤传入进来。
如果你不调用脚本,想自己写相关的脚本则勾选上:
这样一来你就可以在
页面进行脚本的编写。
7如何实现JOB里面的并发执行
JOB里面默认的是串行执行,就是先执行完一个步骤,在执行下一个步骤。
此方法在某些时候是可用的,但是某些情况是需要多个步骤并发执行的,这个时候就需要设置START选项的相关配置。
将那个Lanuch....那个选项给勾选上就可以实现并发执行了。
8将转换或JOB日志写入数据库
Kettle工具提供了日志功能,此功能可以将转换或JOB的相关信息记入到数据库表中。
转换和JOB的日志类型不一样,我们就来一一介绍一下。
转换日志的相关配置在这里,如图:
点击设置就可以进入到如下页面:
可以看到转换有四种类型的日志:
Transformation、Setp、Performance、LoggingChannels
以下就是这四种日志字段的相关说明:
Transformation:
Setp:
Performance:
LoggingChannels:
JOB的日志类型有这几种类型:
Job、JobEntry、LoggingChannels
Job
JobEntry:
将这些日志写入到数据库只需两步就可以完成,一是选择一个数据库连接,二是给日志表一个名字。
最后就是点击SQL按钮,这样在数据库里面就创建了相应的日志表,以后每运行一次都会在日志表记录一行数据。
9使用SQL脚本选项执行相关SQL语句
上面这个JOB实现的功能是在调用shell脚本之前先把相关表的数据清空,然