ODI: загрузка данных из файла XML и вставка в базу данных Oracle

Я новичок в ODI (Oracle Data Integrator) 11g. У меня есть файл XML. Мне нужно загрузить данные из этого XML-файла в Oracle Database. Я создал проект, импортировал модуль знаний, создал модель XML и Oracle.

Примечание. Мой XML-файл состоял из более чем 40 таблиц. вот мой интерфейс

Я создал модель XML и Oracle

Целевое хранилище данных на данный момент хранит только 1 таблицу.

Вот мой журнал сеанса:  Сообщение об ошибке


person Sambuu    schedule 26.07.2018    source источник


Ответы (1)


Изменить

Судя по комментарию, это способ загрузить несколько «одинаковых 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.

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

2) Контроль обработки файлов

В пакете, внутри панели инструментов, есть панель инструментов «Файл», которая дает вам множество полезных инструментов для работы с файлами, таких как копирование, удаление, перемещение, архивирование, разархивирование и т. Д. Это полезно, когда вам нужно «контролировать» файлы, которые вы читаете, переименовываете и т. д.

Вы можете немного поиграть с этими инструментами, они очень просты для понимания.

3) Циклическое управление

В ODI вы можете разработать цикл, используя переменные в пакете. Иногда вы можете обрабатывать циклы просто с помощью процедуры odi, это зависит от ваших потребностей. Основываясь на той небольшой информации, которая у меня есть о вашем контексте, я предлагаю вам сначала попробовать использовать переменные.

Итак, вот пример, который обрабатывает цикл 5 раз.

1) Создайте переменную как число.
2) Перетащите ее в пакет и установите значение 0.
3) Перетащите ее снова, настройте как Evaluation, установите условие равным 5.
4) Перетащите любой имеющийся у вас "тестовый" интерфейс.
5) Свяжите ссылку KO с интерфейсом. При использовании оценивающих переменных KO-ссылки действуют как «ложное» условие. В нашем случае он будет указывать на интерфейс, если счетчик равен ‹5.
6) Снова перетащите переменную, на этот раз вместо установки фиксированного значения вы установите приращение на 1. Это добавит 1 к значение.
7) Свяжите эту последнюю переменную с переменной Evaluate.

Итак, ваш тестовый интерфейс будет выполнен 5 раз. Я нашел в Интернете изображение, которое это иллюстрирует:

Пример цикла в ODI

Вы можете найти полезную информацию здесь "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
comment
Спасибо за ответ, я создал интерфейс вставки для каждой таблицы. Это сработало. Теперь у меня другая проблема. Пример: у меня есть 12 файлов .xml с одинаковой структурой. Как загрузить все файлы? Меню создания топологии назначается только одному файлу. - person Sambuu; 01.08.2018
comment
Привет Самбуу. Я отредактирую свой ответ, чтобы ответить на это, из-за ограничения количества символов в комментариях, хорошо? - person Filipe; 01.08.2018
comment
Привет, Самбуу, спасибо, что нашли мою информацию полезной. Я отредактирую свой ответ, чтобы отправить ответ о новых комментариях. В будущем постарайтесь не отвечать на собственный вопрос. Когда проблема развивается, возможно, лучший способ действий - открыть новый вопрос или отредактировать свой собственный ранее опубликованный вопрос. Ваше здоровье! - person Filipe; 02.08.2018
comment
Здравствуйте, Филипе, я отредактировал свой вопрос. Вы можете проверить? Спасибо - person Sambuu; 06.08.2018