Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ГАР государственный адресный реестр (xml) - медленно загружается / 6 сообщений из 6, страница 1 из 1
03.08.2021, 10:28
    #40088120
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ГАР государственный адресный реестр (xml) - медленно загружается
Имеется ГАР в 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
03.08.2021, 14:35
    #40088238
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ГАР государственный адресный реестр (xml) - медленно загружается
переделал на загрузку как table ORGANIZATION EXTERNAL TYPE ORACLE_LOADER без всяких использований xml-типов - весь файл загрузился за секунды.
...
Рейтинг: 0 / 0
03.08.2021, 16:06
    #40088275
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ГАР государственный адресный реестр (xml) - медленно загружается
Однако, файл-то нерегулярной структуры.
Вот:
Код: 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
03.08.2021, 16:15
    #40088278
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ГАР государственный адресный реестр (xml) - медленно загружается
таки удалось с вот таким описанием структуры:
Код: 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
03.08.2021, 16:30
    #40088285
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ГАР государственный адресный реестр (xml) - медленно загружается
Shredder2003
Однако, файл-то нерегулярной структуры.
..
Для ID=1 отсутствует атрибут PARENTOBJID.
Если ли в sqlloader возможность парсить файлы такой структуры, когда одного поля нет?

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

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

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


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


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