powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CSV в строке
19 сообщений из 19, страница 1 из 1
CSV в строке
    #40084104
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый всем день.
Есть несколько способов загрузить данные из csv файла: bulk insert, openrowset и т.д

Вопрос: может кто знает, как сделать тоже самое, но вместо файла данные находятся в строке
Т.е есть
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @s varchar(max) = '
А;Б;В
Г;Д;Е'

bulk insert table
from @s 
   WITH
      (  
         FIELDTERMINATOR =' ;'
         , ROWTERMINATOR =' \n'
      );


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
CSV в строке
    #40084123
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
CSV в строке
    #40084125
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15

(если версия подходящая)
...
Рейтинг: 0 / 0
CSV в строке
    #40084132
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15


string_split вещь хорошая, но мне надо не в одну колонку, а в разные, как это происходит при bulk insert

если бы string_split возвращало значения в том порядке, в котором они в файле, то было бы проще

на текущий момент я делаю так
сплитую строку на строки с разделителем "перевод каретки"
и потом полученные строки превращаю в xml и отбираю данные (XQuery), но, как мне кажется, слишком много лишних движений

в связи с чем и был задан вопрос
...
Рейтинг: 0 / 0
CSV в строке
    #40084147
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

20515498
...
Рейтинг: 0 / 0
CSV в строке
    #40084158
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

выбирайте подстрокой по таблице чисел 1,2,3,4,5. Но, имо, можно написать CLR разборщик.
...
Рейтинг: 0 / 0
CSV в строке
    #40084209
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
HandKot,

20515498


я как раз сперва xml в csv и загоняю, т.к он большой и бывает долго отрабатывает

Владислав Колосов
HandKot,

выбирайте подстрокой по таблице чисел 1,2,3,4,5. Но, имо, можно написать CLR разборщик.

начинаю к этому склонятся, т.к, как мне кажется, это наиболее быстрый вариант.

Но хотелось сделать что-то универсальное, а clr - это прибитое гвоздями


задача в целом следующая - обработка огромного xml, преобразовать в таблицу.
думал делать так: с помощью XSLT преобразовать в csv и потом bulk insertом загнать в таблицу

но файл создать нет возможности.

пока, как вариант, писать для каждого xml свою clr, которая будет возвращать таблицу с данными


может кто ещё, что предложит или охаит.
милости просим
...
Рейтинг: 0 / 0
CSV в строке
    #40084218
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи образец XML.
Если он - плоский наподобие
Код: xml
1.
2.
3.
4.
5.
6.
<document>
 <row>
  <field1>value1</field2>
  <field2>....
 </row>
 ...


то я такое делал. Где-то скриптики остались толи на groovy толи на java.
...
Рейтинг: 0 / 0
CSV в строке
    #40084226
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще интересный вопрос. Может ли XSLT стримить? Тоесть не создавать промежуточное XmlDocument представление
в памяти. Т.к. возможно что для толстого (несколько гигабайт) инпута эта трансформация просто упадет по памяти.
...
Рейтинг: 0 / 0
CSV в строке
    #40084232
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

задача в целом следующая - обработка огромного xml

неожиданный подход, такие задачи решаются не с помощью микроскопа SQL Server.
...
Рейтинг: 0 / 0
CSV в строке
    #40084308
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
HandKot,

задача в целом следующая - обработка огромного xml


неожиданный подход, такие задачи решаются не с помощью микроскопа SQL Server.
я знаю и предпочел бы SSIS.
Но в данном случае я ограничен только SQL


mayton
Покажи образец XML.
Если он - плоский наподобие
Код: xml
1.
2.
3.
4.
5.
6.
<document>
 <row>
  <field1>value1</field2>
  <field2>....
 </row>
 ...


то я такое делал. Где-то скриптики остались толи на groovy толи на java.

файл, можно сказать плоский с несколькими уровнями вложенности
примерно такой
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<document>
 <row>
  <field1>value1</field2>
  <field2>....
  <field3>
	<field4>
		<field5>
			...
		</field5>
	</field4>
  </field3>
  <field3>
	<field4>
		<field5>
			...
		</field5>
	</field4>
  </field3>
 </row>
 ...



на уровне <field5> несколько сотен тысяч элементов, которые мне и надо вытаскивать в таблицу, добавляя данные из уровня <field3>
...
Рейтинг: 0 / 0
CSV в строке
    #40084310
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Тогда мои скрипты не подходят.

А у тебя в результирующем CSV количество строк должно совпадать с количеством листиков в XML ?
...
Рейтинг: 0 / 0
CSV в строке
    #40084312
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И еще интересный вопрос. Может ли XSLT стримить? Тоесть не создавать промежуточное XmlDocument представление
в памяти. Т.к. возможно что для толстого (несколько гигабайт) инпута эта трансформация просто упадет по памяти.

когда я подобное делал посредством SSIS, то ко мне прибегали админы с выпученными глазами и криками, что убил всю память.
Но тогда, кроме большого XML, XLST была не простая, а с использованием словарей ключей.
Одно спасало, что данные приходили раз в час
...
Рейтинг: 0 / 0
CSV в строке
    #40084317
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

CLR + XML Bulk Load?
...
Рейтинг: 0 / 0
CSV в строке
    #40084342
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
HandKot,

CLR + XML Bulk Load?

если не найду другого решения, придется так и делать
...
Рейтинг: 0 / 0
CSV в строке
    #40084396
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И еще интересный вопрос. Может ли XSLT стримить? Тоесть не создавать промежуточное XmlDocument представление
в памяти. Т.к. возможно что для толстого (несколько гигабайт) инпута эта трансформация просто упадет по памяти.


Есть потоковые (SAX) парсеры XML - они могут.
Пример sqlxmlbulkload.
...
Рейтинг: 0 / 0
CSV в строке
    #40084541
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot

задача в целом следующая - обработка огромного xml, преобразовать в таблицу.


А откуда берётся эта адова xml-строка?
Её же не руками каждый раз набирают ("declare @str nvarchar(max)=N'......'; " );
...
Рейтинг: 0 / 0
CSV в строке
    #40084578
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
HandKot

задача в целом следующая - обработка огромного xml, преобразовать в таблицу.


А откуда берётся эта адова xml-строка?
Её же не руками каждый раз набирают ("declare @str nvarchar(max)=N'......'; " );

xml поступает от веб-сервиса и загрузчиком закидывается в таблицу, которую мне и надо разобрать
...
Рейтинг: 0 / 0
CSV в строке
    #40084679
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

подобным разбором должен заниматься сам сервис либо специально обученная утилита, а сервис должен сохранить в файл, а не в таблицу. Если объем данных большой, то можно разбор выполнять на отдельном сервере во избежание конкуренции за оперативную память. Поменяйте точку приложения сил и процесс станет намного проще.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CSV в строке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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