Data Integration — Kettle: Трансформации с параметрами. Когда, зачем и как ?

Reading Time: 2 minutes

TransformParameter

Продолжим забавляться с kettle ? 🙂

Не знаю как вы, но я жутко ленивая тварь. Я за это себя ненавижу парой очень сильно, но не смотря на все внутренние противоречии, лень даёт стимул к решению той или иной задачи комплексно.

Для решения задач типа «перенеси мне  вот эти данные из табличек oracle в точно такие же но mssql» самым простым способом будет накидать в трансформации два шага «Table input» и «Table output» для каждой из табличек и жить как бы ровно. Но представьте, что этих табличек больше чем двадцать и тогда ваш скрипт из 2015-02-26 21-07-48 Скриншот экрана

 

превращается в 2015-02-26 21-14-38 Скриншот экрана

Красота конечно. И всё бы ни чего, НО! Базы данных имеют такие специальные вещи как внешние ключи «foreign keys«. Они заставляют разработчика соблюдать определённую последовательность копирования данных из одной базы в другую. «Ты такой берёшь лопату, зачерпываешь песка, подходишь к яме, а прораб, который стоит рядом с ямой говорит, что ты грёбанный дебил и нельзя кидать песок пока в яме нет щебня.» — Как то так.

Эта ситуация подводит нас к мысли что, вроде как нужно, что бы трансформации выполнялись последовательно в определённом порядке и тогда наши тридцать таблиц будут иметь каждая собственную трансформацию.

2015-02-26 21-32-59 Скриншот экрана

Жопень конечно несусветная.  И из-за этой нелицеприятной ситуации мы начинаем думать:»Как сделать так, что бы это была хотя бы одна трансформация просто работающая через параметры?»

На самом деле очень просто.

1) Создаём трансформацию, где только два шага

2015-02-26 21-43-45 Скриншот экрана

 

2) Заходим в свойства трансформации и во вкладке параметры «Parameters» создаём параметр «SyncTableName»  или как вам угодно. Именно через этот параметр мы будем передавать имена таблиц, данные из которых нужно перенести в другую базу данных.

2015-02-26 21-45-43 Скриншот экрана

 

3) Пропишем в шагах «Table input» и «Table outpu», что имя таблички нам нужно брать из глобального параметра «SyncTableName».

2015-02-26 21-51-47 Скриншот экрана

2015-02-26 21-52-44 Скриншот экрана

 

Ну вот и всё. У нас готова универсальная трансформация для копирования данных из любой таблички.

 

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

2015-02-26 22-05-12 Скриншот экрана

2015-02-26 22-06-20 Скриншот экрана

 

Вот собственно и всё. Изначально я хотел привести пример как избавиться от такого количество элементов в джобе и сделать все ещё более универсальным, через файл с указанием последовательности загрузки таблиц в нём, но подумал, что это достойно отдельной статьи, так как это будет относиться немного к другой теме.

До новых встреч.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *