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.
Для того, чтобы джоб single_row_proc принимал набор строк, в главном джобе нужно сделать следующее: ПКМ на single_row_proc
У меня пример из книжки не завёлся с первого раза, потому что в приложенном к книжке файле какой-то галочки не было.
Давайте посмотрим на степ, формирующий список таблиц для DDL:
Таблицы test_5_ не существует, поэтому джоб свалится с ошибкой и дальше не пойдет:
Таблица test_6 и все остальные, которые были за ней в списке, останутся не обработанными. Как такое побороть, видимо, ещё напишу в одной из следующих заметок.