Как вызвать сопоставление для каждого входящего файла в Oracle Data Integrator (ODI)
Я работаю с Oracle Data Integrator 12c, и у меня есть несколько текстовых файлов, которые кто-то копирует в папку "/import". ODI должен это заметить и вызвать Mapping для каждого файла. Затем каждый файл должен быть сохранен в другой папке "/export"
Мое отображение отлично работает для одного файла. Я указал этот файл в части модели. Но как я могу динамически загрузить каждый файл и позволить сопоставлению работать с каждым файлом, а затем сохранить его?
Надеюсь понятно что я хочу:)
заранее спасибо
2 ответа
Я завершил процесс, аналогичный вашей необходимости. Это не было точной потребностью, но шаги могут помочь вам. Мое решение было немного хитрым, так как сторонние поставщики отправляют файлы в каталог через FTP, и не существует ограничений по количеству файлов или стандарту имени файла.
Поскольку работа выполнялась в бывшем клиенте, я не могу предоставить вам полные коды шагов и снимки экрана, но могу рассказать об общих чертах. Вам понадобится пакет ODI
- В компоненте OSCommand я дал
ls >> filelist.txt
- У меня был файл чтения интерфейса
filelist.txt
в таблицу с порядковым номером для каждой строки. - У меня была переменная ODI
#MAX_ROW_NUM
который читает максимальный номер файла из таблицы выше. - Оценить переменную для
#MAX_ROW_NUM > 0
- Получить имя файла в
#FILE_NAME
переменная из таблицы, гдеROW_NUM = #MAX_ROW_NUM
- С помощью
#FILE_NAME
выполнить интерфейс (исходное хранилище данных должно быть динамическим в модели) - Использование компонента OSCommand для перемещения файла с
#FILE_NAME
в/completed
каталог. - Используя процедуру ODI, удалите строку с
#MAX_ROW_NUMBER
из таблицы списка файлов - Значение приращения
#MAX_ROW_NUMBER
от-1
- Перейти к 4
Необязательный шаг, вы можете перейти от шага 4 к другому OSCommand, который удаляет filelist.txt
Я надеюсь, я мог бы объяснить мой процесс ясно, в случае дальнейшей помощи, не стесняйтесь спрашивать.
Согласно вашему требованию, вам нужно будет опросить в папке импорта, где кто-то размещает файл. Вы можете выбрать время опроса, как требуется в секундах.
Вам нужно будет создать пакет со следующим потоком:
ODI Utility ODIFileWait, поможет вам дождаться, пока файл с определенным шаблоном или без него поступит в указанную папку. Как только ODI найдет или заметит файл, он перейдет к следующему шагу.
Используя OSCommand ls>>filenames.txt, получите все имена файлов в отдельном файле. Теперь создайте таблицу БД, в которой имена файлов с таким статусом загрузки могут быть заполнены уникальным порядковым номером для каждой записи. Прочтите файл filenames.txt и заполните таблицу БД статусом загрузки для каждого имени файла.
- Создайте переменную, которая подсчитывает и хранит общее количество файлов на основе состояния загрузки (ожидающего обработки или нет) из таблицы БД и проверяет, больше ли оно нуля, прежде чем продолжить.
В другой переменной возьмите минимум порядкового номера из той же таблицы БД и на основе порядкового номера извлеките имя файла из той же таблицы.
Теперь обработайте ваше отображение или интерфейс, но убедитесь, что при создании исходного хранилища данных (файла) укажите имя переменной (которая использовалась для получения имени файла на предыдущем шаге) в поле имени ресурса.
Переходите к шагу 3, пока количество необработанных файлов не станет равным 0.