Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Добрый день

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

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


Вот файл схемы (взял с сайта ФИАС)
<?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>


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

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

Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 47
Ошибка при выполнении метода "Execute" в "c:\31\XMLBulkError.xml": Schema: relationship expected on 'ActualStatus'. 
16 май 14, 13:25    [16027065]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
энди,

Попробуй так:
	
...
	<xs:element name="ActualStatuses" sql:is-constant="1">
		...
16 май 14, 13:57    [16027367]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Я так уже пробовал, полдня промучился сам и только после этого в форум пошел, гугль у меня не забанен :)

	<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">


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

Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 47
Ошибка при выполнении метода "Execute" в "c:\31\XMLBulkError.xml": Invalid object name 'ActualStatus'. 
16 май 14, 14:05    [16027432]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
Invalid object name 'ActualStatus' - похоже что не создает таблицу...

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

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
16 май 14, 14:24    [16027585]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Сделал как у вас

SchemaGen = True
SGDropTables = True


В результате создалась таблица ActualStatus в которую и занеслись записи, проблема в том что таблица как я понимаю должна называться ActualStatuses :(
16 май 14, 14:32    [16027626]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
с чего бы это?
<xs:element name="ActualStatus" maxOccurs="unbounded">


Если надо изменить:
<xs:element name="ActualStatus" maxOccurs="unbounded" sql:relation="Название таблицы">
16 май 14, 14:36    [16027637]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Просто там если нормально не именовать зоопарк пойдет, например AddressObjects станут Object что согласитесь некрасиво, но так как Вы сразу сказали что сделать чтобы переименовать таблицу то вопрос решен, огромное спасибо :)
16 май 14, 14:46    [16027685]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
Незачто, рад что помогло :)
Проверяйте остальные схемы - там помнится тоже засады были...
16 май 14, 14:49    [16027702]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Да, уже натолкнулся на тип поля data в файле AS_ADDROBJ

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

						
<xs:attribute name="UPDATEDATE" type="xs:date" use="required">
	<xs:annotation>
	<xs:documentation>Дата  внесения записи</xs:documentation>
	</xs:annotation>
</xs:attribute>
16 май 14, 14:51    [16027713]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
date -> dateTime
16 май 14, 14:55    [16027735]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Затыкаешь в одном месте, начинает падать в другом :)
Приложил фикс sql:is-constant="1", переименование таблицы и date->datetime и начало падать

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 схемами от ФИАСа, не будет ли слишком наглым попросить Ваши уже выправленные схемы? :)
16 май 14, 15:05    [16027812]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
отправил на почту из профиля
16 май 14, 15:25    [16027987]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Огромное спасибо, уже попробовал, работает великолепно :)
Даже не буду заморачиваться дельтами, проще раз в месяц обновить БД.
У bulkload скорость отличная.
16 май 14, 15:33    [16028062]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Infernal V. Raven
Member

Откуда: St.Petersburg
Сообщений: 1710
Zandr,

а может тут выложишь?
16 май 14, 18:41    [16029037]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4039
энди,

В ФИАС, кстати, Крым добавили?
16 май 14, 19:27    [16029200]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
В понедельник узнаю :)
16 май 14, 19:39    [16029231]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
Infernal V. Raven,
Ок. В понедельник выложу.

Проверить на Крым и прочие адреса можно у ФИАСа на сайте:
http://fias.nalog.ru/Public/SearchPage.aspx?SearchState=2
(я так понимаю что у них там актуальная версия базы используется...)
17 май 14, 21:45    [16031674]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Есть уже Крым в фиас, быстро однако
19 май 14, 09:48    [16035002]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Zandr
Member

Откуда: Москва
Сообщений: 582
Как обещал:
Схемы ФИАС для MSSQL (bulk load)
19 май 14, 12:12    [16035680]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
ПаWWWлОдАрЕц
Member

Откуда: NSK-PVL
Сообщений: 135
Всем привет!
Тоже имею вопрос по ФИАСу

Никого не смущает дублирующиеся номера домов (с разными почтовыми индексами) по запросу:
Московская обл, Ступино г, Андропова ул?
19 май 14, 14:59    [16037087]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
да ладно, вы наверное забыли учесть поля STARTDATE & ENDDATE

