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

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

Не сталкивался ли кто-нибудь с загрузкой БД ФИАС (новый классификатор адресов) в БД
Так как объемы 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

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

	<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

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

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

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

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

Откуда: Киров, Россия
Сообщений: 940
Да, уже натолкнулся на тип поля 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

Откуда: Киров, Россия
Сообщений: 940
Затыкаешь в одном месте, начинает падать в другом :)
Приложил фикс 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

Откуда: Киров, Россия
Сообщений: 940
Огромное спасибо, уже попробовал, работает великолепно :)
Даже не буду заморачиваться дельтами, проще раз в месяц обновить БД.
У 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

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

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

Откуда: Киров, Россия
Сообщений: 940
В понедельник узнаю :)
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

Откуда: Киров, Россия
Сообщений: 940
Есть уже Крым в фиас, быстро однако
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

Откуда: Киров, Россия
Сообщений: 940
да ладно, вы наверное забыли учесть поля 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

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

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

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

Откуда:
Сообщений: 6260
Мы DBF загружаем, полет нормальный.
23 июл 14, 16:54    [16347965]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить