Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка XML с передачей других данных  [new]
Максим_78
Member

Откуда:
Сообщений: 28
Добрый день!
Имею таблицу с несколькими полями, одно из них содержит XML данные.
Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?
Небольшой нюанс, обработка XML данных порождает несколько новых полей.

Для наглядности пример.
Таблица "MyTable", помимо поля "XML_COLUMN" содержит ещё несколько данных (к примеру: ListID, ItemID) которые нужно также передать в таблицу "@MatrixCondition".

DECLARE @idoc int
DECLARE @Cond nvarchar(max)
SET @Cond =	(
			select	XML_COLUMN
			from	MyTable
			)
--
EXEC sp_xml_preparedocument @idoc OUTPUT, @Cond

DECLARE
	@MatrixCondition TABLE(							
						IDCounter		char(2),
						ID			char(2),
						OrderNumber	char(2),	
						agrPerson		char(20)										
						)
INSERT INTO @MatrixCondition	(
						IDCounter,
						ID,
						OrderNumber,
						agrPerson
						)
SELECT	*
FROM OPENXML (@idoc, '/Rows/Row', 2) WITH
		(
		IDCounter		char(2)			'../@IDCounter',
		ID				char(2)			'@ID',
		OrderNumber		char(2)			'@OrderNumber',
		agrPerson		char(20)		'Cell[@ColumnName = "agrPerson"]/@Value'
		)

-- Очистка
EXEC sp_xml_removedocument @idoc

select	*
from	@MatrixCondition
24 янв 19, 13:03    [21793248]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Максим_78
Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

Взять ETL инструмент, на каждую строку поставить уникальный id, сделать split, часть столбцов таблицы пустить по одному пути, столбец с XML пустить по другому пути, снова сделать split на 4-8 потоков, в них обрабатывать XML в паралелль (id делить на 4 и по условию отправлять в тот или другой поток), далее сделать слияние в таблицу и записать в режиме fast load. Это же очевидно.
24 янв 19, 13:12    [21793268]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
aleks222
Member

Откуда:
Сообщений: 847
Ну что, завязывайте с sp_xml_preparedocument и осваивайте xml.query...
24 янв 19, 13:13    [21793271]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Максим_78
По раздельности проблем нет, а как выполнить эти процессы параллельно?
Небольшой нюанс, обработка XML данных порождает несколько новых полей.

Если нужно внутри MSSQL - берете в руки Visual Studio, пишете на C# обработку с явным разделением XML по потокам, создаете CLR сборку, регистрируете в сервере, вызываете с передачей данных. Тоже достаточно просто.
24 янв 19, 13:15    [21793272]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
aleks222
Member

Откуда:
Сообщений: 847
Andy_OLAP
Максим_78
Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

Взять ETL инструмент, на каждую строку поставить уникальный id, сделать split, часть столбцов таблицы пустить по одному пути, столбец с XML пустить по другому пути, снова сделать split на 4-8 потоков, в них обрабатывать XML в паралелль (id делить на 4 и по условию отправлять в тот или другой поток), далее сделать слияние в таблицу и записать в режиме fast load. Это же очевидно.


охренеть!
24 янв 19, 13:15    [21793273]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
aleks222
Andy_OLAP
пропущено...

Взять ETL инструмент, на каждую строку поставить уникальный id, сделать split, часть столбцов таблицы пустить по одному пути, столбец с XML пустить по другому пути, снова сделать split на 4-8 потоков, в них обрабатывать XML в паралелль (id делить на 4 и по условию отправлять в тот или другой поток), далее сделать слияние в таблицу и записать в режиме fast load. Это же очевидно.


охренеть!

Вы предлагаете коллеге сложный путь. query - это нужно документацию читать. А если в штате фирмы есть свой ETL / C# мастер, не проще ли автору темы спихнуть на него раздельную обработку XML. И поставленная задача будет решена. Понимаете? Поставленная задача.
24 янв 19, 13:17    [21793277]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Максим_78,

https://docs.microsoft.com/ru-ru/sql/t-sql/xml/nodes-method-xml-data-type?view=sql-server-2017
24 янв 19, 13:33    [21793299]     Ответить | Цитировать Сообщить модератору
 Re: Обработка XML с передачей других данных  [new]
Максим_78
Member

Откуда:
Сообщений: 28
Andy_OLAP
Максим_78
Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

Взять ETL инструмент, на каждую строку поставить уникальный id, сделать split, часть столбцов таблицы пустить по одному пути, столбец с XML пустить по другому пути, снова сделать split на 4-8 потоков, в них обрабатывать XML в паралелль (id делить на 4 и по условию отправлять в тот или другой поток), далее сделать слияние в таблицу и записать в режиме fast load. Это же очевидно.


Ээээ... Верю, что должно быть очевидно, но...
Надо переварить предложенный метод.
Спасибо!
24 янв 19, 14:40    [21793393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить