3

我正在使用 Pentaho 数据集成(又名 Kettle),我有几个转换,我们称它们为 A、B、C、D、E。B 依赖于 A,D 依赖于 C,E 依赖于 B 和 D。在工作中我想并行运行 A、B 和 C、D:

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

其中 A 和 C 并行运行。有没有办法只在 BD 成功的情况下执行 E ?现在,查看 Job 指标,E 会在 BD 完成后立即执行。

4

4 回答 4

1

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

于 2010-04-27T14:38:18.600 回答
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}”

所以我可以通过日志查看每个步骤的结束时间和内容。

于 2019-02-06T11:52:11.657 回答
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 -> B 和 C -> D 需要在自己的工作步骤中才能保留依赖关系。然后 Parallel Jobs 确保两个并行路径都已完成,然后才允许控制继续到 E。

于 2013-05-22T22:22:28.743 回答
0

我从 ricardo 的回答开始,但发现如果两个转换同时完成,则工作将继续使用两个独立的流。

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

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

tables_complete 不需要预先定义。

于 2019-11-20T18:22:55.823 回答