Извлечение XML из таблицы с помощью столбца, настройка производительности - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть таблица с CLOB, содержащая данные xml, которые могут выглядеть следующим образом:

CREATE TABLE buildings (
    id         NUMBER,
    xml_data   CLOB
);

Я хочу извлечь некоторые значения xml (кратные значения в одной строке).

XML может выглядеть следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<Event xmlns="myself.com/event">
<Warehouse whNo="100"> 
              <Buildings>
               <Building>Owned</Building>
               <Building>Owned</Building>
               </Buildings>
</Warehouse>
</Event>

Я использую запрос XMLTable, например, такой:

Insert into final_table
*
from
SELECT 
  w.id,
  x.building
FROM buildings w
CROSS JOIN xmltable (XMLNAMESPACES ( 'myself.com/event' AS "e" ),
  '/e:Warehouse/e:Buildings/e:Building'
  PASSING w.xml_data
  COLUMNS building VARCHAR2(30) PATH '.'
) x;

Этот запрос работает нормально, но проблема в том, что фактический xml намного больше похож на32 Кбайт и количество строк в миллионах. Я также извлекаю больше значений.

С этим типом запроса в добавлении nologging я получаю время обработки более пяти часов. Я искал лучшие способы через Интернет, и единственное, что я сейчас нашел, это dbms_xmlstore , который, как говорили, имел лучшую производительность , но похоже, что он сделан только для того, чтобы есть файлы илиодин большой CLOB, а у меня миллионы. Это должно быть зациклено? Оттуда я не уверен, что производительность увеличится, плюс, Мне нужно сохранить идентификатор первого столбца, связанный с xml.

Могу ли я упустить некоторые детали, которые потребляют большересурсов, чем разбирать сам? Я понимаю, что пишу вопрос о том, что оракул должен прекрасно обрабатывать размеры, намного превышающие этот.

Есть идея получше?

Есть ли способ с SQLLoader? Так как я создаю первыйтаблица из CSV-файла, где одним из полей является xml.

...