现在的位置: 首页 > 综合 > 正文

【Kettle从零开始】第九弹之Kettle定时任务介绍

2014年09月05日 ⁄ 综合 ⁄ 共 2653字 ⁄ 字号 评论关闭

在数据仓库环节ETL定时任务是一个必不可少的一个环节,因为定时任务取决与你的ETL程序抽取业务数据的频率程度(日、周、季、月、年),一般情况下都采用T+1方式来抽取数据。

关于Kettle定时任务需要调用脚本来执行“作业”与“转换”对应脚本名“Kitchen”与“Pan”,如果是NT系统则找.bat结尾,Linux系统则找.sh结尾相应脚本。

 

需求说明:默认情况下采用T+1方式抽取数据到目标表,也可以通过指定日期参数抽取数据到目标表。

 

1Pan参数详解

在命令行中直接运行Pan结果如下:

参数名称

参数值描述

/rep

资源库名称

/user

资源库用户名

/pass

资源库密码

/trans

要启动的转换名称

/dir

目录(不要忘了前缀/)

/file

要启动的文件名(转换所在的XML文件)

/level

日志等级(基本,详细,调试,行级,错误,没有)

/logfile

要写入的日志文件

/listdir

列出资源库里的目录

/listtrans

列出指定目录下的转换

/listrep

列出可用资源库

/exprep

将资源库里的所有对象导出到XML文件中

/norep

不要将日志写到资源库中

/safemode

安全模式下运行

/version

显示版本,校订和构建日期

/param

设置参数名称与参数值<NAME>=<VALUE>.样例:-param:FOO=bar

/listparam

列出关于在指定的作业定义的参数信息。相当于查看某个转换的参数列表

注:另一种参数方法:-file=path –param:key=value,由于Pan在调用参数时需要修改Pan脚本最后一行,把%_cmdline%替换成%*,不然会导致参数传递失败,Kettle在其它高版本上官网已经修改。

 

2Kitchen参数详解

在命令行中直接运行Kitchen结果如下:

参数名称

参数值描述

/rep

资源库名称

/user

资源库用户名

/pass

资源库密码

/job

要启动的作业名称

/dir

目录(不要忘了前缀/)

/file

要启动的文件名(作业所在的XML文件)

/level

日志等级(基本,详细,调试,行级,错误,没有)

/logfile

要写入的日志文件

/listdir

列出资源库里的目录

/listjobs

列出指定目录下的作业

/listrep

列出可用资源库

/norep

将资源库里的所有对象导出到XML文件中

/version

显示版本,校订和构建日期

/param

设置参数名称与参数值<NAME>=<VALUE>.样例:-param:FOO=bar

/listparam

列出关于在指定的作业定义的参数信息。相当于查看某个作业的参数列表

/export

导出指定作业的所有链接的资源。该参数是一个ZIP文件的名称。

注:另一种参数方法:-file=path –param:key=value,由于Kitchen在调用参数时需要修改Kitchen脚本最后一行,把%_cmdline%替换成%*,不然会导致参数传递失败,Kettle在其它高版本上官网已经修改。

 

了解完参数传递说明,下面将开始开发作业,由于【Kettle从零开始】是一套完整的流程,所以作业就不重新开发,在原有的基础上稍加修改即可,修改目的原因有两种,一种是不需要再重新开始节省时间,另一种是方便整个【Kettle从零开始】工程的连贯性。

 

需求思路:根据目前已经完成的开发需要完善的地方有两点:

A:修改参数设置,应该首先判断脚本是否传入参数,如果没传入参数则默认为昨天日期当作参数抽取数据。

B:修改RotKang_Test作业与Set_Param(转换),添加接收参数变量,变量名为YESTERDAY,默认情况下为NULL

最后编写调用Kitchen脚本程序。

 

添加RotKang_Test作业变量如下图:

(9.0)

作业设置,快捷键Ctrl+J,设置变量名为:YESTERDAY,默认值为:NULL

添加Set_Param转换变量如下图:

(9.1)

然后我们把作业中的YESTERDAY变量值传递给Set_Param转换(如果需要在作业中进行先删除再插入操作,可以在变量的下一步放入“SQL”组件)如下图:

(9.2)

转换设置,快捷键Ctrl+T,设置变量名为:YESTERDAY,默认值为:NULL

设置完成转换变量后,我们通过“Get Variables”组件来获取YESTERDAY变量的值,如下图:

(9.3)

再通过“过滤记录”组件来判断YESTERDAY变量是否有等于NULL。如下图:

(9.4)

如果等于NULL数据流则走“获取系统信息组件”,反之则直接设置变量。如下图:

(9.5)

注:由于自定义的变量与获取系统信息中的变量重名,产生冲突,无法获取到相应的数值,需要通过“字段选择”排除掉YESTERDAY变量,而Yesterday则自动改成Yesterday_1然后再改成Yesterday名,如下图:

(9.6)

最终Set_Param转换数据流程如下图:

(9.7)

完成作业与转换开发,下一步将编写调用Kitchen脚本,脚本程序如下:

脚本名称

Etl_Sch.bat

脚本内容

@echo off

set  KETTLE_PATH=H:\pentaho\data-integration3.2.0

set JOB_PATH=H:\Txt\Pentaho\从零开始\实例

 

rem 默认T+1方式参数传递

CALL %KETTLE_PATH%\Kitchen.bat  -file=%JOB_PATH%\RotKang_Test.kjb

 

rem 指定参数日期传递,需要手动修改参数日期手动执行

rem CALL %KETTLE_PATH%\Kitchen.bat -file=%JOB_PATH%\RotKang_Test.kjb  -param:YESTERDAY=2014-03-08

 

 

最后使用NT自带的定时任务计划调用Etl_Sch.bat脚本,完成全自动式T+1数据抽取。

定时任务步骤:控制面板–>管理工具–>任务计划程序–>创建基本任务,如下图:

(9.8)

名称:ETL定时任务

描述:RotKang定时任务计划

点击下一步,如下图:

(9.9)

选择每天定时,点击下一步如下图:

(9.10)

定时成每天凌晨30分开始执行,点击下一步如下图:

(9.11)

选择启动程序,点击下一步如下图:

(9.12)

输入Etl_Sch.bat文件路径,点击下一步如下图:

(9.13)

最后完成,这样定时任务计划则每天定时T+1方式抽取数据。

 

如果大家有什么疑问可以在下方留言!

抱歉!评论已关闭.