Рекомендуемый способ импорта файла .csv в Microsoft SQL Server 2008 R2?

Каков ваш рекомендуемый способ импорта файлов .csv в Microsoft SQL Server 2008 R2?

Я бы хотел что-нибудь побыстрее, так как у меня есть каталог с большим количеством файлов .csv (> 500 МБ распространяется на 500 файлов .csv).

Я использую SQL Server 2008 R2 на Win 7 x64.

Обновление: Решение

Вот как я решил проблему в конце:

  1. Я отказался от попытки использовать LINQ to Entities для выполнения этой работы. Он работает, но не поддерживает массовую вставку, поэтому он примерно в 20 раз медленнее. Возможно, следующая версия LINQ to Entities будет поддерживать это.
  2. Воспользовался советом, данным в этом потоке, использовал массовую вставку.
  3. Я создал хранимую процедуру T-SQL, которая использует массовую вставку. Данные попадают в промежуточную таблицу, нормализуется, а затем копируется в целевые таблицы.
  4. Я сопоставил хранимую процедуру с C # с помощью платформы LINQ to Entities (на www.learnvisualstudio.net есть видео, показывающее, как это сделать).
  5. Я написал все код для циклического перебора файлов и т. д. на C #.
  6. Этот метод устраняет самое большое узкое место, которое заключается в чтении тонны данных с диска и их вставке в базу данных.

Причина, по которой этот метод очень быстро читает. csv файлы? Microsoft SQL Server может импортировать файлы прямо с жесткого диска прямо в базу данных, используя собственные оптимизированные процедуры. Для большинства других решений на основе C # требуется гораздо больше кода, а некоторые (например, LINQ to Entities) в конечном итоге вынуждены медленно передавать данные в базу данных через ссылку C # на SQL-сервер.

Да, я знаю это ' Было бы лучше иметь 100% чистый код C # для выполнения этой работы, но в итоге:

  • (a) Для этой конкретной проблемы использование T-SQL требует гораздо меньше кода по сравнению с C #, примерно 1/10, особенно для логики денормализации данных из промежуточной таблицы. Это проще и удобнее в обслуживании.
  • (b) Использование T-SQL означает, что вы можете воспользоваться преимуществами встроенных процедур массовой вставки, которые ускоряют процесс с 20-минутного ожидания до 30-секундной паузы.
11
задан Contango 17 February 2011 в 09:55
поделиться