Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обработка XML с передачей других данных / 8 сообщений из 8, страница 1 из 1
24.01.2019, 13:03
    #39764226
Максим_78
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Добрый день!
Имею таблицу с несколькими полями, одно из них содержит XML данные.
Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?
Небольшой нюанс, обработка XML данных порождает несколько новых полей.

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

Код: 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.
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
...
Рейтинг: 0 / 0
24.01.2019, 13:12
    #39764240
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Максим_78Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

Взять ETL инструмент, на каждую строку поставить уникальный id, сделать split, часть столбцов таблицы пустить по одному пути, столбец с XML пустить по другому пути, снова сделать split на 4-8 потоков, в них обрабатывать XML в паралелль (id делить на 4 и по условию отправлять в тот или другой поток), далее сделать слияние в таблицу и записать в режиме fast load. Это же очевидно.
...
Рейтинг: 0 / 0
24.01.2019, 13:13
    #39764242
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Ну что, завязывайте с sp_xml_preparedocument и осваивайте xml.query...
...
Рейтинг: 0 / 0
24.01.2019, 13:15
    #39764243
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Максим_78По раздельности проблем нет, а как выполнить эти процессы параллельно?
Небольшой нюанс, обработка XML данных порождает несколько новых полей.

Если нужно внутри MSSQL - берете в руки Visual Studio, пишете на C# обработку с явным разделением XML по потокам, создаете CLR сборку, регистрируете в сервере, вызываете с передачей данных. Тоже достаточно просто.
...
Рейтинг: 0 / 0
24.01.2019, 13:15
    #39764244
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Andy_OLAPМаксим_78Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

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

охренеть!
...
Рейтинг: 0 / 0
24.01.2019, 13:17
    #39764248
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
aleks222Andy_OLAPпропущено...

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

охренеть!
Вы предлагаете коллеге сложный путь. query - это нужно документацию читать. А если в штате фирмы есть свой ETL / C# мастер, не проще ли автору темы спихнуть на него раздельную обработку XML. И поставленная задача будет решена. Понимаете? Поставленная задача.
...
Рейтинг: 0 / 0
24.01.2019, 13:33
    #39764263
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
...
Рейтинг: 0 / 0
24.01.2019, 14:40
    #39764339
Максим_78
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка XML с передачей других данных
Andy_OLAPМаксим_78Необходимо сформировать новую таблицу, XML строку обработать, а другие параметры просто передать как есть.
По раздельности проблем нет, а как выполнить эти процессы параллельно?

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

Ээээ... Верю, что должно быть очевидно, но...
Надо переварить предложенный метод.
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обработка XML с передачей других данных / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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