kettle⼊门(四)之kettle取昨天时间设置任意时间变量案例引:
在数据仓库项⽬中 有⼀类和⽣产或者外围系统交互的接⼝称为FTP⽂件接⼝, ⽤kettle开发、实现这种接⼝ 配置脚本时,经常需要⽤时间变量来取或者上传FTP⾥⾯ 固定格式⽂件名的⽂本,例如 ⽣产系统定时 每天推送前天的数据⽂本 到某个FTP服务器
2014-04-28 推送⽂件名
2014-04-27 推送⽂件名
实现:
kettle 版本3.0.4,如下图所⽰:
所需要三个功能组件 1 获取系统信息 2 java script value 3 set 变量
下⾯看第⼀个组件,可以⾃动获取系统的时间 例如当前时间 即下图的系统⽇期(变量) 、今天00:00:00等 先取今天的⽇期
点击下图左下⾓的 类型 下⾯⾏ 会弹出右侧下脚的 选择信息类型 再⾥⾯点击 今天00:00:00 然后 写上名称即可时间正则表达式java
下图看第⼆个组件 :
主要实现是⽤js代码
Format 那⼀⼤块是⼀个格式化函数 功能是把时间格式化成 ⾃⼰需要的时间格式
Format下⾯那⾏ new 当前时间对象 2代表2天 24*60*60*1000代表1天时间的ms数
--即当天减去2天时间ms数 得到前天的时间
下图第三个组件:
设置环境变量 即把js中的变量名 设置到系统 或者job可⽤的变量名中 变量活动类型 有Java虚拟机、⽗Job、⽗⽗Job、根Job。为了便于测试 这⾥选择Java虚拟机
下⾯是点击运⾏的测试结果:
画红圈部分可以看到变量设置成功了!
下图是⼀个 使⽤变量设置ktr 的kjb
⽬的就是每天⽣成2015-04-26 这样 前天⽇期的⽂本 然后⽤ sftp中的正则表达式匹配 上传到指定服务器, 画红圈是filedate_YCL.ktr中设置的变量名。
附录:
组件⼆⾥的js脚本:
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": Month() + 1, //⽉份
"d+": Date(), //⽇
"h+": Hours(), //⼩时
"m+": Minutes(), //分
"s+": Seconds(), //秒
"q+": Math.floor((Month() + 3) / 3), //季度
"S": Milliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = place(RegExp.$1, (FullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = place(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
var dtNew=new Date(new Date().getTime()-2*24*60*60*1000).Format("yyyyMMdd");--new 当前时间对象 2代表2天 24*60*60*1000代表2天时间的ms数--即当天减去2天时间ms数得到前天的时间
备注:
new Date(new Date().getTime()-2*24*60*60*1000).Format("yyyyMMdd");
2这个地⽅ 可以任意改 想取多少天前的就写多少天,减也可以改成加 yyyyMMdd  格式也可以改为  yyyyMM  或者  yyyy-MM-dd 或者    yyyy/MM/dd
取时分秒  yyyy/MM/dd/ hh:mm:ss  很灵活⽅便
取当前季度  yyyy/MM/dd/qq hh:mm:ss qq是季度

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。