SELECT * FROM dbo.House WHERE AOGUID='7542779a-a6d2-4344-ba5d-b30eb76342cf'
AND GETDATE() BETWEEN STARTDATE AND ENDDATE
ORDER BY HOUSENUM
19 май 14, 15:19    [16037241]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
ПаWWWлОдАрЕц
Member

Откуда: NSK-PVL
Сообщений: 135
энди,

Да походу не только я, а еще и ОНИ сами забыли. У них на сайте тоже дубликаты выходят.

К сообщению приложен файл. Размер - 61Kb
20 май 14, 07:23    [16040429]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Бывает, там тоже люди работают :)
20 май 14, 09:16    [16040630]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
badya
Member

Откуда:
Сообщений: 1
Добрый день.

Сам сейчас столкнулся с задачей залива ФИАС в mysql, осложненной огромными объемами файлов. Подскажите, как xds помогает с этой проблемой справиться? Честно говоря не сильно большой специалист...
23 июл 14, 16:46    [16347911]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6076
Мы DBF загружаем, полет нормальный.
23 июл 14, 16:54    [16347965]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow
Сообщений: 217
ПаWWWлОдАрЕц,

1 дом поделен на 2 отделения почты = разные индексы
24 июл 14, 08:44    [16349755]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Импорт фиаса через хп это эпик фэйл какой-то :)
Может кому пригодится http://codearticles.ru/articles/2403
26 июл 14, 23:48    [16362075]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
А что плохого в загрузке этих справочников через bulk?
Эту статья я думаю уже большинство людей кто интересовался загрузкой их в MSSQL уже давно видели.
27 июл 14, 13:35    [16362657]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Einsof
Member

Откуда:
Сообщений: 11
А у меня печалька. Дельты в XML грузятся, а вот на загрузке полных XML падает на загрузке самомого большого файла HOUSE (14G!).
Использую SQLXMLBulkLoad:
<?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>

То есть парсер якобы нашел незаэскейпленный '<'. Никто не сталкивался с таким ?
11 мар 15, 13:47    [17369819]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
foxwizard
Member

Откуда:
Сообщений: 302
Поделитесь исправленными xsd схемами ФИАС, пожалуйста.
12 апр 16, 08:25    [19045342]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Сова
Member

Откуда:
Сообщений: 24
Дико извиняюсь, но не поделится ли кто-нибудь исправленными xsd-схемами?
4 май 16, 11:35    [19132626]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
Подскажите, пожалуйста, концепцию загрузки базы ФИАС в формате XML.

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

XMLBulkLoad загружает данные используя только вставку (поправьте, если не прав) и каждый раз очищать у себя базу FIAS только для загрузки целиком довольно накладно. Кто-то реализовывал слияние данных с использованием XMLBulkLoad (может триггерами на таблицы или как-то еще)? Интересно ваше мнение, как в данном случае можно было бы решить задачу дозаливки изменений, вместо полного переноса данных.
1 ноя 17, 18:05    [20919877]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
aleks222
Guest
У тя есть ажно два пути

1. .IgnoreDuplicateKeys = True
2. Грузить в tempdb + merge
1 ноя 17, 19:12    [20920014]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
1) никогда, повторяю, никогда не грузите xml сразу в рабочие таблицы!
2) ну а исходя из того что у вас есть и текущие рабочие таблицы и таблицы в которых есть обновление то что мешает проапдейтить одну таблицу из другой? по диффам не подскажу, не заморачивался, у меня не та нагрузка на БД была чтобы заморачиватся, ночью просто пускался джоб который обновлял рабочие таблицы
1 ноя 17, 19:15    [20920021]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
Спасибо за предложения, конечно речи о том, чтобы грузить в рабочие таблицы и не шло.

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

XMLBulkLoad загружает данные в таблицы-пустышки, на которых имеются Instead Of Insert-триггеры. Данные в этих таблицах не хранятся, а триггеры осуществляют MERGE в таблицы данных. При этом у экземпляра класса SQLXMLBulkLoad нужно включить работу триггеров при вставке (FireTriggers = True).
2 ноя 17, 11:08    [20921308]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
Еще вариант: таблицы-пустышки можно заменить представлениями с теми же триггерами, но тогда у импортера нужно отключить генерацию таблиц (SchemaGen = False), иначе он будет пытаться создать таблицы, одноименные с этими представлениями.
2 ноя 17, 11:17    [20921347]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Да ну, триггеры вообще не особо люблю, чем вас не устраивает прогруз в эти таблицы пустышки, а затем просто регулярно выполняемый job который скопирует и обновит данные как надо? Посути у вас триггер будет работать построчно, но опять же зачем если можно потом просто сделать UPDATE и обработать все строки сразу.
2 ноя 17, 11:35    [20921411]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
энди,
Да, вполне вариант с джобом, работать должен быстрее, но и требовать в два раза больше места под временное хранилище. Правда я вот джобы не очень люблю :), ибо их на сервере накопилось очень много. Можно после загрузки данных в таблицы запускать некую процедуру слияния.
2 ноя 17, 11:50    [20921466]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
почему в 2 раза? вы будете полную БД фиаса грузить или только diff-ы? Вторые явно меньше основной БД.
2 ноя 17, 11:54    [20921484]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
энди,

В два раза не по отношению ко всем данным, а только импортируемым... Хотя, конечно, хотелось бы не заморачиваться и сделать единый механизм как для начальной загрузки, так и для дельт. При этом полную заливку можно было бы сделать и ночью, тут скорость не критична. В будущем может понадобиться прибегнуть и к полной заливке повторно. Не очень хотелось бы делать это в полуручном режиме.
2 ноя 17, 12:04    [20921533]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
2 набора пустых таблиц для импорта.
1) создать джоб для diff, грузит данные из инета, распаковывает куда надо, загружает в пустые таблицы на сервере и обновляет данные рабочей БД
2) второй джоб аналогичен, только обновляет БД полностью.
3) настроить запуск первого типа обновления раз в 3 дня, второго скажем раз в квартал
2 ноя 17, 12:55    [20921696]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
XMLBulkLoad
Guest
энди,

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

Существенных потерь при вставке через триггер я не обнаружил - все достаточно быстро, продолжаю реализацию без промежуточных хранений.
3 ноя 17, 11:49    [20924289]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Fabyf
Member

Откуда:
Сообщений: 8
Прошу простить мою наглость, но очень очень нужны готовые, доработанные схемы XSD для ФИАС
Прошу Вашей помощи, если Вам не сложно выложите плз.
19 дек 17, 13:54    [21045477]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 393
Fabyf,

Прошлогодние есть. Не знаю, насколько актуальны они сейчас.
ФИАС
19 дек 17, 14:03    [21045537]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Fabyf
Member

Откуда:
Сообщений: 8
ptr128,
Большое Вам спасибо!!!!
19 дек 17, 15:36    [21045976]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
KRS544
Member

Откуда:
Сообщений: 481
Владислав Колосов
Мы DBF загружаем, полет нормальный.

+1 Зачем с XML cсвязываться, когда DBF есть
23 дек 17, 22:30    [21057740]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
iii2
Member

Откуда:
Сообщений: 202
ptr128, спасибо!
25 дек 17, 08:21    [21059264]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Я думаю загрузка из xml на порядок быстрее загрузки dbf. Это достаточная причина?
25 дек 17, 09:22    [21059348]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
правильный проходящий.
Guest
энди
загрузка из xml на порядок быстрее загрузки dbf.
И есть убедительные доказательства сего утверждения?
25 дек 17, 09:30    [21059359]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Извините, подниму тему.
Подскажите, а где, собственно, взять этот пресловутый spxmlbulkload? Набираю
EXEC spXmlBulkLoad 'e:\AS_ADDROBJ.XML', 'e:\AS_ADDROBJ.xsd', 'inetbuffer',
а в ответ
"Сообщение 2812, уровень 16, состояние 62, строка 13 Не удалось найти хранимую процедуру "spXmlBulkLoad".".
Где она прячется? На форумах и в статьях как-то все пространно расписано, а как и где запустить не понятно, либо, наоборот, так тривиально, что просто об этом и не упоминают.
Помогите, ткните носом. Спасибо.
19 фев 18, 10:52    [21201090]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
https://www.sql.ru/forum/720892/optimalnost-metodov-zagruzki-xml-v-mssql?mid=8075805#8075805
19 фев 18, 11:32    [21201271]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите структуру для реализации системы учета Рекламных акций  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Спасибо.
Жаль, но для этой процедуры нужны дополнительные разрешения на сервере. А это не в моей власти.
Попробовал сделать то же самое через 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?
Спасибо
19 фев 18, 12:22    [21201437]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Таблицы в базе созданы?
19 фев 18, 12:24    [21201448]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Нет.
19 фев 18, 12:25    [21201452]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Я думал они сами создадутся. Руками эти таблицы устанешь создавать. А скриптов тоже нигде не видел.
19 фев 18, 12:27    [21201462]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Я если честно деталей уже не помню, ушли мы от прямого использования фиас на сервис https://dadata.ru
19 фев 18, 12:30    [21201477]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 908
Wovan2,

