Продолжить поток на основе результата запроса БД

Я разрабатываю ETL. Первым шагом является ввод текстового файла, который добавляет к потоку некоторые метаданные из «дополнительных полей вывода», включая имя файла и последнее изменение.

Я должен сделать запрос к БД, чтобы проверить, было ли это имя файла с последней измененной датой времени уже обработано. Если это так, поток должен остановиться и следующие шаги не должны выполняться.

Это возможно? Я погуглил об этом и не нашел примера.


person Hikari    schedule 28.08.2017    source источник


Ответы (2)


Pentaho обрабатывает все шаги параллельно, поэтому такая линейная абстракция может немного сбить с толку.

Что вам нужно сделать, так это не возвращать никаких строк, если вы не хотите продолжать обработку. Если последующие шаги получат 0 строк, они ничего не сделают.

Для этого есть несколько способов:

  1. Создайте свой SQL-запрос таким образом, чтобы он просто возвращал строку, если НЕТ ФАЙЛА с тем же именем
  2. Используйте шаг переключения + обнаружение пустого потока + строки фильтра, чтобы гарантировать, что только в том случае, если у вас нет результата от вашего запроса, строка перейдет к следующим шагам
person jfneis    schedule 28.08.2017

Проблема, с которой вы столкнетесь очень скоро: «Что, если я попытаюсь начать преобразование, когда оно уже выполняется?». Это звучит как академический вопрос до тех пор, пока ваш crontab не зайдет в тупик или пока вы, пользователи, не пожалуетесь на двойной учет данных трехнедельной давности.

Вы должны проверить это в job. В отличие от преобразования, при котором все шаги выполняются параллельно, записи задания выполняются одна за другой. Вы можете использовать запись Scripting/SQL и поставить условие, например logdate<now()-10minutes, как описано в этот вопрос.

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

person AlainD    schedule 29.08.2017