Kettle使用经验总结
一、关于变量的使用
在etl过程中难免不使用变量,所以就先介绍变量的使用。
其中可以使用kettle已经定义好的变量。
个人感觉最有用的就是“Internal.Job.Filename.Directory”。
这个变量为运行时变量,含义为启动的当前job的目录,是个相对路径。
可以在job中的作业转换名、日志文件名、转换文件名等任何可以使用到文件路径的地方使用。
这样很方便移植,不用每次当文件更改目录后或者移植到不同系统下需要一一更改每个步骤的路径,节省了许多不必要的时间。
还可以在Kettle的属性文件kettle.properties中设置环境变量。
此文件所在目录如下:$HOME/.kettle (Unix/Linux/OSX)
C:\Documents and Settings\<username>\.kettle\kettle.properties (Windows) 使用变量的方法可以如下指定:${V ARIABLE}。
还可以设置运行时变量。
关于命令行启动job/trans直接设置动态变量还没有验证。
待验证后补充。
现在使用的是将参数输入到文本中,然后从文本取得变量的值再在各个trans中使用。
包含设置变量的trans里不能放置使用此变量的步骤,此变量只能在之后的trans/Job中才能使用。
使用的时候直接${varName}即可。
还有一种是使用局部变量可以直接用?代替。
这个需要注意的是在使用变量的步骤中有一个“从步骤插入数据”下拉列表,需要从中选择之前的变量。
对于全量提取和每天增量提取,可以将提取的过程作为一个通用的job,前面根据提取方式的不同连接不同的时间变量,后面提取的sql写为between…and…。
这样既实现了功能,又实现了代码复用。
但是需要注意的是格式问题,获取系统信息取到的时间格式形如“2009/08/10 00:00:00.000”。
如果将此时间使用js截断后再设置,格式会变成类似“Sat Aug 10 00:00:00 CST 2009”。
可以在sql中使用substr,例如“to_date(substr('${BEGINTIME}',1,10),'yyyy/MM/dd')”。
当然也可能会有更好的解决方案。
二、命令行执行job
Linux下:sh kitchen.sh /norep /file [path]/JobName.kjb
其中/norep /file代表不使用资源库,使用文件系统。
如果使用资源库的话改为/rep kettle /user admin /pass admin。
用命令行可以执行后就可以使用windows或linux下的任务调度来定时执行任务了。
三、序列的使用
在“转换”里有一个步骤是“增加序列”。
很多时候我们都需要用一个序列做为表中的一个字段。
值的名称:为序列的字段名称;
获取途径默认是“使用计数器来计算sequence”,这个特点就是每次运行trans的时候都会从1开始,相当于每次都先drop掉原先的序列,重新建立序列再使用;
如果想要使用的是连续的序列,就选择“使用DB来获取sequence”。
数据库连接选择为建立序列的数据库,sequence名称指定为要使用的序列名称。
四、定时执行Job
在linux下设置任务调度过程:
在linux命令行下输入crontab –l 即可查看定时调度列表。
crontab –e 修改定时计划列表内容
10 3 * * * nohup sh /home/test/cript.sh &>/home/test/no.log
格式:
10 3 * * *
10代表分钟,取值范围为0~59;3代表小时,取值范围为0~23。
此命令含义为在每天的凌晨3点10分运行cript.sh脚本的内容,可以修改这2个位置的时间自定义每日ETL工作的开始时间。
后面的命令为运行脚本文件,脚本文件位于/home/test/目录下,内容为:
#!/bin/bash
. /etc/profile
sh /home/test/data-integration/kitchen.sh /norep /file [path]/JobName.kjb > /home/test/ JobName.log
其含义:启动kettle的job,JobName.kjb为每日增量提取的job名称。
五、邮件通知
在job中加入邮件通知,当etl过程出现问题后,将日志发送到指定邮箱。
在“附件”选项卡中,选中“带附件”,文件类型为“日志”,将之前出错的job及其中的trans输出日志级别改为“错误日志”,即可将出错的内容以附件形式发送到指定邮箱。
这里需要将连线改变种类,黑色代表完成当前任务后无条件的进行下一个工作,绿色表示当前任务成功后转向下一个工作,红色则表示当前任务出现问题后发生转向。
后记
因为水平有限,可能以上内容不是最合适的,还有待优化。
以及很多组件没有用到,很多功能没有发现。
待之后有空或项目中用到的时候都会持续更新补充。
欢迎大家指正批评。