Пропустить компонент на основе условия в Talend

#talend

#talend

Вопрос:

У меня есть сценарий, в котором я хотел бы пропустить выполнение компонента на основе условия и запустить его последовательные компоненты в Talend.

Возможно ли это вообще?

Комментарии:

1. Пожалуйста, опубликуйте скриншот вашей работы. В зависимости от того, что вы делаете со своей работой, вы можете условно выполнять подчиненные задания, используя Run if соединитель (а не Main или on Subjob Okay ).

2. Вы правы. Я могу установить условную зависимость, используя соединитель Run If. Если условие удовлетворяет, компонент будет выполнен, но если нет, то я хотел бы пропустить этот компонент и перейти к его следующему компоненту.

3. Можете ли вы опубликовать скриншот своей работы (и другие скриншоты любого важного места), чтобы мы могли понять, как лучше всего это сделать? Я могу придумать несколько вариантов, но это зависит от того, что вы делаете с этой работой.

4. мы должны сделать что-то подобное, сценарий следующий: Каскад схемы удаления -> Создать схему -> Вложенное задание (удалить таблицу, создать таблицу) -> загрузить данные в таблицы, мы хотим иметь логическое значение DROP_SCHEMA в контексте, поэтому первый компонент должен выполняться, когда DROP_SCHEMA = 1, иначе его нужно пропустить.

5. Точно так, как упоминал Балазс. Рассмотрим задачу здесь как Pre_Job -> оценка условия -> tSystem1 -> tSystem2 Если условие в переменной равно all, тогда естественный поток, такой как tSystem1, а затем tSystem2. Но если условие в переменной saya tSystem2, тогда пропустите tSystem1 и выполните tSystem2 самостоятельно. Я не смог опубликовать ни одного снимка экрана. так что просто объяснил образно.

Ответ №1:

Вам доступны два варианта условного выполнения частей вашей работы.

Если компонент, который следует за вашей условной проверкой, может быть начальным компонентом (если вы поместите его на холст, тогда у него должен быть зеленый фон), тогда вы можете использовать Run if соединитель, чтобы связать его с предыдущей частью вашей работы следующим образом:

Запустить, если Настройка задания

В этом примере мы просто вызываем другой компонент tJava условно, но это может быть любой компонент, который можно запустить.

Где первый компонент tJava (Set condition boolean) настроен с помощью следующего кода:

 Boolean condition = false;
globalMap.put("condition",condition);
  

И два Run if соединителя установлены как ((Boolean)globalMap.get("condition")) == true и ((Boolean)globalMap.get("condition")) == false соответственно.

Лучшим вариантом может быть использование фильтрации в компоненте tMap или tFilterRow, и это также позволяет вам ссылаться на компоненты, которые не являются начальными компонентами. Для этого вы должны настроить свою работу, как показано ниже:

Настройка условного задания tMap

В этой работе я жестко закодировал некоторые табличные данные в компоненте tFixedFlowInput:

Данные условного задания tMap

Затем мы используем tMap для фильтрации потоков данных для любых следующих компонентов:

Конфигурация tMap данных условного задания tMap

В котором мы проверяем значение столбца булевых условий наших данных. В качестве иллюстрации я также применил некоторое простое условное преобразование к данным, где к «истинным» строкам добавляется 1000 к их значению, а к «ложным» строкам из их значения вычитается 100.

Отсюда вы можете продолжить выполнение своей работы в обычном режиме, в этом случае мы ссылаемся на компонент tSystem для выполнения системных команд в соответствии с вашим комментарием.

Ответ №2:

Я смоделировал работу для вас:

У меня есть контекстная переменная с именем: startFrom К ней можно получить доступ с помощью context.startFrom

Я поместил tJava с несколькими элементами: полный обзор задания

Я использую 4 настройки контекста:

  1. По умолчанию
  2. Нормальный
  3. Выбрать
  4. два

Итак, моя работа:

  1. Ничего не делает
  2. Начните с «Start»
  3. Начните с «Optional_Start»
  4. Начните с «RecoverFromHere»

Если настройки следующие:

context.startFrom.equals(«выбрать»)

Recovery и Recovery1 выводят свои имена с помощью System.out

Если я начну свою работу, я могу выбрать, где я хочу ее запустить. Если я ничего не выберу: значение контекста равно null, это ничего не сделает.

выбрать
Нормальный
два

Комментарии:

1. Это то, чего я ожидал, спасибо за идею. Немного изменил его, чтобы сделать запуск динамичным.

Ответ №3:

 you can not use prejob as it does not have runif trigger, but you can do like this
prejob -->oncomponentok-->tJava (in here you poupulate you evaluate your condition say as given below)---->RUN IF Trigger - you put your condition here..((String)globalMap.get("var_myCondition")).equals("true") --->component to run in true condition
--->RUN IF Trigger on (tJava) ---((String)globalMap.get("var_myCondition")).equals("false")--->component to run in false condition


in short your job would be like 

prejob-->tJava---(RUNIF TRIGGER)------>component/flow to run in true condition
              ---(RUNIF TRIGGER)------>component/flow to run in false condition


tJava code 
String myCondition="false";
globalMap.put("var_myCondition",myCondition);