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

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

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

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

Откуда: Moscow
Сообщений: 977
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

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


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

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

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

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

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

Откуда: Киров, Россия
Сообщений: 943
на предыдушей странице посмотри, вроде выкладывали
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]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Microsoft SQL Server Ответить