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

Откуда: Msk
Сообщений: 582
Приветствую.
С помощью BULK INSERT хочу залить в sql sever csv файл, в котором 200 млн строк.

Реально такое число строк загрузить?

Если да, то каким образом определить из-за чего появляется ошибка
The bulk load failed. The column is too long in the data file for row 1, column 2. Verify that the field terminator and row terminator are specified correctly.
Сообщение 7301, уровень 16, состояние 2, строка 6
Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".

например, первые 10000 записей загружаются

BULK 
INSERT dbo.test
       FROM 'e:\TMP\test2.csv'
       WITH (
                FIELDTERMINATOR = ',',
                FIRSTROW = 2
            )
GO


К сообщению приложен файл (test2.csv - 126Kb) cкачать
1 апр 16, 17:52    [19006396]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
NewIvanovec,

The column is too long in the data file for row 1, column 2.

У Вас размер данных в файле не соответствует структуре в БД.
1 апр 16, 18:14    [19006475]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
gds
NewIvanovec,

The column is too long in the data file for row 1, column 2.

У Вас размер данных в файле не соответствует структуре в БД.


можно как-то пропускать "ошибочные" строки?
1 апр 16, 18:17    [19006483]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
NewIvanovec,

1. Загружайте через пакет SSIS с предварительной обработкой данных.
2. Создайте временную таблицу с запасом по типу полей залейте туда, обработайте и перелейте в вашу таблицу.
1 апр 16, 18:22    [19006495]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
NewIvanovec,

Ну или https://www.google.ru/search?q=bcp ignore errors&ie=utf-8&oe=utf-8&gws_rd=cr&ei=PZL-VpO_MKfvywOSoK6YBQ первая же ссылка.
1 апр 16, 18:23    [19006500]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
даже с игнорированием ошибок не делается импорт.

всё-таки, есть ли шанс без SSIS обойтись ?

BULK 
INSERT dbo.test
       FROM 'e:\TMP\test2.csv'
       WITH (
                FIELDTERMINATOR = ',',
                FIRSTROW = 2,
                ERRORFILE = 'e:\TMP\err.txt',
                MAXERRORS=100000
            )
GO
4 апр 16, 11:27    [19013444]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
NewIvanovec,
А в чем сложность написать пакет? тут же импорт паспортов (я так понимаю недействительных).
4 апр 16, 11:33    [19013481]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
интересно то, что если я пытаюсь загрузить 5 строк из файла с параметром
LASTROW=5
, всё равно получаю ту же ошибку.

Сообщение 4866, уровень 16, состояние 8, строка 1
The bulk load failed. The column is too long in the data file for row 1, column 2. Verify that the field terminator and row terminator are specified correctly.
Сообщение 7301, уровень 16, состояние 2, строка 1
Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".
4 апр 16, 11:34    [19013485]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewIvanovec
, всё равно получаю ту же ошибку.

Потому что The column is too long in the data file for row 1

BULK 
INSERT dbo.t1
       FROM 'c:\temp\test2.csv'
       WITH (
                FIELDTERMINATOR = ',',
                FIRSTROW = 2
            )

у меня лично успешно загрузил 9997 записей. Т.е. все, что было в файле
4 апр 16, 11:41    [19013534]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
Glory
NewIvanovec
, всё равно получаю ту же ошибку.

Потому что The column is too long in the data file for row 1
с этим можно что-нибудь сделать?
или bulk не потянет 200 млн строк и нужно искать другой способ.


BULK 
INSERT dbo.t1
       FROM 'c:\temp\test2.csv'
       WITH (
                FIELDTERMINATOR = ',',
                FIRSTROW = 2
            )

у меня лично успешно загрузил 9997 записей. Т.е. все, что было в файле


5 строк это я загрузил из оригинального файла, в котором миллионы записей.
сюда я загрузил примерно 10 тыс записей из оригинального файла.
они у меня тоже загружаются без проблем.
4 апр 16, 11:55    [19013643]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
gds
NewIvanovec,
А в чем сложность написать пакет? тут же импорт паспортов (я так понимаю недействительных).


если не получится через bulk, тогда буду пытаться через пакет грузить. Не пользовался раньше IS, поэтому чувствую, затянется задача.
4 апр 16, 12:09    [19013733]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
NewIvanovec
gds
NewIvanovec,
А в чем сложность написать пакет? тут же импорт паспортов (я так понимаю недействительных).


если не получится через bulk, тогда буду пытаться через пакет грузить. Не пользовался раньше IS, поэтому чувствую, затянется задача.


Пакет по загрузки недействительных паспортов пишется за 15-20 минут. Со всеми проверками, тестами, верификацией, заведением задачи и прочей бюрократией пол дня. Вы написали 4 дня назад. Не пугайтесь SSIS он не страшный.
4 апр 16, 12:17    [19013791]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewIvanovec
они у меня тоже загружаются без проблем.

Т.е. ошибочные данные каждый должен сам сгенерировать ?
4 апр 16, 12:29    [19013877]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewIvanovec
с этим можно что-нибудь сделать?
или bulk не потянет 200 млн строк и нужно искать другой способ.

bulk - это не парсер произвольных форматов, меняющихся в каждой строке файла.
4 апр 16, 12:33    [19013895]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
NewIvanovec
gds
NewIvanovec,
А в чем сложность написать пакет? тут же импорт паспортов (я так понимаю недействительных).


если не получится через bulk, тогда буду пытаться через пакет грузить. Не пользовался раньше IS, поэтому чувствую, затянется задача.


Загрузить CSV не такая проблемная задача на SSIS. Вопрос в том, насколько форматирование файла повторяется.
4 апр 16, 13:07    [19014086]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
проблема решилась добавлением параметра
ROWTERMINATOR='0x0a'


итоговая команда:
BULK 
INSERT 
dbo.test
       FROM 'e:\TMP\test.csv'
       WITH (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR='0x0a',
                FIRSTROW = 5000002,
                ERRORFILE = 'e:\TMP\err.txt',
                MAXERRORS=100000
                --LASTROW=10000000
            )
GO


Спасибо тройке участников форума за помощь.
4 апр 16, 15:02    [19014815]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
у меня в нужной таблице 3 поля, а в файле только 2 поля. при Bulk insert можно в запрос добавить третьим значением свою константу?
4 апр 16, 17:12    [19015645]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
С помощью службы интеграции нужно записать в таблицу из 4 полей данные, из которых 2 поля берется из файла, а 2 это константы.

меня бы устроил insert такого плана :)
insert into test (f1, f2, c3, c4) values ("значение из файла PASSP_SERIES", "значение из файла PASSP_NUMBER", getdate(), 'FIO')  


учитывая объем данных, какие компоненты могут помочь?
4 апр 16, 22:39    [19016623]     Ответить | Цитировать Сообщить модератору
 Re: загрузка из файла csv, где больше 200 млн строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
NewIvanovec
учитывая объем данных, какие компоненты могут помочь?

помогут default-ы на полях c3 и c4
5 апр 16, 08:13    [19017039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить