powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загрузка ФИАС через spXmlBulkLoad
73 сообщений из 73, показаны все 3 страниц
Загрузка ФИАС через spXmlBulkLoad
    #38643392
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Не сталкивался ли кто-нибудь с загрузкой БД ФИАС (новый классификатор адресов) в БД
Так как объемы XML файлов значительные то решил сделать через хранимку spXmlBulkLoad

Хранимку создал, XML библиотеку на сервере обновил до последней версии, ну и для проверки кинул один файлик и схему.
Вот содержимое файла
Код: xml
1.
<?xml version="1.0" encoding="utf-8"?><ActualStatuses><ActualStatus ACTSTATID="0" NAME="Не актуальный" /><ActualStatus ACTSTATID="1" NAME="Актуальный" /></ActualStatuses>



Вот файл схемы (взял с сайта ФИАС)
Код: xml
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:usch="http://www.unisoftware.ru/schematron-extensions" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="ActualStatuses">
		<xs:annotation>
			<xs:documentation>Состав и структура файла с информацией по статусу актуальности в БД ФИАС</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ActualStatus" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Статус актуальности ФИАС</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="ACTSTATID" use="required">
							<xs:annotation>
								<xs:documentation>Идентификатор статуса (ключ)</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="NAME" use="required">
							<xs:annotation>
								<xs:documentation>Наименование
0 – Не актуальный
1 – Актуальный (последняя запись по адресному объекту)
</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="1"/>
									<xs:maxLength value="100"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>



Запускаю
Код: sql
1.
EXEC spXmlBulkLoad 'c:\31\xml\test.xml', 'c:\31\xsd\test.xsd', 'fias'


И получаю ошибку, явно видно что проблема в схеме, но куда порыть уму не приложу, писать схему с нуля, как-то не хочется, может кто-то уже сталкивался с подобной проблемой?

Код: sql
1.
2.
Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 47
Ошибка при выполнении метода "Execute" в "c:\31\XMLBulkError.xml": Schema: relationship expected on 'ActualStatus'. 
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643455
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

Попробуй так:
Код: xml
1.
2.
3.
4.
	
...
	<xs:element name="ActualStatuses" sql:is-constant="1">
		...
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643464
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так уже пробовал, полдня промучился сам и только после этого в форум пошел, гугль у меня не забанен :)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
	<xs:element name="ActualStatuses" sql:is-constant="1">
		<xs:annotation>
			<xs:documentation>Состав и структура файла с информацией по статусу актуальности в БД ФИАС</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="ActualStatus" maxOccurs="unbounded">



Хотя текст ошибки и меняется понять проблему с схемой я так и не смог.

Код: plsql
1.
2.
Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 47
Ошибка при выполнении метода "Execute" в "c:\31\XMLBulkError.xml": Invalid object name 'ActualStatus'. 
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643502
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Invalid object name 'ActualStatus' - похоже что не создает таблицу...

У меня такая xsd (с sql:is-constant="1") работает, но я гружу через vbs скрипт:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim objBL 
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=ololo;database=fias;integrated security=SSPI"
objBL.ErrorLogFile = "c:\fias\error.log"

objBL.SchemaGen = True
objBL.SGDropTables = True

objBL.Execute "c:\fias\ACTSTAT.xsd", "c:\fias\AS_ACTSTAT.XML"
....

Set objBL = Nothing
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643512
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал как у вас

Код: plsql
1.
2.
SchemaGen = True
SGDropTables = True



В результате создалась таблица ActualStatus в которую и занеслись записи, проблема в том что таблица как я понимаю должна называться ActualStatuses :(
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643518
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с чего бы это?
Код: xml
1.
<xs:element name="ActualStatus" maxOccurs="unbounded">



Если надо изменить:
Код: xml
1.
<xs:element name="ActualStatus" maxOccurs="unbounded" sql:relation="Название таблицы">
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643530
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто там если нормально не именовать зоопарк пойдет, например AddressObjects станут Object что согласитесь некрасиво, но так как Вы сразу сказали что сделать чтобы переименовать таблицу то вопрос решен, огромное спасибо :)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643537
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Незачто, рад что помогло :)
Проверяйте остальные схемы - там помнится тоже засады были...
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643539
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, уже натолкнулся на тип поля data в файле AS_ADDROBJ

Не жуется описание вот этого поля в схеме

Код: plsql
1.
2.
3.
4.
5.
6.
						
<xs:attribute name="UPDATEDATE" type="xs:date" use="required">
	<xs:annotation>
	<xs:documentation>Дата  внесения записи</xs:documentation>
	</xs:annotation>
</xs:attribute>
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643544
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
date -> dateTime
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643562
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затыкаешь в одном месте, начинает падать в другом :)
Приложил фикс sql:is-constant="1", переименование таблицы и date->datetime и начало падать

Код: plsql
1.
2.
Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 49
Ошибка при выполнении метода "Execute" в "c:\31\XMLBulkError.xml": Schema: unable to load schema 'AS_ADDROBJ.xsd'. An error occurred (AS_ADDROBJ.xsd#/schema/element[1][@name = 'AddressObjects']/c 



Вобщем я что-то не особо впечатлен этими xsd схемами от ФИАСа, не будет ли слишком наглым попросить Ваши уже выправленные схемы? :)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643602
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отправил на почту из профиля
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643618
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо, уже попробовал, работает великолепно :)
Даже не буду заморачиваться дельтами, проще раз в месяц обновить БД.
У bulkload скорость отличная.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643864
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zandr,

а может тут выложишь?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643895
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

В ФИАС, кстати, Крым добавили?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38643896
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В понедельник узнаю :)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38644268
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. Raven,
Ок. В понедельник выложу.

Проверить на Крым и прочие адреса можно у ФИАСа на сайте:
http://fias.nalog.ru/Public/SearchPage.aspx?SearchState=2
(я так понимаю что у них там актуальная версия базы используется...)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38644852
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть уже Крым в фиас, быстро однако
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38645017
Zandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38645262
Всем привет!
Тоже имею вопрос по ФИАСу

Никого не смущает дублирующиеся номера домов (с разными почтовыми индексами) по запросу:
Московская обл, Ступино г, Андропова ул?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38645297
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ладно, вы наверное забыли учесть поля STARTDATE & ENDDATE

SELECT * FROM dbo.House WHERE AOGUID='7542779a-a6d2-4344-ba5d-b30eb76342cf'
AND GETDATE() BETWEEN STARTDATE AND ENDDATE
ORDER BY HOUSENUM
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38645864
энди,

Да походу не только я, а еще и ОНИ сами забыли. У них на сайте тоже дубликаты выходят.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38645905
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает, там тоже люди работают :)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38704130
badya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Сам сейчас столкнулся с задачей залива ФИАС в mysql, осложненной огромными объемами файлов. Подскажите, как xds помогает с этой проблемой справиться? Честно говоря не сильно большой специалист...
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38704141
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы DBF загружаем, полет нормальный.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38704485
AnyKey45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаWWWлОдАрЕц,

1 дом поделен на 2 отделения почты = разные индексы
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38706674
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Импорт фиаса через хп это эпик фэйл какой-то :)
Может кому пригодится http://codearticles.ru/articles/2403
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38706741
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что плохого в загрузке этих справочников через bulk?
Эту статья я думаю уже большинство людей кто интересовался загрузкой их в MSSQL уже давно видели.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #38901282
Einsof
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня печалька. Дельты в XML грузятся, а вот на загрузке полных XML падает на загрузке самомого большого файла HOUSE (14G!).
Использую SQLXMLBulkLoad:
Код: xml
1.
2.
<?xml version="1.0"?><Result State="FAILED"><Error><HResult>0xC00CEE26</HResult><Description><![CDATA[An attribute value must not contain '<'.
]]></Description><Source>XML SAX Parser</Source><Type>FATAL</Type></Error></Result>


То есть парсер якобы нашел незаэскейпленный '<'. Никто не сталкивался с таким ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Загрузка ФИАС через spXmlBulkLoad
    #39213182
foxwizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделитесь исправленными xsd схемами ФИАС, пожалуйста.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39228933
Сова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дико извиняюсь, но не поделится ли кто-нибудь исправленными xsd-схемами?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Загрузка ФИАС через spXmlBulkLoad
    #39546307
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, концепцию загрузки базы ФИАС в формате XML.

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

XMLBulkLoad загружает данные используя только вставку (поправьте, если не прав) и каждый раз очищать у себя базу FIAS только для загрузки целиком довольно накладно. Кто-то реализовывал слияние данных с использованием XMLBulkLoad (может триггерами на таблицы или как-то еще)? Интересно ваше мнение, как в данном случае можно было бы решить задачу дозаливки изменений, вместо полного переноса данных.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546352
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тя есть ажно два пути

1. .IgnoreDuplicateKeys = True
2. Грузить в tempdb + merge
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546354
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) никогда, повторяю, никогда не грузите xml сразу в рабочие таблицы!
2) ну а исходя из того что у вас есть и текущие рабочие таблицы и таблицы в которых есть обновление то что мешает проапдейтить одну таблицу из другой? по диффам не подскажу, не заморачивался, у меня не та нагрузка на БД была чтобы заморачиватся, ночью просто пускался джоб который обновлял рабочие таблицы
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546572
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за предложения, конечно речи о том, чтобы грузить в рабочие таблицы и не шло.

Удалось смоделировать такое решение:

XMLBulkLoad загружает данные в таблицы-пустышки, на которых имеются Instead Of Insert-триггеры. Данные в этих таблицах не хранятся, а триггеры осуществляют MERGE в таблицы данных. При этом у экземпляра класса SQLXMLBulkLoad нужно включить работу триггеров при вставке (FireTriggers = True).
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546577
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вариант: таблицы-пустышки можно заменить представлениями с теми же триггерами, но тогда у импортера нужно отключить генерацию таблиц (SchemaGen = False), иначе он будет пытаться создать таблицы, одноименные с этими представлениями.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546591
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну, триггеры вообще не особо люблю, чем вас не устраивает прогруз в эти таблицы пустышки, а затем просто регулярно выполняемый job который скопирует и обновит данные как надо? Посути у вас триггер будет работать построчно, но опять же зачем если можно потом просто сделать UPDATE и обработать все строки сразу.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546609
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,
Да, вполне вариант с джобом, работать должен быстрее, но и требовать в два раза больше места под временное хранилище. Правда я вот джобы не очень люблю :), ибо их на сервере накопилось очень много. Можно после загрузки данных в таблицы запускать некую процедуру слияния.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546611
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему в 2 раза? вы будете полную БД фиаса грузить или только diff-ы? Вторые явно меньше основной БД.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546623
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,

В два раза не по отношению ко всем данным, а только импортируемым... Хотя, конечно, хотелось бы не заморачиваться и сделать единый механизм как для начальной загрузки, так и для дельт. При этом полную заливку можно было бы сделать и ночью, тут скорость не критична. В будущем может понадобиться прибегнуть и к полной заливке повторно. Не очень хотелось бы делать это в полуручном режиме.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39546671
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 набора пустых таблиц для импорта.
1) создать джоб для diff, грузит данные из инета, распаковывает куда надо, загружает в пустые таблицы на сервере и обновляет данные рабочей БД
2) второй джоб аналогичен, только обновляет БД полностью.
3) настроить запуск первого типа обновления раз в 3 дня, второго скажем раз в квартал
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39547277
XMLBulkLoad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,

Все же я проверил вашу гипотезу о том, что триггер срабатывает на каждую запись - она не верная. Триггер срабатывает сразу на все записи, похоже (или на какую-то большую пачку, размер которой весьма существенный). Ну и действительно, рассуждая логически: чтобы работать построчно XMLBulkLoad пришлось бы каждую запись отправлять отдельно, что драматически сказалось бы на быстродействии.

Существенных потерь при вставке через триггер я не обнаружил - все достаточно быстро, продолжаю реализацию без промежуточных хранений.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39571985
Fabyf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу простить мою наглость, но очень очень нужны готовые, доработанные схемы XSD для ФИАС
Прошу Вашей помощи, если Вам не сложно выложите плз.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39571995
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fabyf,

Прошлогодние есть. Не знаю, насколько актуальны они сейчас.
ФИАС
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39572093
Fabyf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ptr128,
Большое Вам спасибо!!!!
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39574881
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовМы DBF загружаем, полет нормальный.
+1 Зачем с XML cсвязываться, когда DBF есть
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39575163
iii2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ptr128, спасибо!
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39575183
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю загрузка из xml на порядок быстрее загрузки dbf. Это достаточная причина?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39575189
эндизагрузка из xml на порядок быстрее загрузки dbf. И есть убедительные доказательства сего утверждения?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604012
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, подниму тему.
Подскажите, а где, собственно, взять этот пресловутый spxmlbulkload? Набираю
EXEC spXmlBulkLoad 'e:\AS_ADDROBJ.XML', 'e:\AS_ADDROBJ.xsd', 'inetbuffer',
а в ответ
"Сообщение 2812, уровень 16, состояние 62, строка 13 Не удалось найти хранимую процедуру "spXmlBulkLoad".".
Где она прячется? На форумах и в статьях как-то все пространно расписано, а как и где запустить не понятно, либо, наоборот, так тривиально, что просто об этом и не упоминают.
Помогите, ткните носом. Спасибо.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604040
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604075
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Жаль, но для этой процедуры нужны дополнительные разрешения на сервере. А это не в моей власти.
Попробовал сделать то же самое через VBS-скрипт:

