Tlogcatcher, кажется, не работает
Я разрабатываю некоторые задания с помощью Talend и использую Tlogcatcher для записи ошибок в базу данных. Кажется, работает для всех заданий, кроме одного.
Вот как это работает:
Первое соединение SQL считывает оператор SQL из таблицы базы данных, а для каждого из них tMSSqlRow считывает и выполняет его.
Но когда произошел сбой SQL (т. Е. Удалить невозможную причину целостности ограничения), ошибка не перехватывается компонентом tLogCatcher.
Как я могу это сделать?
Заранее спасибо. С Уважением,
1 ответ
tLogCatcher
не должен использоваться, как вы использовали в своей работе (с OnComponentError
/OnSubjobError
триггеры), это должен быть первый компонент независимой подзадачи (не связанной триггером), который вызывается всякий раз, когда возникает исключение ошибки / предупреждения / java, в зависимости от того, какие типы вы регистрируете tLogCatcher
Настройки.
Если вы хотите сохранить OnComponentError
триггер, вы можете опустить tLogCatcher
в целом, и просто выполните обработку ошибок в подзадаче, вызванной OnComponentError
,
Кроме того, убедитесь, что вы отметили опцию "Умереть при ошибке" в компоненте tMSSqlRow, в противном случае ошибка не выдается, и задание просто выводит сообщение об ошибке на консоль и продолжает выполнение, таким образом, tLogCatcher
не будет вызван.
Редактировать:
Исходя из вашего требования (продолжить выполнение задания при ошибке), решение будет заключаться в инкапсуляции обработки, которая начинается с tMSSqlRow
вперед (а также метод обработки ошибок, который я предложил выше) в детской работе.
Это дочернее задание должно определить параметр контекста (например, QUERY) и выполнить обработку для этого отдельного запроса. Родительская работа называет эту дочернюю работу Iterate
триггер, и передавая каждый запрос для обработки через параметр контекста QUERY (глобальная переменная, которая находится в вашем tFlowToIterate
передается QUERY
параметр контекста в tRunJob
вкладка параметров).
Таким образом, если обработка вашего запроса в дочернем задании приводит к ошибке, она обрабатывается внутри дочернего задания tLogCatcher
и родительское задание не знает об этой ошибке, поэтому оно переходит к следующему запросу.