2015-05-21 2 views
1

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

Обычно это было бы довольно просто, поскольку вы могли бы просто соединить шаг 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, чтобы получить это сделать:/

ответ

4

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

enter image description here

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

    $ {} ключевая дата [^] _ [0-9] .csv

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

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

Выход из группы за шагом представляет собой одну строку с самым последним именем файла, которое соответствует вашему шаблону.

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

Смежные вопросы