2013-03-26 3 views
1

Я использую SqlServer 2008R2, и мне нужно очень быстро загрузить 900 миллионов записей с последующей структурой.

VARCHAR (20)
VARCHAR (10)
VARCHAR (50)
VARCHAR (15)
VARCHAR (20)
VARCHAR (10)
VARCHAR (4)
VARCHAR (3)
VARCHAR (10)
DateTime
DateTime DateTime

DateTime
десятичных (19, 2)
десятичного (19, 2)
десятичных (19, 2)
десятичного (19, 2)
десятичного (19, 2)
десятичного (19, 2)
десятичный (19, 2)
десятичного (19, 2)
десятичных (19, 2)

(у меня есть различные форматы, некоторые до 100 столбцов данных - в общей сложности 221GB данных для загрузки)

SqlServer Bulk Insert с логикой

Проблема заключается в том, что данные поступают от старого OS390 и если дата является недействительным они посылают его в текстовый файл как 99999999.

Что является лучшим способом, чтобы преобразовать эти данные, чтобы быть нулевым? В Oracle вы можете поместить логику внутри форматов, можете ли вы сделать это с помощью BCP? или это самый быстрый способ достичь этого, используя SSIS для загрузки и преобразования одновременно? или с помощью триггера или чего-то подобного?

Загрузка как текст, а затем преобразование в базу данных Я не думаю, что это опция из-за томов данных.

+0

Как быстро вы хотите его загрузить? Я просто загружал данные со скоростью 430 ГБ/час с тривиальной настройкой (8 потоков, потокобезопасных в таблицы кучи с помощью SqlBulkCopy), поэтому вы могли бы уйти с промежуточной таблицы. – usr

+0

Мы должны загрузить 221 ГБ максимум за 15 минут. Производственный сервер будет иметь минимум 180 ГБ оперативной памяти, 32 ядра, быстрые диски и т. Д. Проблема с промежуточными таблицами будет временем, которое потребовалось бы, чтобы вставить данные в финальные таблицы. Также, как и временное дисковое пространство для хранения двух копий данных. Сможете ли вы предоставить более подробную информацию о том, как вы смогли загрузить то, что вы сделали? – Luke

ответ

0

Вы всегда можете преобразовать данные любым способом, используя клиентское приложение .NET. Я просто загружал данные со скоростью 430 ГБ/час с помощью тривиальной настройки:

Я только что развернул 8 потоков .NET и сделал их потоковыми данными, используя SqlBulkCopy в партиях серии 10 м. Каждая нить вставлена ​​в собственную таблицу кучи. Это простейшая возможная настройка. Это работало на моем рабочем столе 4 * 2 Core i7 с SQL Server на том же компьютере. У SQL было около 50% загрузки процессора, а у моего приложения были другие 50%. Таким образом, пропускную способность можно было бы удвоить, используя две машины и быструю сеть.

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

+0

Спасибо, мы попробуем это. Посмотрите, какую скорость мы можем получить. – Luke