Сравнение имен файлов в PDI

Я пытаюсь импортировать определенный файл .CSV в свою базу данных, используя PDI (Kettle).

Обычно это было бы довольно просто, так как вы можете просто связать шаг CSV file input с шагом Table output и все готово. Однако проблема в том, что я не знаю, какой файл я хочу импортировать заранее, как перед выполнением задания/преобразования в PDI.

Это потому, что у меня есть много файлов в моей папке импорта, и все они имеют одинаковый формат имени файла: KeyDate_Filename_YYYYMMDD.CSV

Идея состоит в том, чтобы иметь файл с самым новым ГГГГММДД, импортированным для данной контрольной даты.

Мой теоретический подход к реализации этого будет следующим:

  • Сделать заданную контрольную дату доступной в PDI в качестве параметра (уже сделано)
  • Прочитать имена всех файлов, хранящихся в папке импорта
  • Отфильтровать указанные имена файлов для заданной контрольной даты
  • Сравните ГГГГММДД оставшихся файлов и выберите самый новый
  • Использовать выбранное имя файла в качестве параметра на шаге CSV file input (уже сделано)
  • Импорт данных через шаг Table output (уже сделано)

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

Кто-нибудь может придумать, как это сделать? Ценим любые отзывы


Изменить: забыл упомянуть, что я использую PDI 3.2.6.

В 4.x.x я мог бы просто использовать пользовательский класс Java, чтобы сделать это:/


person daZza    schedule 21.05.2015    source источник


Ответы (1)


Существуют различные способы достижения этого результата. Вот один:

введите здесь описание изображения

  1. Получить имена файлов перечисляет все файлы в определенной папке, которые соответствуют заданному шаблону. Поскольку ${KeyDate} уже определен как параметр, шаблон может быть

    ${KeyDate}[^]_[0–9].csv

(вы можете использовать более простое регулярное выражение, но оно будет соответствовать только именам файлов в этом формате;

  1. При оценке регулярного выражения вы получаете дату: ${KeyDate}_[^_]*_([0-9]*)\.csv. Не забудьте поставить галочку «создавать поля для групп захвата»;
  2. Упорядочить строки по этому вновь созданному полю даты.
  3. Сгруппировать по (без ключевого поля) и взять первое значение имени файла (если по возрастанию) или последнее значение (если по убыванию).

Вывод Group by step — это одна строка с самым последним именем файла, которое соответствует вашему шаблону.

Теперь вы передаете его на вход файла CSV, говоря ему «принять имена файлов из предыдущего шага» и указывая, какое поле использовать (по умолчанию — имя файла).

person nsousa    schedule 21.05.2015