2012-01-10 5 views
4

Мне нужно нажать большую таблицу SQL из моего локального экземпляра в SQL Azure. Передача - простая, «чистая» загрузка - просто вставляйте данные в новую, пустую таблицу.Импорт данных SSIS с резюме

Таблица чрезвычайно велика (~ 100 миллионов строк) и состоит только из GUID и других простых типов (без метки времени или чего-то еще).

Я создаю пакет SSIS с использованием мастера импорта/экспорта данных в SSMS. Пакет отлично работает.

Проблема в том, что пакет запускается через медленное или прерывистое соединение. Если интернет-соединение идет на полпути, то нет возможности «возобновить» передачу.

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

ответ

4

Как правило, в такой ситуации я бы разработал пакет, чтобы перечислять партии размером N (строки 1k, 10M строк и т. Д.) И записывать в таблицу обработки, каков будет последний успешный пакет. Однако с идентификаторами GUID вы не можете разделить их на ведра.

В этом конкретном случае я бы изменил поток данных, чтобы он выглядел как Source -> Lookup -> Destination. В преобразовании поиска запросите сторону Azure и получите только ключи (SELECT myGuid FROM myTable). Здесь нас будут интересовать только строки, которые не имеют соответствия в наборе записей поиска, так как те, которые находятся в ожидании передачи.

Полная кеш-память будет стоить около 1,5 ГБ (100 МБ * 16 байтов) памяти, предполагая, что сторона Azure полностью заполнена плюс связанные с ней затраты на передачу данных. Эта стоимость будет меньше, чем усечение и повторная передача всех данных, но просто хочу удостовериться, что я вызвал ее.

+0

Спасибо. Я попробую это. – TheNextman

3

Выполняйте заказу вручную при загрузке. И убедитесь, что вы используете max (guid) от Azure в качестве отправной точки при восстановлении после сбоя или перезапуска.

Смежные вопросы