Talend任务有条件执行的首选模式



我有一个Talend作业(称为a),我想在Oracle存储过程(不是由Talend执行)完成时运行它。我有一个Oracle控制表,我可以检查一下Oracle SP是否已经完成。

我想象我的Talend任务A在一个时间表上运行——也许每15分钟运行一次——它要做的第一件事就是确定A今天是否已经执行了。如果它今天已经运行,它将立即停止执行。如果今天还没有运行,它将检查Oracle SP是否已经完成,如果没有,它将立即停止执行。这将导致Talend作业A每天只执行一次,并且只在Oracle SP完成后执行。

是否有更优雅的方式来完成这一点?

谢谢。

正如您在评论中所述,Oracle SP有一个CronJob。您应该创建一个Talend Job (a),它将在Oracle SP启动后不久执行。这将有一个Iterate + tOracleInput-tJavaRow + tRunJob + tJava

Iterate (i<=80 && somevalue==1 --> tOracleInput - row1 - tJava --
         --IF--> row1.field.equals("true") --> tJava i = 101; --> tRunJob(JobB)
         --IF--> !row1.field.equals("true") --> tJava Thread.Sleep(15*60*1000); 

这样,当您执行JobB时,您将退出循环。此外,您的Talend Job将每天运行一次,并每天进行一次计算。我知道这看起来有点脏,但会有用的。

将i设置为80,您最终将进行81次尝试,最坏的情况是20小时15分钟,不包括查询运行时间。

线程。睡眠接受毫秒,这就是为什么你需要乘以1000得到秒,乘以60得到分钟

You can also think below options
1) export/build your talend job (A) as shell/batch file and execute it via same unix crontab job which executes your SP. You have to set dependency may be based on exit code of SP job.
OR
2) you can run your SP from talend job either using tOracleSP or even you can run your unix shell if any existing using tSystem and onSubJobOk run your talend job (A).

最新更新