设为首页收藏本站 开启辅助访问
 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博登录

只需一步,快速搞定

查看: 88|回复: 1

Kettle 循环跑数据

[复制链接]

1

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2018-9-14 17:23:31 | 显示全部楼层 |阅读模式
本帖最后由 橘子咒 于 2018-9-14 17:32 编辑

接触Kettle快有一个月了,才找到组织,一个人学习累死我了,现在分享下刚做的循环,不喜勿喷。
搜了多次,都没见一个完整的适合自己的循环,所以只能翻看资料现学现用了。
循环Job如图1.

file:///C:/Users/hongyanfei/AppData/Local/YNote/data/weixinobU7Vjo-5TiUhWDzbZCiAeAU_8V4/4cbf417bcb7040ddb9c2d1724c1fec1b/clipboard.png
循环变量的设置有多种,这里用了最笨的一种,parent_job的模式存储数据,并循环修改数据。

循环变量的设置有多种,这里用了最笨的一种,parent_job的模式存储数据,并循环修改数据。

Steps:
1、 从旧数据获得最大生效日期设置为最小生效日期,对于没有数据的情况给予默认值。
2、 从源数据初始化parent_job类型的变量数据。如图2所示。
3、用JS控制变量的值,并循环插入数据、写日志。
因不懂JS,所以查阅了JS的一些语法后写的代码,可能会有些生涩,可给予优化意见,谢谢。
JS代码如下:
function GetDateStr(datestr,daycnt) {
var dt = new Date(datestr.substr(0,4),(datestr.substr(4,2) -1),datestr.substr(6,2));
dt.setDate(dt.getDate()+daycnt);//获取daycnt天后的日期
var y = dt.getFullYear();
var m =(dt.getMonth())<9?"0"+(dt.getMonth()+1)dt.getMonth()+1);//获取当前月份的日期,不足10补0
var d = dt.getDate()<10?"0"+dt.getDate():dt.getDate();//获取当前几号,不足10补0
return y+""+m+""+d;
}
var beg= parent_job.getVariable("BEG_DT");
var end= parent_job.getVariable("END_DT");
var max= parent_job.getVariable("MAX_DT");
var cnt= parent_job.getVariable("CNT");
var nbr= parent_job.getVariable("NBR");
if (cnt>= 1) {
beg=GetDateStr(beg,parseInt(nbr));
end=GetDateStr(end,parseInt(nbr));
}
end=(end>max)?max:end;
cnt++;
parent_job.setVariable("CNT", cnt);
parent_job.setVariable("BEG_DT", beg);
parent_job.setVariable("END_DT", end);
parent_job.setVariable("MAX_DT", max);
parent_job.setVariable("NBR", nbr);
(beg>max)?false:true;




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

海!外直播 t.cn/RxlBL8D 禁闻视频 t.cn/RxkPOKp 金正恩心想,那次我们阅兵,你们让周永康来,就站在我爹俩旁边,事后证明他是坏人,这不故意羞辱我们么?我要以其人之道还之,这次派崔龙海去,等他回来…   发表于 2018-9-15 05:02
楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋| μKettle ( 沪ICP备14044064号 )     

GMT+8, 2018-9-23 05:17 , Processed in 0.185545 second(s), 18 queries , File On.

Powered by Discuz!  uKettle

Copyright © 2014 Comsenz Inc.

快速回复 返回顶部 返回列表