kettle入门(四) 之kettle取昨天时间&设置任意时间变量案例

本文详细介绍了如何使用Kettle版本3.0.4开发FTP文件接口,涉及获取系统时间、时间格式化及设置环境变量等关键步骤,通过实例展示了如何实现按固定格式下载和上传FTP服务器上的文本文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引:

在数据仓库项目中 有一类和生产或者外围系统交互的接口称为FTP文件接口, 用kettle开发、实现这种接口 配置脚本时,经常需要用时间变量来取或者上传FTP里面 固定格式文件名的文本,例如 生产系统定时 每天推送前天的数据文本 到某个FTP服务器

2014-04-28 推送文件名 2015-04-26.txt.gz

2014-04-27 推送文件名 2015-04-25.txt.gz


实现:

kettle 版本3.0.4,如下图所示:

所需要三个功能组件 1 获取系统信息 2 java script value 3 set 变量



下面看第一个组件,可以自动获取系统的时间 例如当前时间 即下图的系统日期(变量) 、今天00:00:00等 先取今天的日期

点击下图左下角的 类型 下面行 会弹出右侧下脚的 选择信息类型 再里面点击 今天00:00:00 然后 写上名称即可


下图看第二个组件 :

主要实现是用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+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(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是季度






评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值