Эффективный массовый импорт данных в SSIS со случайным дублирующимся контентом PK? - PullRequest
2 голосов
/ 20 января 2011

После некоторых преобразований я регулярно загружаю плоский файл с записями по 100 тыс. В таблицу. В таблице есть PK на двух столбцах. Данные в целом не содержат дублирующуюся информацию PK, но иногда встречаются дубликаты.

Я наивно не понимал, почему SSIS отклонял все мои записи, когда только некоторые из них нарушили ограничение PK. Я считаю, что проблема заключается в том, что во время массовой загрузки, если хотя бы одна из строк нарушает ограничение PK, все строки в этом пакете отклоняются.

Если я изменю свойство FastLoadMaxInsertCommitSize пункта назначения OLE Db на 1, если проблема устранена, но затем она работает как собака, поскольку она фиксирует каждую 1 строку.

В MySQL средство массовой загрузки позволяет игнорировать ошибки PK и пропускать эти строки без ущерба для производительности. Кто-нибудь знает способ достижения этого в SQL Server.

Любая помощь высоко ценится.

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Похоже, вы ищете IGNORE_DUP_KEY?

Использование параметра IGNORE_DUP_KEY для обработки дублирующихся значений

При создании или измененииуникальный индекс или ограничение, вы можете включить или отключить опцию IGNORE_DUP_KEY.Этот параметр указывает реакцию на ошибку для дублированных значений ключа в многострочном операторе INSERT после создания индекса.Если для IGNORE_DUP_KEY задано значение OFF (по умолчанию), компонент SQL Server Database Engine отклоняет все строки в операторе, если одна или несколько строк содержат повторяющиеся значения ключа.Если установлено значение ON, отклоняются только строки, содержащие повторяющиеся значения ключей;добавляются недвойные значения ключа.

Например, если один оператор вставляет 20 строк в таблицу с уникальным индексом, а 10 из этих строк содержат повторяющиеся значения ключа, по умолчанию все 20 строк отклоняются.Однако, если для параметра индекса IGNORE_DUP_KEY установлено значение ON, только 10 дублированных значений ключа будут отклонены;остальные 10 значений дубликатов ключа будут вставлены в таблицу.

0 голосов
/ 21 января 2011

Вы можете увеличить FastLoadMaxInsertCommitSize, чтобы сказать 5k ... это значительно ускорит ваши вставки.Затем установите Вывод ошибок для перенаправления строк - при выводе ошибок оттуда отправьте пакет из 5 тыс. Строк, содержащий строку ошибок, в другой пункт назначения.(Этот следующий бит из памяти!) Если вы установите его не для быстрой загрузки, он вставит правильные строки, и вы можете передать вывод ошибки в таблицу ошибок или что-то вроде задачи подсчета строк.1002 * Вы можете играть с цифрами FastLoadMaxInsertCommitSize, пока не найдете то, что вам подходит.

...