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

Откуда:
Сообщений: 4
Доброго времени суток
Нужна помощь
Есть: Ноотбук Win 7 x64 Ru, MS SQL Server 2012, 16 Гб оперативки и 500 Гб HDD

В БД установлен режим журналирования BULK_LOGGED
надо в БД закачать CSV файл по шаблону

Файл шаблона сформирован с помощью bcp.exe
bcp DBName.dbo.TblName format nul -f ImportFile.fmt -n -t^ -r\n

Файл шаблона (урезан до 3 полей - в оригинале 18 полей, но типы те же):

11.0
3
1 SQLDATE 1 3 "^" 1 DATA ""
2 SQLCHAR 2 25 "^" 2 ACCOUNT Cyrillic_General_CI_AS
3 SQLFLT8 1 8 "\n" 3 INDT ""

файл CSV (урезан до 2 записей - в оригинале более 4 млн строк и 18 полей):

01.04.2014^47408810800001001910^10,2
02.05.2015^45818810500002020015^200,8

Не получается закачать информацию с помощью bcp.exe - пытаюсь так:
bcp DBName.dbo.TblName in ImportFile.csv -f ImportFile.fmt -T

постоянно дает ошибку:
Invalid filed size for datatype

Пробовал разные форматы даты и чисел - результат тот-же :(

Если в таблице поля сделать как varchar(10), varchar(25), varchar(30), изменить шаблон типа:
11.0
3
1 SQLCHAR 0 10 "^" 1 DATA ""
2 SQLCHAR 0 25 "^" 2 ACCOUNT Cyrillic_General_CI_AS
3 SQLCHAR 0 30 "\n" 3 INDT ""

- все катит (реальный файл грузит быстро), но...
НУЖНА ЗАГРУЗКА ПО ТИПАМ ДАННЫХ - т.е. дата должна прогрузится как дата, число как число и т.п.

Подскажите что делать, куда рыть, другие варианты загрузки...
(возможно изменение представления данных в CSV файле)

использую BCP т.к. критично время загрузки.

P/S/
В T-SQL не очень шарю, так что если можно, то про-проще плиз...
Перейти на Oracle и юзать Loader - не предлагать ;-)
26 май 15, 14:16    [17690862]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 265
измените формат float на decimal. И, возможно, потребуется менять запятую на точку для отделения дробной части. Или пишите всё в буферную таблицу и потом переливайте с проверкой типов.
26 май 15, 14:43    [17691033]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
Ферхо
Member

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

Спс за совет
попробую изменить на decimal, а через временные таблицы... на подходе файл с 500 млн записей - умру пока будет преобразование длиться

Если совет поможет - отпишусь
26 май 15, 15:07    [17691191]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
o-o
Guest
Ферхо
bcp DBName.dbo.TblName format nul -f ImportFile.fmt -n -t^ -r\n

файл CSV (урезан до 2 записей - в оригинале более 4 млн строк и 18 полей):

01.04.2014^47408810800001001910^10,2
02.05.2015^45818810500002020015^200,8


у вас файл форматирования сформирован для данных в "нативном" формате, не в символьном.
а подгружаемый файл не в нативном.
дата в нативном на дату совершенно не похожа, а у вас читаема.
вы попробуйте сперва выгрузить данные с использованием своего файла форматирования,
а потом посмотрите, во что дата превратится.
26 май 15, 15:08    [17691198]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
o-o
Guest
вот ваши данные, занесенные в таблицу
create table dbo.t(data date, ACCOUNT char(25), indt float);

и выгруженные в нативном формате.
и обратно они нормально загрузились

К сообщению приложен файл. Размер - 7Kb
26 май 15, 15:17    [17691252]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
Ферхо
Member

Откуда:
Сообщений: 4
понял
тогда сформулирую вопрос по другому
как сделать правильную загрузку? из символьных данных в csv файле в БД по типам?
чтобы дата была датой, числа числами...
НУ ОЧЕНЬ НАДО и чтобы быстро работало... :(
26 май 15, 16:51    [17691928]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ферхо
чтобы дата была датой, числа числами...

Для MSSQL 200,8 не есть число. И 01.04.2014 тоже не всегда дата
26 май 15, 16:56    [17691979]     Ответить | Цитировать Сообщить модератору
 Re: bcp.exe загрузка по шаблону  [new]
Ферхо
Member

Откуда:
Сообщений: 4
Вот что получилось:
1. поменял в csv представление даты с dd.mm.yyyy на yyyy-mm-dd
2. в числах установил разделитель точку 200,8 -> 200.8
3. csv переименовал в dat
4. запустил bcp DBName.dbo.TblName in ImportFile.dat -c -t^ -T
без всякого шаблона...
И СВЕРШИЛОСЬ... все грузится пулей...

Всем огромное спасибо за помощь!
26 май 15, 17:47    [17692309]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить