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

Откуда:
Сообщений: 77
Есть входной текстовый файл следующего формата

1=1/1/1901,2=556677999,3=АААБББ.....<EOL>
1=1/1/1902,907=СССГГГ,2=666999,508=фффрртт,9901=бла-бла.....<EOL>
...
<ЕОФ>

Каждая строка в файле, заканчивающаяся <EOL> - это отдельная запись , содержащая некий набор тэгов типа ключ-значение , распположенных в неопределенном(случайном) порядке внутри записи
В общем виде нечто такое

TagId=Value,TagId=Value,TagId=Value,...<EOL>
TagId=Value,TagId=Value,TagId=Value,TagId=Value,TagId=Value...<EOL>
...
TagId=Value...<EOL>
<EOF>

Кол-во тэгов внутри каждой записи нефиксировано и колеблется в промежутке от 9 до 40+.
TagId - числовое значение (INT) от 1 до 2000
Value - произвольная строка/набор байтов
Безусловно есть множество тагов, которые общие для всех записей типа RecordId, DateStamp и т.д., но вцелом набор тагов отличен от записи к записи

Задача - закачать файл описанного формата в табличку MSSQL оптимальнейшим способом (оптимизация по-времени)
(Файл достаточно громаден 40-50ГБ)
Понятно што если таблица будет унифицирована под все виды записей она будет достаточно дырявой/разреженной.
Ибо набор тагов для разных типов записей отличается.

TagId,TagId,TagId,TagId,TagId,TagId....TagId
ААА,NULL,БББ,ЦЦЦ,NULL,ВВВ
NULL,1234,NULL,7777, 555,NULL
....

Пока в голову приходит исключительно кастом кодинг
Нечтo ТАКОЕ

пока не конец файла
1)читаем кусок файла
2)в цикле заполняем матрицу А[1..МАХ(TagId)][1..Кол-во записей] значеиями , прочитанными из входного файла
3)дампаем матрицу в CSV файл
4)закачивает CSV в МSSQL
5)конец цикла

Bцелом под таким (прямым) углом вижу решение.
Хотел услышать альтернативные мысли.

Возможно не стоит транспонировать данные и вытягивать их горизонтально в общий набор столбцов.
Может удачно будет сохранить их в вертикальной STAGE Table типа

TagId,Value
1,Value
2,Value
...
ПризнакКонцаЗаписи(специальный TagId)
1,Value
907,Value
...

Такие мысли..
Вцелом такая задачка

Заранее Спасибо
17 июн 11, 10:59    [10826533]     Ответить | Цитировать Сообщить модератору
 Re: закачка данных из текстового файла  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4994
delpasso,
какими средствами предполагается делать?
Я бы выделил общие данные в одну таблицу, а изменяемые в другую, каждая запись в которой ссылается на первую. Естественно в первой нужно дополнительное уникальное служебное поле. Далее преобразовать в два файла и затянуть по очереди посредством BULK INSERT.
17 июн 11, 11:40    [10826842]     Ответить | Цитировать Сообщить модератору
 Re: закачка данных из текстового файла  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
delpasso,

заливайте весь файл балком во временную таблицу, а там уже парсите данные как вам нужно.
хотя конечно 50 гигов эт надо тестить как оно будет
17 июн 11, 13:03    [10827693]     Ответить | Цитировать Сообщить модератору
 Re: закачка данных из текстового файла  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
delpasso,

я бы распарсил текст в х текстовых файлов, по одному на tagid, вида

<№строки в оригинальном файле><значение>

и закачал бы каждый в свою таблицу :)
17 июн 11, 13:15    [10827844]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить