Talend:如果条件VS迭代运行

时间:2013-12-05 10:50:34

标签: loops if-statement talend

如果我使用'运行if'条件,它也不能用作'迭代'

我有一个允许多个值的variable_X(在'tFlowToIterate'组件'中定义)。然后,根据variable_Y的值,我想将variable_X的所有值传递给另一个Job(4个可用作业之一)。 所以,我想在每个Job之前使用'Run If'条件,但我想通过所选作业迭代variable_X的值...

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我有点困惑。您想使用变量Y来选择要调用的子变量,但是您想要将从tFlowtoIterate流出的变量X传递给该子变量(因此在每次迭代时都会更改)?

据我所知,我担心这是不可能的。您可以通过一个小技巧从迭代信号中抛出不同的RunIf信号,但是您无法通过子作业进行迭代。子进程将在每次迭代时使用单个值X调用,也不会在集合中调用。如果你需要,我担心你必须稍微改变你的设计(例如,在单个字符串上连接X的可能值,在子作业中将其爆炸并在本地循环)

如果要从迭代符号触发多个信号,可以执行未记录的“组件缓冲”技巧。这并不是Talend团队可能很高兴知道的事情,但它确实有效。我们的想法是使用代表迭代信号的虚拟组件。

                                                         /--->RunIf--->[stuff1]
                                                        /
                                                       /
tRowGenerator---row--->tFlowToIterate---Iterate--->tWarn--->RunIf----->[stuff2]
                                                       \
                                                        \
                                                         \--->RunIf--->[stuff3]

tWarn(您可以用来打印详细的DEBUG,例如)将充当代理。因此,将在每次迭代时评估RunIf。 “stuff”可以是一个subjob 但是它将获得X的当前值,而不是整个集合。