В ожидании преобразований в работе - PullRequest
3 голосов
/ 20 апреля 2010

Я работаю с Pentaho Data Integration (он же 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 работают параллельно. Есть ли способ выполнить E, только если B AND D были успешными? Прямо сейчас, глядя на метрики задания, E запускается, как только B ИЛИ D завершено.

Ответы [ 3 ]

1 голос
/ 06 февраля 2019

Вы можете сделать что-то вроде этого:

        /--=--[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}»

Так что я могу видеть, что и когда каждый шаг заканчивается через журнал.

1 голос
/ 27 апреля 2010

Я только что нашел http://forums.pentaho.org/showthread.php?t=75425 и кажется, что нелегко добиться того, чего я хочу.

0 голосов
/ 23 мая 2013

Я верю, что это можно сделать, но у меня нет достаточно больших рабочих мест, чтобы действительно хорошо это проверить, и это неудобно. По сути, вам понадобится 4 отдельных задания в дополнение к заданиям A, B, C, D и E. Давайте назовем их Управляющим заданием, заданием 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.

...