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

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

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

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

2 ответа

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

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

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

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

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

Есть несколько способов сделать это:

  1. Создайте свой SQL-запрос таким образом, чтобы он просто возвращал строку, если нет файла с таким именем
  2. Используйте шаг переключения + обнаружение пустого потока + строки фильтра, чтобы гарантировать, что только когда у вас нет результата из запроса, строка перейдет к следующим шагам
Другие вопросы по тегам