Пример "Здравствуй, Мир!"

Несмотря на простоту данного примера, в нём представлены основные принципы работы с PDI:Kettle:

Описание

Для начала предполагается что существует список фамилий и имён людей в формате CSV файла, и необходимо создать XML файл с приветствием для каждого из них.

Если содержание CVS файла для обработки будет:

фамилия,имя
Иванов,Пётр
Семёнова,Любовь
Сидоров,Иван
Васильев,Семён
Семёнов,Дмитрий
Петрова,Анна

То готовый XML файл после обработки будет вида:

<Rows>
 −<Row>
       <message>Здравствуй, Пётр!</message>
  </Row>
 −<Row>
       <message>Здравствуй, Любовь!</message>
  </Row>
 −<Row>
       <message>Здравствуй, Иван!</message>
  </Row>
 −<Row>
       <message>Здравствуй, Семён!</message>
  </Row>
 −<Row>
       <message>Здравствуй, Дмитрий!</message>
  </Row>
 −<Row>
       <message>Здравствуй, Анна!</message>
  </Row>
</Rows>

Целью выполнения данного Преобразования будет создание фраз приветствий из файла.

В целом любое Преобразование состоит из цепочки Шагов (Step) связанных Переходами (Hop). Шаги и Переходы отображают путь перемещения потоков данных. Из чего следует, что Преобразование ориентированно на поток данных.

Подготовка окружения

До запуска Преобразования необходимо создать папку Tutorial в каталоге инсталляции или любом другом месте. В ней будут хранится все файлы из данного примера. Создать CSV файл с приведённым выше содержанием, и сохранить его в папке Tutorial под именем list.csv.

Инструкция по Преобразованию

Предлагаемую задачу можно разделить на три этапа:

  1. Создание Преобразования
  2. Разработка каркаса Преобразования из отдельных Шагов и Переходов
  3. Настройка Шагов в соответствии с возлагаемыми на них задачами

Создание Преобразования

Разработка каркаса Преобразования из отдельных Шагов и Переходов

Каждое Преобразование состоит из множества отдельных Шагов. Из всего разнообразия Шагов в первую очередь группируются категории отвечающие за Ввод (Input) и Вывод (Output) данных из/для внешних источников/приёмников. Каждый из Шагов разработан так, чтобы его выполнение обеспечивало результат для определенной функции, например для чтения определённых параметров или нормализации набора введённых данных.

Переход это графическое представление передачи данных между двумя Шагами от источника к приёмнику. Данные передаваемые по средствам Перехода создаются на Шаге Исходящих Данных (Output Data) и предназначены для получения на Шаге Входящих Данных (Input Data). У одного Перехода есть только одно начало и одно окончание, но можно создать несколько Переходов которые будут выходить из одного Шага. Для таких случаев Исходящие Данные могут быть скопированы или распределены между каждым из приёмников. Также данные могут поступать из разных источников на один приёмник. В таких случаях Шаг приёмник должен обладать способностью объединять Входящие Данные из нескольких источников, чтобы создать единый поток Исходящих Данных.

Преобразование должно выполнять следующие функции:

Для каждого из этих функций необходимо использовать отдельные Шаги, согласно представленной ниже схемы:

В данном примере переходы между Задачами и Шагами определены как один к одному. Это Преобразование с очень простое структурой, но так бывает не всегда.

Для того чтобы начать создавать Преобразование необходимо:

Теперь необходимо организовать связь между CSV file input и Modified Java Script Value создав Переход:

Настройка Шагов в соответствии с возлагаемыми на них задачами

Для каждого из Шагов предусмотрено окно соответствующих настроек. В окне устанавливаются параметры определяющие функциональные возможности каждого вида Шагов. При этом Наименование Шага (Step Name) не влияет на функциональные возможности Шага, а только обозначает его в Преобразовании. Описание Шага (Step Description) подробно разъясняет цели выполнения Шага, и также не влияет на его функциональные возможности.

Настройка Шага Ввод из CSV файла (CSV file input)

Примечание: Справа от поля ввода находится символ в виде красного доллара. Это обозначает возможность использования в данном поле переменные. Переменная может быть введена вручную:

${name_of_the_variable}

Или выбрана из списка в окне переменных, для чего следует нажать Ctrl-Пробел. В данном окне представлены предопределённые переменные и переменные заданные пользователем, но так как переменные не задавались, то в списке будут лишь предопределённые переменные. Среди них необходимо выбрать:

${Internal.Transformation.Filename.Directory}

После переменной ставиться наклонная черта и имя предварительно созданного файла:

${Internal.Transformation.Filename.Directory}/list.csv

После запуска значение данной переменной будет получено и выведено в виде пути к каталогу, где храниться Преобразование. Затем будет найден файл list.csv в данном каталоге.

Примечание: Кнопка Get Fields существует во многих видах Шагов и доступна в окне настроек. Она необходима для загрузки структуры данных из внешнего источника или из предыдущего Шага. При этом всё может быть введено вручную, но эта кнопка сокращает время необходимое для ввода множества полей, при этом предполагается что все они будут использованы в дальнейшей работе.

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

Конфигурация Шага JavaScript для модификации значения (Modified JavaScript Value)

(warning) Внимание: Не следует путать переменные внутри скрипта с переменными приложения PDI:Kettle, это не одно и тоже.

Примечание: Для совместимости выполнения скриптов в различных вариантах версий PDI:Kettle следует графу Compatibility mode? отметить галочкой.

Конфигурация Шага Вывод в XML файл (XML Output)

Принципы работы

При выполнении Преобразования практически все Шаги выполняются одновременно. Из-за того, что Преобразование запускает потоки асинхронно, скорость выполнения отдельных Шагов неодинакова. Каждая выполняемая строка потока передаётся на следующий Шаг не ожидая следующей строки данных. Необходимо не забывать эту особенность Преобразований, так как она может сильно повлиять на результат выполнения.

Настройка примера "Привет, Мир!" практически завершено. Преобразование считывает данные из входного файла; с помощью кода JavaScript создаются приветствия для каждого из рядов данных; в итоге полученное сообщение сохраняется в конечном файле. В данном небольшом примере всего несколько строк с именами, поэтому заметить асинхронное выполнение очень сложно. Однако надо иметь ввиду что, когда одна строка записывается в конечный файл, другая только покидает первый Шаг Преобразования.

Проверка, просмотр и выполнение

На вкладке Step Metrics отображено выполнение операций Преобразования по Шагам. Необходимо обратить внимание на следующие колонки:

На вкладке Logging отображён журнал выполнения. В нём содержится подробная информация о выполнении Преобразования по Шагам. Если детально разбирать журнал выполнения, то можно увидеть асинхронность выполнения Шагов. При успешном выполнении Преобразования в нижней строке журнала будет следующее сообщение:

Spoon - The transformation has finished!!

Также при успешном завершении Преобразования будет создан файл hello.xml, необходимо проверить его содержание на корректность выполнения поставленной задачи.

Pan

Pan это модуль исполнения Преобразований из терминального окна. Его запуск производится через скрипт pan.bat в Windows или pan.sh на других платформах. Скрипт расположен в установочном каталоге. Если скрипт запускается без параметров на экран выводятся список доступных параметров для выполнения Pan.

Запустить Преобразование можно следующей командой:

Pan /file <Jobs_path>/hello.ktr /norep

После запуска данной команды Преобразование выполняется точно также, как и при запуске через Spoon. В данном случае на экран или в файл (если его указать) будет выведен журнал выполнения. Формат журнала будет отличаться от того, что был представлен в графической оболочке, но его содержание будет аналогичным.