Pentaho DI
November 13, 2022

Pentaho DI. Запуск job в цикле по записям в dataset(draft).

Это примерный пересказ из главы 8 Executing part of a job once for every row
in a dataset книжки A. Meadows, A. S. Pulvirenti, M. C. Roldan - Pentaho Data Integration Cookbook - 2nd Edition (2013). Пример немножко подпилил под свои нужды, плюс, описал базовую трансформацию, которая, собственно, в цикле и вызывается.

Решается та же задача, что и в заметке https://teletype.in/@velipre_xella/p7KkTByluC-, но по-другому. Пример учебный.

Создаем трансформацию, которая выполняет единичный DDL truncate table stg.{имя таблицы}. В принципе, это может быть и DML, и DCL. Важно, что мы получаем какой-то dataset и на его основе формируем sql-statement для каждой пришедшей из dataset строки.

Всё примерно так же, как в предыдущей заметке, но вместо степа типа Table input, где получали список таблиц, теперь степ Get table name типа Get system info:

Следующий шаг - создание джоба для вызова трансформации, всё понятно без комментариев:

Теперь пора вызвать предыдущий джоб "в цикле", создаем главный джоб.

В трансформации get_list формируется список таблиц для DDL, который передается(!) в джоб single_row_proc(он на предыдущей картинке) из степа Copy rows to result.

Трансформация get_list, формируем датасет и передаем его дальше

Для того, чтобы джоб single_row_proc принимал набор строк, в главном джобе нужно сделать следующее: ПКМ на single_row_proc

У меня пример из книжки не завёлся с первого раза, потому что в приложенном к книжке файле какой-то галочки не было.

Давайте посмотрим на степ, формирующий список таблиц для DDL:

Таблицы test_5_ не существует, поэтому джоб свалится с ошибкой и дальше не пойдет:

Ошибка при попытке обработать не существующую таблицу.

Таблица test_6 и все остальные, которые были за ней в списке, останутся не обработанными. Как такое побороть, видимо, ещё напишу в одной из следующих заметок.