Как вести журнал выполнения задач в Talend Open Studio?

У меня есть несколько примеров заданий, которые переносят данные из одной базы данных в другую, и я хотел бы иметь некоторую информацию о текущем прогрессе, например, о том, что у вас есть, когда задание запускается в интерактивном режиме из самого приложения (я экспортирую и запускаю его из командной строки ). Я использую flowMeter и statsCatcher, но все, что я получил, — это общее время и общее количество переданных записей (например, 4657 секунд, 50 000 000 строк). Есть ли решение, чтобы получить приличный журнал?


person Bax    schedule 17.06.2013    source источник


Ответы (3)


Ваше решение заключается в добавлении условного предложения в ведение журнала. Что-то истинное на одну строку каждые, скажем, 50000. Это условие с использованием последовательности должно работать:

Numeric.sequence("log_seq",1,1) % 50000 == 0 

Для в основном выводите свой журнал, используя фасадный стек sl4j. Компонент имеет параметр под названием «Условное ведение журнала», чтобы отправлять сообщение только тогда, когда условие оценивается как истинное.

В качестве альтернативы, если вам не нравится идея установки пользовательского компонента, вы можете завершить свою подзадачу, используя стандартный tLogRow (или tWarn, tDie или что-то еще) с префиксом tFilter с тем же выражением, что и расширенное условие. Таким образом, вы позволите потоку проходить (и сообщению журнала запускаться) только один раз каждые 50000. Вот очень простая диаграмма работы.

//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow)
person Gabriele B    schedule 18.06.2013
comment
tFilter кажется хорошим решением. - person Jean-Michel Garcia; 18.06.2013

Насколько я знаю, tLogRow выводит в консоль. Таким образом, вы можете легко подключить к нему выход.

Если tLogRow недостаточно, вы можете подключить свой вывод к компоненту TJavaFlex. Там вы можете использовать что-то вроде log4j или любой пользовательский вывод.

Вы также можете использовать tFileDelimitedOutput в качестве файла журнала. Этот компонент имеет удобную опцию «добавить», которая работает как шарм для этого варианта использования.


На ваш вопрос выше: Как получить информацию журнала

По опыту могу сказать, что некоторые компоненты выводят поток. Например, tMysqlInput выводит успешно вставленные строки.

Как правило, для логирования информации я использую компонент tReplicate, который позволяет мне выводить копию потока в лог-файл.

 tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB)
                              +---- tMap -------- tDelimitedFile (log info)
person Jean-Michel Garcia    schedule 17.06.2013
comment
Я не хочу регистрировать каждую строку, а только некоторые советы по прогрессу (например, 50 000 вставленных 100 000 вставленных ... и т. д.) - person Bax; 17.06.2013
comment
Сохраните статическую переменную с количеством обработанных строк, а затем выведите ее, когда захотите. Я не думаю, что есть что-то готовое к использованию. - person Jean-Michel Garcia; 17.06.2013
comment
главная проблема не в том, как его вывести, а в том, как его получить - person Bax; 18.06.2013
comment
Нет необходимости в переносимой информации, просто для ее количества (запускать журнал при каждой фиксации/каждых вставленных 50 тыс. записей), насколько я понимаю, я мог бы поместить компонент Java после DBOutput, увеличить некоторый контекстный var и println что-то на консоли, когда $ вар % 50.000 = 0 - person Bax; 18.06.2013
comment
спасибо, я думал, что должен быть какой-то флажок (как у Pentaho Kettle), так как я думаю, что это очень распространенный вариант использования - person Bax; 18.06.2013
comment
Если вы найдете что-то, пожалуйста, обновите свой вопрос. Я голосую за, так как это интересно. - person Jean-Michel Garcia; 18.06.2013

Вы также можете использовать tWarn в сочетании с tLogCatcher:

tMySqlOutput ---- tFilter ---- tWarn

tLogCatcher ---- tMap ---- tLogRow

tFilter не позволит вам регистрировать прогресс при каждом завершении строки (см. ответ Габриэле Б). tWarn будет иметь фактическое сообщение, которое вы хотите выйти из системы.

tLogCatcher должен получать входные данные от всех tWarns, tMapper преобразует каждую строку из logCatcher в выходную строку, а tLogRow регистрирует ее.

Этот ответ описан более подробно (с картинками): http://blog.wdcigroup.net/2012/05/error-handling-in-talend-using-tlogcatcher/

person Denise    schedule 14.01.2014