2016-10-27 14 views
1

Уже ясно, что все шаги из преобразования выполняются параллельно, и нет никакого способа изменить это поведение в Pentaho.PDI/Kettle: избегать выполнения создания или сопоставления файлов (под-преобразование)

Учитывая, что у нас есть сценарий с задачей переключения, который проверяет конкретное поле (чтение из имени файла) и решает, какая задача (преобразование-под-преобразование) будет обрабатывать этот файл. Это часть общей логики, которая, до и после каждой задачи отображения, делает некоторые задачи шаблонных как обновление БД записей, отправка электронной почты и т.д.

switch task Проблема: если у нас нет никаких файлов «ACCC014», это преобразование не может быть выполнено. Я понимаю, что это невозможно, так как все задачи выполняются параллельно, поэтому возникает вторая проблема: внутри НЕКОТОРЫХ сопоставлений создаются файлы XML. И даже когда Pentaho выполняет эту задачу с пустыми данными, мы не можем найти способ избежать создания выходного файла XML.

Мы думали о том, чтобы переместить эту логику коммутатора на задание, так как в теории это серийный номер, но не нашел условного шага, который бы сделал это различие.

Мы также рассмотрели задачу метаданных инжекции, но мы не считаем, что это путь. Каждое суб-преобразование действительно выполняет разные задания. Некоторые из них обновляют некоторые таблицы, другие записывают файлы, другие переносят данные между различными базами данных. Все они получают некоторый файл в качестве входных данных и возвращают флаг send_email и строку сообщения. Ничего больше.

Есть ли способ сделать то, что мы желаем? Или нет возможности повторно использовать часть логики на основе входов/выходов по умолчанию?

Редактировать: добавить трансформацию ACCC014. Да, опция «Не создавать файл при запуске» отмечена.

enter image description here

+2

Являются ли эти xml-файлы, созданные с помощью этапа XML Output? Еще в 5.2 на шаге XML Output на вкладке «Файл» на вкладке «Файл» был установлен параметр «Не создавать файл при запуске». вы проверили? – user4637357

+0

Зачем вам нужно выполнить преобразование ACCC014, если для этого нет файла? Если у вас есть побочные эффекты, которые вы хотите, разделите их на другое преобразование. –

+0

@ user4637357 Да, файл XML создается путем преобразования ACCC014, например. Я проверил «не создавайте файл при запуске», но проблема в том, что преобразование выполняется в любом случае, даже если нет записей, отправленных ему задачей switch. – jfneis

ответ

3

Вы можете использовать Transformation Executor шаг (http://wiki.pentaho.com/display/EAI/Transformation+Executor) для того, чтобы выполнить преобразование условно. Хотя я на самом деле не использовал этот шаг, поэтому я не могу сказать ничего о стабильности или производительности.

Основное преобразование:

Set-вверх ваш родитель преобразование так:
Main transformation set-up example Что касается шага Injector: в версии 5.2, я не смог получить поля, созданные в суб-преобразования, даже если они были определены на вкладке «строки результатов», поэтому я должен был определить все эти поля на шаге инжектора. Не уверен, если это все еще необходимо в текущей версии.

Возможные корректировки для трансформации Исполнитель:

  1. Возможно, вы хотели бы изменить The number of rows to send to the transformation значение на Row grouping вкладке: установите его в 0, чтобы отправить все строки сразу вместо повторного выполнения преобразование для каждые N строк.

  2. Если вы хотите прочитать выход вашего суб-преобразования, выберите «Это выход будет содержать строки результата после выполнения» вариант, а создания хмель на следующей стадии: Selecting output type

Sub-преобразование:

Единственное изменение, которое вы, вероятно, нужно здесь, чтобы заменить ввод и вывод отображения на Get rows from result и Copy rows to result:

Известная проблема в 5.2: Похоже, что исполнитель задания считывает выходные данные суб-преобразования не из шага «Копирование строк в результат», а из последнего созданного шага. Итак, если вы добавили некоторые шаги в свое суб-преобразование, не забудьте повторно создать шаг, из которого вы ожидаете прочитать результат: просто выберите «Копировать строки в результат», вырежьте его, создать хмель.

+0

Просто для подтверждения: Transformation Executor не выполняется параллельно, несмотря на то, что он не принимает строки с предыдущего шага, как и Mapping? – jfneis

+0

В соответствии с моими испытаниями он не выполняет преобразование, если нет входных строк. – user4637357

+0

Tks man, я попробую и скоро вернусь к вам! – jfneis