Set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBulkLoad.ConnectionString = _
"provider=SQLOLEDB;data source=VOLODJAVM\SQLEXPRESS;database=inetbuffer;" & _
"Integrated Security=SSPI;"
objBulkLoad.XMLFragment = True
objBulkLoad.ErrorLogFile = "E:\xmlerror.log"
objBulkLoad.Execute "e:\AS_ADDROBJ.xsd","e:\AS_ADDROBJ.xml"
Set objBulkLoad = Nothing
MsgBox "The SQLXMLBulkLoad process completed successfully",0,"XML Bulk Load Process"

Нашел на просторах.
Но и в этом случае облом. Похоже что-то снова с xsd. Брал и те, что на сайте ФИАС, и те что здесь выложены. Везде ошибка "Недопустимое имя объекта". Имя везде разное. По последнему xsd с этой ветки форума это ADDROBJ. Что-то за это время изменилось? Может кто поделится актуальным xsd?
Спасибо
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604079
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы в базе созданы?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604081
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604084
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думал они сами создадутся. Руками эти таблицы устанешь создавать. А скриптов тоже нигде не видел.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604088
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я если честно деталей уже не помню, ушли мы от прямого использования фиас на сервис https://dadata.ru
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604089
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wovan2,

оно их и создаст если вы объекту sqlXmlBulkLoad выставите свойство SchemaGen в True, ну и если схема правильная
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604097
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,
Спасибо. Продвинулся дальше.

Ошибка, все-таки в в xsd. Теперь скрипт пишет Определение столбца UPDATEDATE должно содержать тип данных\
В xsd записано
<xs:attribute name="UPDATEDATE" type="xs:date" use="required">

Нет типа xs:date?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604101
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините. Нашел ответ в начале этой ветки форума. (перечитал внимательней)
Странно Xsd брал здесь же, вроде как правленный.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604121
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиЯ думаю загрузка из xml на порядок быстрее загрузки dbf. Это достаточная причина?

