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

Откуда: Moscow
Сообщений: 2767
добрый день!

необходимо произвести загрузку большого числа txt-файлов в сервер. все файлы стандартизированы, имеют общую структуру, одинаковое число полей. их порядка 300 тыс., так что о ручном вводе не может идти речи.
что можно предпринять?

спасибо!

+ select @@version
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
2 апр 12, 11:36    [12349716]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
SSIS пакет
2 апр 12, 11:37    [12349730]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
HandKot
SSIS пакет
если Вам не трудно, чуть подробнее. мне надо разжевать новые вещи. спасибо!
2 апр 12, 11:43    [12349797]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
это утилита sql-server? она есть в Express Edition?
2 апр 12, 11:45    [12349820]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
создаётся SSIS пакет
1. настраиваете источник и назначение
2. создаете DataFlow task
3. и этот DataFlow task внедряете в ForEach Loop контейнер по файлам в директории

Все

Ничего сложного нет, когда откроете дизайнет то всё будет понятно

Если же возится с пакетом не хочется (и зря), то можно сделать и скриптом
1. заполняете таблицу с именами файлов для импорта
2. в цикле формируете команду BULK INSERT и выполняете её
2 апр 12, 11:49    [12349854]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
PlanB,

SSIS
2 апр 12, 11:50    [12349875]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
понял, спасибо большое!
2 апр 12, 11:52    [12349892]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
PlanB
это утилита sql-server? она есть в Express Edition?

это один из сервисов, входящих в состав MS SQL
есть ли он в express - сказать не могу
посмотрите, есть ли у Вас SQL Server Business intelligence Development Studio - средство для разработки пакетов
2 апр 12, 11:53    [12349900]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Express состоит из трех пакетов, один из которых SSIS, закачивать отдельно или в составе полного пакета.
2 апр 12, 12:05    [12350005]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
Я
Guest
Нет в Експресс редакции SSIS. Нету
2 апр 12, 12:53    [12350449]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35381
Блог
Если лень разбираться/устанавливать с SSIS, то можно слить все файлы в один с помощью bat и этот один файл загрузить через bcp.
2 апр 12, 13:09    [12350657]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
лучше уж в батнике по отдельности файлы заливать, а не лить всё в один
2 апр 12, 13:26    [12350826]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
По мне дык вообще небольшое приложение на C# наваять... Там тебе и прогрес-бар и отладка...
2 апр 12, 13:29    [12350847]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
PlanB
Member

Откуда: Moscow
Сообщений: 2767
Владимир СА
По мне дык вообще небольшое приложение на C# наваять... Там тебе и прогрес-бар и отладка...
в С я не очень ориентируюсь, но на VB такое сделать легко. вопрос был скорее в оптимизации работы.

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

вроде как договорился о пересылке несколько иного вида базы, в котором текстовые данные будут сведены в один текстовик.

всем спасибо за помощь!
2 апр 12, 14:59    [12351711]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
Glory
Member

Откуда:
Сообщений: 104751
.bat file с конструкцией for и вызовом утилиты bcp.exe
2 апр 12, 15:01    [12351730]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
PlanB,

ALTER PROCEDURE [dbo].[sp_Insert_BULK]
@file_name varchar(4000)
AS
DECLARE @bulk_cmd varchar(8000)

		SET @bulk_cmd = 'BULK INSERT TABLE_NAME FROM '''+@file_name
		+''' WITH (FIELDTERMINATOR ='';'', ROWTERMINATOR = '''+CHAR(10)+''')'
		EXEC(@bulk_cmd)	

TABLE_NAME - таблица с теми же полями, что и файл
2 апр 12, 15:45    [12352075]     Ответить | Цитировать Сообщить модератору
 Re: загрузка большого массива данных в sql-server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
PlanB
в С я не очень ориентируюсь, но на VB такое сделать легко. вопрос был скорее в оптимизации работы.

дело в том, что в подобной проге как ни крути, придется каждый из 300 тыс текстовикв открывать (пусть и программно) и парсить в них строки. сколько это времени займет я не берусь прикидывать. очевидно только то, что уйма.
Ну, в общем, все известные способы загрузки именно только так и смогут делать - открыть каждый из 300 тыс текстовиков, распарсить и загрузить :-)

Просто зачем самому писать, если уже всё написано? Если формат файлов понятный сиквелу, то самое простое - балк инсёрт в какой то его реинкарнации (из SSIS, из сиквела, или утилитой bcp).
PlanB
вроде как договорился о пересылке несколько иного вида базы, в котором текстовые данные будут сведены в один текстовик.
Да, это проще - не нужно цикл по файлам писать, ну и быстрее обрабатывать один большой файл по стравнению с кучей маленьких...
2 апр 12, 17:43    [12353068]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить