Продолжим забавляться с kettle ? 🙂
Не знаю как вы, но я жутко ленивая тварь. Я за это себя ненавижу парой очень сильно, но не смотря на все внутренние противоречии, лень даёт стимул к решению той или иной задачи комплексно.
Для решения задач типа «перенеси мне вот эти данные из табличек oracle в точно такие же но mssql» самым простым способом будет накидать в трансформации два шага «Table input» и «Table output» для каждой из табличек и жить как бы ровно. Но представьте, что этих табличек больше чем двадцать и тогда ваш скрипт из
Красота конечно. И всё бы ни чего, НО! Базы данных имеют такие специальные вещи как внешние ключи «foreign keys«. Они заставляют разработчика соблюдать определённую последовательность копирования данных из одной базы в другую. «Ты такой берёшь лопату, зачерпываешь песка, подходишь к яме, а прораб, который стоит рядом с ямой говорит, что ты грёбанный дебил и нельзя кидать песок пока в яме нет щебня.» — Как то так.
Эта ситуация подводит нас к мысли что, вроде как нужно, что бы трансформации выполнялись последовательно в определённом порядке и тогда наши тридцать таблиц будут иметь каждая собственную трансформацию.
Жопень конечно несусветная. И из-за этой нелицеприятной ситуации мы начинаем думать:»Как сделать так, что бы это была хотя бы одна трансформация просто работающая через параметры?»
На самом деле очень просто.
1) Создаём трансформацию, где только два шага
2) Заходим в свойства трансформации и во вкладке параметры «Parameters» создаём параметр «SyncTableName» или как вам угодно. Именно через этот параметр мы будем передавать имена таблиц, данные из которых нужно перенести в другую базу данных.
3) Пропишем в шагах «Table input» и «Table outpu», что имя таблички нам нужно брать из глобального параметра «SyncTableName».
Ну вот и всё. У нас готова универсальная трансформация для копирования данных из любой таблички.
Теперь в нашем джобе в каждой трансформации для каждой таблицы указываем универсальную трансформацию и имя таблички.
Вот собственно и всё. Изначально я хотел привести пример как избавиться от такого количество элементов в джобе и сделать все ещё более универсальным, через файл с указанием последовательности загрузки таблиц в нём, но подумал, что это достойно отдельной статьи, так как это будет относиться немного к другой теме.
До новых встреч.
PDI 9
Попрбовал сделать то же на мс-скл сервре
если явно указываю в copy2.ktr
SyncTableName = aa
все работает
Если вызываю из
${Internal.Entry.Current.Directory}/copy2.ktr
Я вижу что 0 записей
но не могу понять ПОЧЕМУ ??
Вопрос как понять в чем проблема
если трансформация НЕ выдадет ошоибок ??
Попробуйте проверить есть ли что-то в переменной ${Internal.Entry.Current.Directory}. На сколько я помню с ней могут быть проблемы в зависимости от того используете ли вы репозиторий или нте. Если я смогу добраться в ближайшие пару дней, попробую посмотреть на 9-ой версии.
Ты не тормози! Учись и изучай!:)