在数据仓库环节ETL定时任务是一个必不可少的一个环节,因为定时任务取决与你的ETL程序抽取业务数据的频率程度(日、周、季、月、年),一般情况下都采用T+1方式来抽取数据。
关于Kettle定时任务需要调用脚本来执行“作业”与“转换”对应脚本名“Kitchen”与“Pan”,如果是NT系统则找.bat结尾,Linux系统则找.sh结尾相应脚本。
需求说明:默认情况下采用T+1方式抽取数据到目标表,也可以通过指定日期参数抽取数据到目标表。
1、Pan参数详解
在命令行中直接运行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在其它高版本上官网已经修改。
2、Kitchen参数详解
在命令行中直接运行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方式抽取数据。
如果大家有什么疑问可以在下方留言!