Изменить
Судя по комментарию, это способ загрузить несколько «одинаковых xsd» xml-файлов.
Во-первых, вы должны убедиться, что весь XML имеет одинаковую структуру XSD, иначе вы можете столкнуться с странным поведением.
Чтобы обработать более одного XML-файла, вам нужно сделать следующее:
1) Вы даете определенное фиксированное имя XML и на его основе создаете свою топологию. 2) Создайте «элемент управления обработкой файлов» для переименования и перемещения файлов перед чтением. 3) Убедитесь, что вы выполняете правильные команды "синхронизации".
Пример
У вас есть файлы XML:
/path/in/XML001.XML
/path/in/XML002.XML
/path/in/XML003.XML
Сохраните один из файлов как XML_DATA.xml и настройте свою топологию с XML_DATA.xml в некотором пути '/ work /', проверьте, все ли в порядке, протестировав.
Обработка цикла, в котором:
1) Переместите /path/in/XML001.XML в /path/work/XMLDATA.XML (перезапишите или удалите старые XMLDATA)
2) Выполните «СИНХРОНИЗИРОВАТЬ ИЗ ФАЙЛА»
3) Обработайте свои интерфейсы
4 ) Выполните «СИНХРОНИЗАЦИЯ ИЗ БД»
5) Переместите обработанный XML в «/ путь / обработанный /»
Ваш пакет будет примерно таким:
[Цикл]> [MoveFile]> [ProcedureSync]> [Interfaces]> [ProcedureSync]> [MoveFile]> [EndLoop] "
Что касается контроля цикла, есть несколько способов сделать это, если вы сомневаетесь, я могу послать вам подсказки.
Надеюсь, это поможет!
Изменить 2
Основываясь на новой информации, я постараюсь дать более подробное объяснение заданных вопросов. Это не такая уж сложная задача, но для тех, кто все еще разбирается в инструментах ODI, это может показаться трудным.
Главное - понять, что для ODI XML-файл является источником данных, как и база данных, а не файлом, подобным .csv.
- (В) Как создать контроль обработки файлов?
- (A) То, что я назвал «управлением обработкой файлов», представляет собой простой механизм, с помощью которого вы «перемещаете / копируете / удаляете» ваши XML-файлы по папкам. Вы можете сделать это с помощью инструментов пакета OdiFileCopy, OdiFileDelete и т. Д.
- (В) Я недостаточно разбираюсь в команде синхронизации. Вы можете дать мне более подробную информацию?
- (A) Синхронизация необходима при использовании файлов XML в ODI. Обычно, когда ODI использует XML-файл, сначала он загружает его в память. Затем ODI создает файл .lck, который блокирует файл XML. Когда вы закончите свой пакет, XML-файл все еще находится в памяти, поэтому вам нужно снова «загрузить» его в файл и снять блокировку, а ODI не делает этого самостоятельно. Это связано с тем, что вы должны иметь возможность запускать столько пакетов, сколько сочтете нужным в процессе загрузки, при этом XML-файл все еще доступен. Поэтому, когда вы закончите, вы должны сообщить, что больше не будете использовать XML, запустив команду синхронизации из базы данных.
- Должен ли я создавать топологию технологии XML или топологию файловой технологии? или оба?
- (A) Вам не нужно создавать топологию для File, чтобы запустить инструменты пакетного файла. Просто имейте в виду, что вы должны создать топологию XML для «универсального» файла. Вместо того, чтобы устанавливать для топологии OM135SVOD180624.xml, вы должны установить для нее значение OMDATASOURCE.xml.
- Мне нужно больше информации о Loop Control
- (А) Сделаю более подробное описание. К сожалению, сейчас у меня здесь нет установленного ODI, иначе я бы также опубликовал пример. Но я думаю, это будет легко понять.
1) Пример использования синхронизации при работе с файлами XML.
При доступе к XML-файлу для чтения или записи рекомендуется действовать следующим образом:
- Выполните команду «СИНХРОНИЗИРОВАТЬ ИЗ ФАЙЛА» в логической схеме файла XML. Вы можете сделать это, создав процедуру ODI, установив технологию на XML, указав логическую схему на созданную вами и написав в окне «команда на цели»: СИНХРОНИЗИРОВАТЬ ИЗ ФАЙЛА.
- Запустите свои пакеты ODI или планы загрузки, которые читают или записывают XML-файл.
- Выполните команду «СИНХРОНИЗИРОВАТЬ ИЗ БАЗЫ ДАННЫХ» в логической схеме файла XML. Вы можете сделать это, создав процедуру ODI, установив технологию на XML, указав логическую схему на созданную вами и написав в окне «команда на цели»: СИНХРОНИЗИРОВАТЬ ИЗ БАЗЫ ДАННЫХ.
- Полную ссылку для этого очень легко найти здесь: https://docs.oracle.com/cd/E28280_01/integrate.1111/e12644/xml_file.htm#ODIKM534 в пункте 5.6.1.2.
Пример: ![введите описание изображения здесь](https://i.stack.imgur.com/FKaaB.png. )
2) Контроль обработки файлов
В пакете, внутри панели инструментов, есть панель инструментов «Файл», которая дает вам множество полезных инструментов для работы с файлами, таких как копирование, удаление, перемещение, архивирование, разархивирование и т. Д. Это полезно, когда вам нужно «контролировать» файлы, которые вы читаете, переименовываете и т. д.
Вы можете немного поиграть с этими инструментами, они очень просты для понимания.
3) Циклическое управление
В ODI вы можете разработать цикл, используя переменные в пакете. Иногда вы можете обрабатывать циклы просто с помощью процедуры odi, это зависит от ваших потребностей. Основываясь на той небольшой информации, которая у меня есть о вашем контексте, я предлагаю вам сначала попробовать использовать переменные.
Итак, вот пример, который обрабатывает цикл 5 раз.
1) Создайте переменную как число.
2) Перетащите ее в пакет и установите значение 0.
3) Перетащите ее снова, настройте как Evaluation, установите условие равным 5.
4) Перетащите любой имеющийся у вас "тестовый" интерфейс.
5) Свяжите ссылку KO с интерфейсом. При использовании оценивающих переменных KO-ссылки действуют как «ложное» условие. В нашем случае он будет указывать на интерфейс, если счетчик равен ‹5.
6) Снова перетащите переменную, на этот раз вместо установки фиксированного значения вы установите приращение на 1. Это добавит 1 к значение.
7) Свяжите эту последнюю переменную с переменной Evaluate.
Итак, ваш тестовый интерфейс будет выполнен 5 раз. Я нашел в Интернете изображение, которое это иллюстрирует:
![Пример цикла в ODI](https://i.stack.imgur.com/ft2Js.png)
Вы можете найти полезную информацию здесь "https://dzone.com/articles/odi-11g-implementing-loops "и" https://blogs.oracle.com/dataintegration/using-variables-in-odi:-creating-a-loop-in-a-package ".
Последний пакет
В конце концов, ваш «алгоритм» будет примерно таким:
1) Обработайте цикл по файлам в папке (это немного сложно, может потребоваться код jython, вы можете найти ссылку для этого здесь "https://blogs.perficient.com/2014/08/01/loop-through-files-in-a-folder-using-odi/ ")
2) Переместите первый файл в /work/OMDATASOURCE.xml.
3) СИНХРОНИЗИРОВАТЬ ИЗ БАЗЫ ДАННЫХ.
4) Обработайте свои интерфейсы
5) Команда СИНХРОНИЗАЦИЯ ИЗ ФАЙЛА.
6) Переместите OMDATASOURCE.xml в «/ processing» или в любой другой созданный вами элемент управления.
7) Обработать следующий файл. Вы также можете контролировать некоторые вещи с помощью таблиц, например, прочитанные файлы, обработанные файлы и т. Д.
8) Завершить цикл (с использованием присланных мною примеров управления циклом).
ODI очень гибкий и расширяемый, вы можете делать все разными способами.
Рекомендации
- Есть и другие способы сделать это. Вы можете установить переменную в имени файла XML. Это предотвратит необходимость «переместить и переименовать», но вам все равно нужно будет обработать цикл по файлам в пути, чтобы получить параметры для нужных вам файлов, или, по крайней мере, чтобы они были в таблице, чтобы вы могли обрабатывать цикл и измените значения.
Надеюсь, это поможет, []
Ваше здоровье
person
Filipe
schedule
31.07.2018