等待工作中的转变

时间:2010-04-20 13:40:40

标签: pentaho kettle

我正在使用Pentaho Data Integration(又名Kettle),我有几个Transformations,我们称之为A,B,C,D,E。 B取决于A,D取决于C和E取决于B和D.在一项工作中,我想并行运行A,B和C,D:

           -> A -> B _
    Start<            \
           -> C -> D----> E

其中A和C并行运行。只有当B AND D成功时才有办法执行E吗?现在,查看工作指标,只要B OR D完成,E就会被执行。

4 个答案:

答案 0 :(得分:1)

我刚刚找到http://forums.pentaho.org/showthread.php?t=75425,似乎很难实现我想要的目标。

答案 1 :(得分:1)

您可以执行以下操作:

        /--=--[job]----[set var J1=1]---\ 
[start]----=--[Job]----[set var J2=1]----+--[jscriptstep]--(ok)-->[next steps]
        \--=--[Job]----[set var J3=1]---/        \
                                                 (x)
                                                   \
                                                  [Write to log]

JS步骤:

J1= parent_job.getVariable("J1");
J2= parent_job.getVariable("J2");
J3= parent_job.getVariable("J3");
(J1*J2*J3)==1;

“写入日志”步骤是可选的,我以前不使用日志消息在日志中注册红线错误:

  

“等待中:$ {J1}-$ {J2}-$ {J3}-$ {J4}-$ {J5}”

因此,我能够看到每个步骤的内容以及何时结束日志。

答案 2 :(得分:0)

我相信这可以做到,但我没有足够大的工作来真正测试这个,而且很尴尬。基本上,除了A,B,C,D和E作业外,您还需要4个独立的工作。我们称之为控制作业,作业A_B,作业C_D和并行作业。

你可以这样设置:

Control Job: start -> Parallel Jobs -> E
Parallel Jobs:       -> Job A_B
               start<           (Set Start step to run next jobs in parallel)
                     -> Job C_D
Job A_B: start -> A -> B
Job C_D: start -> C -> D

关键是A - &gt; B和C - &gt; D需要在自己的工作步骤中保留依赖性。然后,并行作业确保两个并行路径都已完成,然后才允许控制进入E。

答案 3 :(得分:0)

我从里卡多的答案开始,但是发现如果其中两个转换恰好同时完成,则该工作将以两个独立的流继续进行。

我通过计算到达javascript步骤的次数来解决此问题:

cnt= parent_job.getVariable("tables_complete");
cnt++;
parent_job.setVariable("tables_complete",cnt);
3 == cnt;

tables_complete不需要预先定义。