оно их и создаст если вы объекту sqlXmlBulkLoad выставите свойство SchemaGen в True, ну и если схема правильная
19 фев 18, 12:30    [21201481]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
felix_ff,
Спасибо. Продвинулся дальше.

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

Нет типа xs:date?
19 фев 18, 12:39    [21201519]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Извините. Нашел ответ в начале этой ветки форума. (перечитал внимательней)
Странно Xsd брал здесь же, вроде как правленный.
19 фев 18, 12:47    [21201544]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6076
энди
Я думаю загрузка из xml на порядок быстрее загрузки dbf. Это достаточная причина?


С чего бы это? Не говоря о трате оперативной памяти.
dbf имеет записи фиксированной длины, не надо парсить структуру и т.д. Вычислительные затраты намного ниже.
19 фев 18, 13:08    [21201620]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
Пробовал чисто экспериментальным путем, штатными методами sql server. Вот через sqlbulkload скорость просто зверская, уровнь bcp. А DBF через штатного провайдера замучаешься заливать.
19 фев 18, 13:52    [21201825]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите структуру для реализации системы учета Рекламных акций  [new]
Wovan2
Member

Откуда:
Сообщений: 67
Сейчас залил таб. ADDROBJ. Скорость около 6000 зап./сек.
Споткнулся на заливке HOUSE после 20 мин. работы вывалилась ошибка: Значение атрибута не должно содержать знак "<".
Что это? Ошибка в данных?
19 фев 18, 15:28    [21202283]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
я бы просто сделал валидацию xml файла по схеме, там сразу будет видно где и что неверно и исходном xml вплоть до строки
19 фев 18, 15:37    [21202326]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
энди,
Я тоже об этом думал. Но. Валидация файла в 22 Гб? И чем такой файл валидировать? Есть варианты.
И еще. Может у SQLXMLBulkload есть какой-то параметр для пропуска ошибочных записей?
19 фев 18, 16:00    [21202415]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
я видел где-то код для sql Server проверки валидности xml файла по схеме, поищите, 100% было, и софтовые варианты были, но сходу в голову только xml spy приходит
а проверит вполне нормально, 20гб это еще даже не суровый объем :)
19 фев 18, 16:14    [21202459]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
Wovan2
Member

Откуда:
Сообщений: 67
энди,
XMLSpy и XMLPad при попытке открытия файла вываливаются Out of memory :-(
Этот ФИАС задолбал своими форматами. Вроде нащупал как с ними бороться, но облом. И не понятно в чем ошибка. В их файле или что-то у меня.
Неужели при массовой загрузке нельзя как-то обрабатывать ошибки ввода?
19 фев 18, 17:11    [21202615]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
NVT
Member

Откуда: Санкт-Петербург
Сообщений: 204
Добрый день.

При импорте любых таблиц ФИАС'а что скриптом,
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
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
27 апр 18, 10:15    [21372808]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
NVT
Member

Откуда: Санкт-Петербург
Сообщений: 204
Как я понял все дело в кривоватых xsd схемах с сайта ФИАСа.

Господа, поделитесь, пожалуйста, правлеными схемами.
27 апр 18, 11:17    [21373025]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 915
на предыдушей странице посмотри, вроде выкладывали
27 апр 18, 11:24    [21373059]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
NVT
Member

Откуда: Санкт-Петербург
Сообщений: 204
энди, спасибо, видел. К сожалению они не работали... пока я не допер и не сменил date->dateTime.
Да и не все схемы там.
Несколько (2-3) пришлось с ФИАСа брать и переделывать под SQL по аналогии.
27 апр 18, 16:34    [21374690]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка ФИАС через spXmlBulkLoad  [new]
DenisConqueror
Member

Откуда:
Сообщений: 8
NVT,
А не поделитесь схемами для загрузки?
11 янв 19, 14:36    [21782873]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Microsoft SQL Server Ответить