С чего бы это? Не говоря о трате оперативной памяти.
dbf имеет записи фиксированной длины, не надо парсить структуру и т.д. Вычислительные затраты намного ниже.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604161
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал чисто экспериментальным путем, штатными методами sql server. Вот через sqlbulkload скорость просто зверская, уровнь bcp. А DBF через штатного провайдера замучаешься заливать.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604295
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас залил таб. ADDROBJ. Скорость около 6000 зап./сек.
Споткнулся на заливке HOUSE после 20 мин. работы вывалилась ошибка: Значение атрибута не должно содержать знак "<".
Что это? Ошибка в данных?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604306
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы просто сделал валидацию xml файла по схеме, там сразу будет видно где и что неверно и исходном xml вплоть до строки
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604333
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,
Я тоже об этом думал. Но. Валидация файла в 22 Гб? И чем такой файл валидировать? Есть варианты.
И еще. Может у SQLXMLBulkload есть какой-то параметр для пропуска ошибочных записей?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604348
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я видел где-то код для sql Server проверки валидности xml файла по схеме, поищите, 100% было, и софтовые варианты были, но сходу в голову только xml spy приходит
а проверит вполне нормально, 20гб это еще даже не суровый объем :)
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39604377
Wovan2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
энди,
XMLSpy и XMLPad при попытке открытия файла вываливаются Out of memory :-(
Этот ФИАС задолбал своими форматами. Вроде нащупал как с ними бороться, но облом. И не понятно в чем ошибка. В их файле или что-то у меня.
Неужели при массовой загрузке нельзя как-то обрабатывать ошибки ввода?
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39637175
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

При импорте любых таблиц ФИАС'а что скриптом,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Const CONNECT_STRING = "Provider=SQLOLEDB;Data Source=PROGERR;Database=FIAS;Integrated Security=SSPI"

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")

objBL.ErrorLogFile = "C:\sample1.log"

' objBL.SchemaGen = True
' objBL.SGDropTables = True

objBL.CheckConstraints = True
objBL.KeepIdentity = False

objBL.ConnectionString = CONNECT_STRING

objBL.Execute "E:\Фиас\1\AS_SOCRBASE.xsd", "E:\Фиас\1\AS_SOCRBASE.XML"
Set objBL = Nothing


что с помощью процедуры spXMLBulkLoad
Код: sql
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
ALTER PROCEDURE [dbo].[spXMLBulkLoad] (
	 @@File		SysName
	,@@Schema	SysName
	,@@DataBase	SysName	--= '<DefaultDataBase>'
) AS BEGIN 

DECLARE	 @ErrCode	Int
	,@OLEXMLBulk	Int
	,@ErrMethod	SysName
	,@ErrSource	SysName
	,@ErrDescript	NVarChar(4000)
	
	SET @ErrSource = 'C:\XMLBulkError.xml'	--  файл ошибки (OPENROWSET требует константу)
	EXEC @ErrCode = sys.sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkload' ,@OLEXMLBulk OUT
	IF (@ErrCode = 0) BEGIN
		SET	@@DataBase	= 'Provider=SQLOLEDB;Data Source=.;DataBase=' + @@DataBase + ';Integrated Security=SSPI'
		EXEC @ErrCode = sys.sp_OASetProperty	@OLEXMLBulk ,'ConnectionString'	,@@DataBase		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ConnectionString'	GOTO Error END
		EXEC @ErrCode = sys.sp_OASetProperty	@OLEXMLBulk ,'ErrorLogFile'	,@ErrSource		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ErrorLogFile'	GOTO Error END
		EXEC @ErrCode = sys.sp_OASetProperty	@OLEXMLBulk ,'CheckConstraints'	,1			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'CheckConstraints'	GOTO Error END
		
		EXEC @ErrCode = sys.sp_OAMethod		@OLEXMLBulk ,'Execute', NULL	,@@Schema, @@File
		IF (@ErrCode != 0) BEGIN
			SET @ErrMethod = 'Execute'
			DECLARE	 @Exist	Int
				,@Error	XML
			EXEC	master.dbo.xp_FileExist	@ErrSource, @Exist OUT
			IF (@Exist = 1) BEGIN
				SELECT	 @Error		= E.Error
							-- Обход глюка
							+ CASE	WHEN Right(E.Error,1) != '>'	THEN 'lt>'
								ELSE ''				END
				FROM	OPENROWSET(BULK 'C:\XMLBulkError.xml',SINGLE_NCLOB)E(Error) -- Из @ErrSource файла
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Result/Error')E(Error)
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Error/Record')E(Error)
			END ELSE
				GOTO Error
		END
		GOTO Destroy
	Error:	EXEC @ErrCode = sys.sp_OAGetErrorInfo	@OLEXMLBulk ,@ErrSource OUT ,@ErrDescript OUT
	Destroy:EXEC @ErrCode = sys.sp_OADestroy	@OLEXMLBulk
	END ELSE
		SELECT	 @ErrMethod	= 'SQLXMLBulkLoad.SQLXMLBulkload'
			,@ErrSource	= 'sp_OACreate'
			,@ErrDescript	= 'Ошибка создания OLE объекта'
	-- Вывод ошибок
	IF (@ErrMethod IS NOT NULL) BEGIN
		RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescript)
		RETURN	@@Error
	END
END


получаю ошибку.

Например, при импорте простейшей AS_SOCRBASE, получаю такое.
Schema: relationship expected on 'AddressObjectType'.

Таблица создана
XSD и XML брал с сайта фиаса

Хелп, господа, помогите пройти затык?

SELECT @@version
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64) Mar 19 2015 12:32:14 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
SQLXML 4.0 SP1
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39637238
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял все дело в кривоватых xsd схемах с сайта ФИАСа.

Господа, поделитесь, пожалуйста, правлеными схемами.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39637252
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на предыдушей странице посмотри, вроде выкладывали
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39637599
NVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди, спасибо, видел. К сожалению они не работали... пока я не допер и не сменил date->dateTime.
Да и не все схемы там.
Несколько (2-3) пришлось с ФИАСа брать и переделывать под SQL по аналогии.
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #39758463
DenisConqueror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NVT,
А не поделитесь схемами для загрузки?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Загрузка ФИАС через spXmlBulkLoad
    #40028363
DimaMorozov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Схемы пожалуйста
...
Рейтинг: 0 / 0
Загрузка ФИАС через spXmlBulkLoad
    #40028586
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
73 сообщений из 73, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загрузка ФИАС через spXmlBulkLoad
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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