当前位置:文档之家› ETL工具kettl应用说明

ETL工具kettl应用说明

ETL工具kettl应用说明
ETL工具kettl应用说明

Kettle工具在实际中的应用说明

一:资源库的设置

Kettle提供了两种资源库的选择方式:数据库存放、本地文件存放。

数据库

该方式是通过数据库连接直接在数据库里面创建kettle表,表里面记录着你所做的任何保存过的记录以及转换和任务。此方法是远程存放的方式,具有可多人共享一个资源库的优势,但是也存在资源库不稳定的缺点。

以下就数据库资源库具体怎么实现做一下介绍:

第一:

在tools选项下面有

在资源库选项里面有连接资源库选项,点击之后会出现如下界面:

刚开始的时候是没用任何连接的,需要根据自己的需要选择创建。

笔:修改资源库连接

加:添加新的资源库

叉:删除选中资源库

点那个加号图标就可以进入到新建选项页面:

在中间的显示栏中:第一行代表着写入到数据库的资源库、第二行代表着保存到本地的资源库。

点击第一行进入如下界面:

点击新建按钮将会新建数据库连接,如果已经有你需要的数据库连接也可以选择你需要的。

上面就是新建数据库页面,根据你的需要选择具体的数据库连接方式,填写好完成之后点击一下测试按钮,就可以知道数据库连接是否成功。

到这里,资源库的连接已经做了一半了。接下来介绍另一半要做的事情。

回到这个页面,填写唯一的ID、名称,然后点击创建或更新按钮,之后会出现一些SQL语句,执行这些语句,如果成功的话就创建成功了,如果失败则要检查一下数据库。最后点击确定按钮就成功了。

这个时候就可以连接资源库了。

选择你创建的资源库,admin用户的默认密码是admin ,点击OK就行了。

本地

接下来简单介绍一下本地资源库,其实是很简单的。

选择第二行。将会看到如下页面:

这个就是本地的页面,比数据库简单多了,选择一下存放路径,给它一个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="/EXCL/" ——JOB的存放路径

-level=basic>/sybase/pdi/EXCLlog.txt ——kettle日志写入到文件中

相关的一些参数的详细说明如下:

Options:

-rep = Repository name

-user = Repository username

-pass = Repository password

-job = The name of the job to launch

-dir = The directory (dont forget the leading /)

-file = The filename (Job XML) to launch

-level = The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing)

-logfile = The logging file to write to

-listdir = List the directories in the repository

-listjobs = List the jobs in the specified directory

-listrep = List the available repositories

-norep = Do not log into the repository

-version = show the version, revision and build date

-param = Set a named parameter =. For example -param:FOO=bar -listparam = List information concerning the defined parameters in the specified job.

-export = Exports all linked resources of the specified job. The argument is the name of a ZIP file.

-maxloglines = The maximum number of log lines that are kept internally by Kettle. Set to 0 to keep all rows (default)

-maxlogtimeout = The maximum age (in minutes) of a log line while being kept internally by Kettle. Set to 0 to keep all rows indefinitely (default)

在linux系统中可以使用crontab命令来做定时,下面就简单介绍一下这个命令。

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab 文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。

crontab命令有三种形式的命令行结构:

crontab [-u user] [file]

crontab [-u user] [-e|-l|-r]

crontab -l -u [-e|-l|-r] 第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab 目录下。

命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab;命令行中-l选项的作用是显示用户crontab文件的内容。

使用命令crontab -u user -e命令编辑用户user的cron(c)作业。用户通过编辑文件来增加或修

改任何作业请求。

执行命令crontab -u user -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文件条目的一些例子:

30 21 * * * /usr/local/apache/bin/apachectl restart

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/apache/bin/apachectl restart

上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/apache/bin/apachectl restart

每一小时重启apache

* 23-7/1 * * * /usr/local/apache/bin/apachectl restart

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/apache/bin/apachectl restart

一月一号的4点重启apache

