Nano Hash - криптовалюты, майнинг, программирование

Talend ETL - запуск дочерней задачи в tLoop

Я пытаюсь запустить дочернее задание в tLoop. Дочернее задание подключается к Salesforce и загружает объект Account в локальную таблицу SQL Server. Есть проблемы с подключением к Salesforce, мало попыток подключения. Следовательно, я поместил материал подключения в дочернюю работу и теперь пытаюсь вызвать дочернюю работу в цикле. Ниже представлено изображение моей родительской работы.

введите здесь описание изображения

Как вы можете видеть на изображении, tRunJob_1 имеет ошибку из-за проблемы с подключением Salesforce в дочернем задании. Это правильное поведение.

SetRetryConnect, связанный с OnComponentError, имеет следующий код: context.retryConnect = true;

SetRetryConnect, подключенный к OnComponentOk, имеет следующий код: context.retryConnect = false;

Итак, я отключаю эту переменную контекста в зависимости от того, успешно или нет дочернее задание.

Мой tLoop выглядит следующим образом:

введите здесь описание изображения

Я хочу, чтобы tLoop выполнялся столько раз, пока условие не останется верным. То есть до тех пор, пока он продолжает ошибаться. Однако он повторяется только один раз, а затем останавливается. Может ли кто-нибудь сообщить мне, какое исправление нужно сделать здесь, чтобы заставить tLoop работать?

25.07.2018

Ответы:


1

Я не мог повторить вашу проблему с SalesForce, но, глядя на вашу работу, я чувствую, что когда вы говорите: «это просто повторяется один раз, а затем останавливается», это ожидаемое поведение.

В соответствии с вашим потоком заданий после tRunJob вы используете триггер OnComponentOk/OnComponentError, который будет обрабатывать и останавливать выполнение задания, поскольку он завершил бы выполнение задания. В идеале было бы хранить все в subjob сообщении tLoop, чтобы оно повторялось до тех пор, пока не будет выполнено условие.

Пример задания для объяснения — введите здесь описание изображения

Здесь используется tSetGlobalVar для определения глобальной переменной (вместо вашей переменной контекста). Затем используйте переменную globalMap как ((Boolean)globalMap.get("tLoop")) в своем «Условии» для файла tLoop.

И затем, наконец, запустите некоторый код в компоненте tJava, который что-то делает и условно устанавливает глобальную переменную в false, чтобы отметить окончание цикла. tRunJob предоставляет код возврата ((Integer)globalMap.get("tRunJob_1_CHILD_RETURN_CODE")) Если вы запускаете свое дочернее задание несколько раз и хотите, чтобы ваше задание завершалось с ненулевым значением, если одна из этих итераций не удалась, то после каждой итерации вы должны тестировать этот код возврата и сохранять его в ваш собственный объект globalMap, если он не равен нулю

int returnCode = ((Integer)globalMap.get("tRunJob_1_CHILD_RETURN_CODE"));
if (returnCode > 0) {
    globalMap.put("tLoop", false);
} 
else {
    System.out.println(returnCode);
};
26.07.2018
  • Спасибо за ваш ответ, но OnComponentOk не останавливает tLoop. Более того, как вы можете видеть на вашем изображении, tRunJob выдает предупреждение о том, что «схема не определена», потому что вы используете основную строку для продолжения потока. 26.07.2018
  • Отлично, вы заставили это работать, tRunJob выдавал ошибку, потому что я не определил какую-либо схему и не выбрал какое-либо дочернее задание, которое могло бы использовать свою собственную схему в tRunJob. Я совершенно забыл упомянуть о снятии отметки «Die on Child Error» в tRunJob — хороший улов. 26.07.2018

  • 2

    Сам нашел ответ, разместив его здесь, чтобы он мог помочь другим. Похоже, что OnComponentError ломает tLoop. Отключил поток OnComponentError и снял флажок «Умирать при дочерней ошибке» в tRunJob.

    родительская работа

    tRunJob

    tLoop остается как есть. Здесь нет изменений.

    tLoop

    RetryConnect будет использовать приведенный ниже код. Он использует CHILD_RETURN_CODE, чтобы проверить, не вызвало ли дочернее задание ошибку. В случае успеха его значение равно 0. Я отключаю переменную, когда дочернее задание завершается успешно, поэтому цикл останавливается. Как видите, tLoop показывает 2 итерации, теперь он работает как положено. Спасибо.

    повторить подключение

    26.07.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..