powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ГАР государственный адресный реестр (xml) - медленно загружается
6 сообщений из 6, страница 1 из 1
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088120
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется ГАР в xml-формате https://fias.nalog.ru/Updates
разрабатываю-тестирую загрузку.
беру файл ./01/AS_MUN_HIERARCHY_20210426_e2abd020-b64d-4be7-a973-a8a3d10353d5.XML

создаю представление для импорта:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create or replace view TEST_MUN_HIER_IMPORT_V as
SELECT *
FROM XMLTable('/ITEMS/ITEM'
      passing xmltype(
                bfilename('GAR_DIRECTORY','01/AS_MUN_HIERARCHY_20210426_e2abd020-b64d-4be7-a973-a8a3d10353d5.XML')
              , nls_charset_id('AL32UTF8')
              )
      columns ID          number             path '@ID'
             ,OBJECTID    number             path '@OBJECTID'
             ,PARENTOBJID number             path '@PARENTOBJID'
             ,CHANGEID    number             path '@CHANGEID'
             ,OKTMO       varchar2(11 byte)  path '@OKTMO'
             ,PREVID	  number             path '@PREVID'
             ,NEXTID	  number             path '@NEXTID'
             ,UPDATEDATE  date	             path '@UPDATEDATE'
             ,STARTDATE	  date	             path '@STARTDATE'
             ,ENDDATE	  date	             path '@ENDDATE'
             ,ISACTIVE	  number             path '@ISACTIVE'
     )
;



создаю таблицу для импорта:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table TEST_MUN_HIERARCHY(
 ID          number not null   --Уникальный идентификатор записи. Ключевое поле    N(19)    О
,OBJECTID    number not null   --Глобальный уникальный идентификатор адресного объекта    N(19)    О
,PARENTOBJID number            --Идентификатор родительского объекта    N(19)    Н
,CHANGEID    number not null   --ID изменившей транзакции    N(19)    О
,OKTMO       varchar2(11 byte) --Код ОКТМО    Т(8-11)    OК
,PREVID      number            --Идентификатор записи связывания с предыдущей исторической записью    N(19)    Н
,NEXTID      number            --Идентификатор записи связывания с последующей исторической записью    N(19)    Н
,UPDATEDATE  date not null     --Дата внесения (обновления) записи        О
,STARTDATE   date not null     --Начало действия записи        О
,ENDDATE     date not null     --Окончание действия записи        О
,ISACTIVE    number not null   --Признак действующего адресного объекта    N(=1)    ОК
);



запускаю процедуру импорта:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare 
    CURSOR xml_cursor IS
    select *
    from TEST_MUN_HIER_IMPORT_V
    ;
    TYPE xml_cursor_t IS TABLE OF xml_cursor%ROWTYPE;
    xml_cursor_rows   xml_cursor_t;
    l_cnt number;
  procedure log(p_line varchar2) is
  begin
    --тут автономно-транзакционная процедура логирования
  end log;
begin
    l_cnt := 0;
    OPEN xml_cursor;
    LOOP
        log('full_import before fetch');
        FETCH xml_cursor
        BULK COLLECT INTO xml_cursor_rows
        LIMIT 100
        ;
        EXIT WHEN xml_cursor_rows.COUNT = 0;
        log('full_import before forall');
        FORALL indx IN INDICES OF xml_cursor_rows
        insert /*+ APPEND */ into TEST_MUN_HIERARCHY values xml_cursor_rows(indx)
        ;
        l_cnt := l_cnt + xml_cursor_rows.COUNT;
        log('full_import inserted in TEST_MUN_HIERARCHY l_cnt='||l_cnt);
        commit;
    END LOOP;
    close xml_cursor;
    log('full_import after insert TEST_MUN_HIERARCHY');
end;
/



процедура фетчит из XML по 100 записей и вставляет в таблицу назначения.
Из лога вижу, что сам фетчинг 100 записей занимает 20 (!) секунд.
Миллионы записей так загружать не получится.
Прошу совета, либо как понять почему так долго, либо, может возможен другой, более быстрый способ импорта XML?
Ранее загружался ФИАС в формате .dbf через sqlloader-движок, такой проблемы не было, т.е. вряд это проблема в быстродействии железа.
...
Рейтинг: 0 / 0
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088238
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переделал на загрузку как table ORGANIZATION EXTERNAL TYPE ORACLE_LOADER без всяких использований xml-типов - весь файл загрузился за секунды.
...
Рейтинг: 0 / 0
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088275
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, файл-то нерегулярной структуры.
Вот:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="utf-8"?>
<ITEMS>
	<ITEM ID="1" OBJECTID="99989438" CHANGEID="168496029" OKTMO="79622420101" PREVID="0" NEXTID="0" UPDATEDATE="2021-01-19" STARTDATE="2021-01-19" ENDDATE="2079-06-06" ISACTIVE="1"/>
	<ITEM ID="110245790" OBJECTID="99991888" PARENTOBJID="4342" CHANGEID="168502282" OKTMO="79630415106" PREVID="0" NEXTID="0" UPDATEDATE="2021-01-19" STARTDATE="2021-01-19" ENDDATE="2079-06-06" ISACTIVE="1"/>
	<ITEM ID="110247041" OBJECTID="99993135" PARENTOBJID="2399" CHANGEID="168504376" OKTMO="79622434101" PREVID="0" NEXTID="0" UPDATEDATE="2021-01-19" STARTDATE="2021-01-19" ENDDATE="2079-06-06" ISACTIVE="1"/>
	<ITEM ID="110340547" OBJECTID="100028144" PARENTOBJID="3509" CHANGEID="168995467" OKTMO="79622420101" PREVID="0" NEXTID="0" UPDATEDATE="2021-01-22" STARTDATE="2021-01-22" ENDDATE="2079-06-06" ISACTIVE="1"/>
<ITEMS>



Для ID=1 отсутствует атрибут PARENTOBJID.
Если ли в sqlloader возможность парсить файлы такой структуры, когда одного поля нет?
...
Рейтинг: 0 / 0
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088278
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таки удалось с вот таким описанием структуры:
Код: plsql
1.
2.
3.
4.
5.
          (
           ID          char enclosed by 'ID="'            and '"'
          ,OBJECTID    char enclosed by 'OBJECTID="'      and '"'
          ,PARENTOBJID char TERMINATED BY 'C' optionally enclosed by 'PARENTOBJID="'   and '"'
          ,CHANGEID    char enclosed by 'HANGEID="'      and '"'
...
Рейтинг: 0 / 0
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088285
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shredder2003
Однако, файл-то нерегулярной структуры.
..
Для ID=1 отсутствует атрибут PARENTOBJID.
Если ли в sqlloader возможность парсить файлы такой структуры, когда одного поля нет?

у древовидной структуры записей, как правило, есть корень (/корни)
запись ID=1 на роль корня , имхо, годится вероятнее прочих
отсутствует атрибут - примите, что он is null

ps. мне тема глубоко безразлична. просто мысли вслух..
...
Рейтинг: 0 / 0
ГАР государственный адресный реестр (xml) - медленно загружается
    #40088288
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish

отсутствует атрибут - примите, что он is null


пока не извратился как в предыдущем посте, не хотело оно считать, что null. reject-илась запись.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ГАР государственный адресный реестр (xml) - медленно загружается
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]