kettle中Switch/Case条件判断的使用

今天在做取数过程中遇到了一个问题,就是增量取数,增量取数大部分用到的是根据时间段来抽取数据,然后插入到目标库,事实中kettle中有个一次提交多少条记录的问题,今天暂时不讨论这个,主要来说说如何根据中间时间表(主要记录上次取数的开始时间和结束时间),然后去设置取数的时间段。

下面来看一下遇到的问题:

我们是定时取数,本次取数的时间要去中间表查看上次取数状态,有二种情况:

(1)上次取数成功:

        则本次取数时间为上次结束时间(end_time)和当前取数时间(now),并且:(a)如果本次取数成功,则更新中间时间表的开始时间和结束时间为本次取数的开始时间和结束时间(好像有点绕哦)并且设置状态为1,(b)如果本次取数失败则更新中间时间表的开始时间和结束时间为本次取数的开始时间和结束时间(好像有点绕哦)并且设置状态为0;

(2)上次取数失败:

        则本次取数时间为上次开始时间(start_time)和当前取数时间(now),并且:(a)如果本次取数成功,则更新中间时间表开始时间和结束时间分别为本次取数的开始时间和结束时间并且状态为1(成功),(b)如果本次取数失败,则不更新中间时间表,只更新操作时间;

1、首先写一个转换设置本次取数的时间段参数设置

取数时候的开始时间和结束时间则取决于中间时间表,如果状态为1则取数时间段为:上次结束时间到当前取数时间;如果状态为0则取数时间段位:上次开始时间到当前取数时间;这里在kettle的转换为:

2、删除本次取数时间段的数据,并且执行查询和插入操作

这个步骤相对简单,有二个转换,一个转换为执行SQL脚本,另一个转换为查询插入:

扫描二维码关注公众号,回复: 4368712 查看本文章

3、取数插入操作厚成功或者失败更新中间表

其中本次取数成功或者失败转换里的内容都是一个SQL脚本(二个转换里的SQL语句基本一样一个设置1另一个0):

总的作业图为:

总结:

在这种情况遇到的主要问题就是:根据某个条件有二种或者跟多情况去做,大部分情况会用到switch/case这个组件,然后就是很多时候单单转换是完成不了一个复杂任务的,需要作业才能关联起来。

猜你喜欢

转载自blog.csdn.net/chenliyu0518/article/details/84061754
今日推荐