以上就是一些在实际应用中常用的一些技巧,接下来我们就根据具体的实例来做具体的分析和讲解。

六:实例讲解

1从FTP服务器上下载文件

这个是JOB实现的是每隔一个小时从FTP服务器上下载当前时段的一个文件。此JOB要实现的核心在于时间变量的设置,同时还需要根据你要下载的文件编写相应的正则表达式。

首先我们来看变量是如何设置的:

第一:获取使用获取系统信息选项,此选项在装换当中的输入文件夹下面。

打开此选项我们可以看到有如下一些选择:

这里根据我们的需求选择“系统日期(可变)”,这个是第一步,接下来就要使用到另一个重要的选项“javascript”。

第二:javascript选项来提取我们需要的时间格式

这里我们是要分别提取系统时间的“年”、“月”、“日”、“时”四个时段的值。这个选项提供一些相应的方法来实现这个功能,我使用的是date2str(var,var)方法,此方法的说明如下:

var dValue = new Date();

Alert(date2str(dValue));

Alert(date2str(dValue,"dd.MM.yyyy"));

Alert(date2str(dValue,"dd.MM.yyyy HH:mm:ss"));

Alert(date2str(dValue,"E.MMM.yyyy","DE"));

Alert(date2str(dValue,"dd.MM.yyyy HH:mm:ss","EN"));

Alert(date2str(dValue,"dd.MM.yyyy HH:mm:ss","EN", "EST"));

这个是选项中现成提供的一个,里面还有很多。这里不单可以使用选项本身带有的,还可以自己编写相应的javascript脚本语句。

以下就我获取不同时段的代码:

years=date2str(sysdate,"yyyy");

mons=date2str(sysdate,"MM");

days=date2str(sysdate,"dd");

hous=date2str(sysdate,"HH");

这里一共有四个字段,这意味我们在后面要分别设置四个变量。

好,接下来就让我们来看看最后一步:变量的设置

第三:变量设置

如图:

我设置了四个变量:分别是“年”、“月”、“日”、“时”,全部设置为全局变量。

好,到这里我们的定时下载FTP已经完成了第一步,这个为什么要设置四个变量呢?接下来就会知道了。

然后就是FTP选项的相关设置

如图:

第一个页面是填写相关的FTP服务的信息。填写正确之后有个“TEST CONNECTION”按钮可

以测试服务器是否连接成功。在看下面有一个控制编码选项,这个选项是选择相应的文件编码格式,特别是文件在不同系统之间传输最容易导致乱码问题。这里手动指定相应的编码格式可以有效避免乱码问题。

第二个页面如下:

这里有两点需要注意一下,第一就是通配符选项。此选项是用来写相应的正则表达式来提取相应的文件。我们之前设置的变量也就是在这里使用。

我下载的是EXCL文件,文件名格式“广东电信C网拨测系统-服务质量支撑及管理系统-指标数据(2011年11月25日12点)”。我们要实现动态提取当前文件就得根据文件名当中哪些是变化的,这里明显可以看出文件名当中的时间是变化的,但是此时间不是标准的时间格式,所以我们使用了四个变量也就是如此了。

相应的正则表达式如下:

.*(${years}.*${mons}.*${days}.*${hous}.*).xls

另一个需要注意的地方就是:

此选项可以实现相应的文件操作,比如跳过、覆盖等等一些。

以上就是从FTP服务器下载的整个JOB 的流程,这个根据自己的需求还可以做很多变化,具体的有哪些变化,就交给大家去实践中体验了。

2从EXCL文件读取数据入库

上次我们讲到了从FTP下载文件,这次我们了解一下我们如何将EXCL文件导入到数据库当中。

Kettle工具提供了一个选项,此选项的功能是把excl文件的数据提取出来。

在使用这个选项的时候,必须EXCL文件格式是标准的表模式。(表模式—头一行是字段名,下面是数据行。)

我们就来看看详细的配置:

相关主题
文本预览
相关文档 最新文档