Продолжаем изучение базовых возможностей kettle.
Задача: «Трансформация произвела какую-то обработку и получила на выходе n строк. Для каждой строки необходимо выполнить работу.»
Задача сформулирована в общем виде, но этого вполне достаточно.
Первый job
Будет иметь вид:
Сделаем необходимые настройки.
Трансформация (getData)
Самым главным шагом данной трансформации является «Copy rows to result». Этот шаг отправляет в родительский Job все строки и поля, которые поступили в этот шаг.
Работа (Job)
Просто выводим в log данные, для которых запускался Job.
Результат
Результат работы вы можете увидеть в логе. Именно для этого мы добавляли шаг «Write To Log» в Job
Возможно вы скажите, что я обленился, так как не пишу много текста. Это не так. К сожалению, я просто не знаю что можно написать тут по существу. 🙂
Пример как обычно по ссылке: runJTForEachRow
Добрый день. Долго мучился с этим. Пытаюсь грузить таким способом *.dbf через xbase. Файлов много каждый по структуре разный. Имена файлов примерно такие 12122015_KK1.DBF, 12122015N1.DBF. Как их можно обработать т.е. убрать дату из имени файла и передать его в Table Input как имя таблицы.
Добрый день.
Что именно у вас не получается ?
На первый взгляд структура вашего скрипта должна выглядеть примерно так:
1) Старт
2) трансформация
Get file name — получаем имена файлов
Modified Java Script Value — очистка имён файлов http://iie52.ru/wp-content/uploads/2016/05/2016-05-17_13-42-39.png
Copy to result
3) Трансформация на загрузку — http://iie52.ru/wp-content/uploads/2016/05/2016-05-17_13-27-39.png
4) Конец
PS: Сейчас у меня нехватка времени, не могу более подробно написать. Если всё равно не получиться пришлите ваш пример.
Приветствую снова. Спасибо за ответ отправляю свои скрины.
http://s019.radikal.ru/i628/1605/50/b39ce7042cf4.jpg
http://s017.radikal.ru/i430/1605/5d/9f4b92d643b1.jpg
http://s019.radikal.ru/i606/1605/53/bf1cabc6e8ec.jpg
Во второй трансформации если не указать GET ROWS FROM RESULT то параметры не передаются.
Указал GET ROWS FROM RESULT далее в XBASE выбрал Step to read filenames from и указал GET ROWS FROM RESULT параметр соответственно fname и проверил он вроде бы работает но дальше в Table Output там где указываем имя таблицы я пытаюсь использовать второй параметр ${sname} вываливается ошибка я так понимаю туда просто ничего не передается. Уже кучу вариантов перепробовал. 🙁
Возможные причины:
1) Проверьте какие строки выходят из трансформации, которая получает имена файлов. Для этого достаточно поставить вывод в текстовый файл после шага Modified Java Script. Хотя должно быть всё нормально, но проверить стоит. Может у вас вообще не генерируются строки из шага Get file names
2) Использовать Copy Rows From Result тут не нужно. У вас трансформация должна выполняться для каждой входящей строки. (можно сделать конечно иначе, что бы она все файлы обрабатывала, но это немного сложнее) Проверьте в настройках трансформации http://iie52.ru/wp-content/uploads/2016/05/2016-05-18_12-32-46.png
Пример:
Написал вам пример. Он точно рабочий. Разместите его в корне диска C:\ или перепишите пути внитри. Загрузки в нужную таблицу нет, но показано, что переданные параметры можно использовать. https://mega.nz/#!B80kFBjB!Bs8LLQxemJtu8NgTQ9uPdfLzTrxkrZd3e-AG9-WgStM
огромное спасибо Вам. Я сделал через Copy Rows From Result как я понял из первого вашего поста я не указал Perfomance Graph (configure), указал и все заработало. Попробовал Ваш пример и понял, что можно сделать без Copy Rows From Result оказывается на 100% не уверен но проблема была когда во второй трансформации я указывал параметры
Parameter и Stream column name в моем случае это
Parameter = sname, Stream column name = sname
Parameter = fname, Stream column name = fname
т. е. Stream и Parameter одни и те же параметры. Указал разные
Parameter = sname1, Stream column name = sname
Parameter = fname1, Stream column name = fname
и все заработало. Указывал одинаковые потому что все примеру что на гуглил были именно такие , а дошло не сразу.
еще раз спасибо.
Здравствуй.
Подскажи а в эту конструкцию XBASE -> TABLE OUTPUT
можно добавить еще одно поле к примеру дату извлеченную из имени файла. т. е. к каждой импортируемой таблице добавить поле. Количество полей разное у таблиц.
Добрый вечер.
Да, можно. TABLE OUTPUT делает мапинг полей самостоятельно. Главное что бы имена колонок потока соответствовали именам колонок таблицы.
Вот пример: https://mega.nz/#!JoNCBCbb!_EB0N4WndkA4q8KOYp_LqjQ7nn75IZQpf_HHJqBPN4Q
Структура таблиц в файле create_table.sql