Режими доступу до даних компонента OLE DB - це два варіанти - швидкий і не швидкий.
Швидкий, або "таблиця, або перегляд - швидке завантаження", або "змінна назва таблиці або перегляду - швидке завантаження", означає, що дані завантажуватимуться на основі набору.
Повільно - або "таблиця, або перегляд", або "змінна назва таблиці або перегляду" призведе до того, що SSIS видасть одноразові оператори вставки в базу даних. Якщо ви завантажуєте 10, 100, можливо, навіть 10000 рядків, напевно, незначна різниця в продуктивності між двома методами. Однак у якийсь момент ви збираєтеся наситити свій екземпляр SQL Server усіма цими прискіпливими маленькими запитами. Крім того, ви збираєтесь зловживати хек з журналу транзакцій.
Чому б вам хотілося не швидких методів? Неправильні дані. Якби я надсилав 10000 рядків даних, а 9999-й рядок мав дату 2015-02-29, у вас були б 10-ти атомні вставки та коміти / відкати. Якщо я використовував метод Fast, ціла партія рядків у 10 кб або збереже, або жодна з них. І якщо ви хочете дізнатися, який рядок (-ів) помилився, найнижчий рівень деталізації у вас буде 10k рядків.
Тепер існують підходи до максимальної швидкості завантаження даних, які все ще обробляють брудні дані. Це каскадний підхід, і він виглядає приблизно так
Ідея полягає в тому, що ви знайдете потрібний розмір, щоб вставити якомога більше в один кадр, але якщо ви отримаєте погані дані, ви спробуєте відновити дані послідовно меншими партіями, щоб дістатися до поганих рядків. Тут я почав з максимумом вставити фіксації розміру (FastLoadMaxInsertCommit) з 10000. На Їй помилку диспозиції, я міняю його Redirect Row
з Fail Component
.
Наступне призначення таке ж, як вище, але тут я намагаюся швидко завантажувати і зберігати його партіями по 100 рядів. Знову ж таки, протестуйте або зробіть певний прийом, щоб придумати розумні розміри. Це призведе до надсилання 100 партій із 100 рядків, оскільки ми знаємо, що десь там є принаймні один ряд, який порушив обмеження цілісності для таблиці.
Потім я додаю в суміш третій компонент, на цей раз я економлю в партіях по 1. Або ви можете просто змінити режим доступу до таблиці далеко від версії швидкого завантаження, оскільки це дасть такий же результат. Ми збережемо кожен рядок окремо, і це дасть нам змогу зробити "щось" з одним поганим рядком.
Нарешті, у мене є безпечне місце призначення. Можливо, це "та сама" таблиця, що і призначення, але всі стовпці оголошені як nvarchar(4000) NULL
. Що б не закінчилося за цією таблицею, потрібно вивчити та очистити / відкинути або будь-який процес поганого вирішення даних. Інші переходять на плоский файл, але насправді, що б не мало сенсу для того, як ви хочете відслідковувати погані дані.