#sql #sql-server #azure #ssis #azure-sql-data-warehouse
#sql #sql-сервер #azure #ssis #azure-synapse
Вопрос:
У нас есть несколько пакетов ssis, загружающих данные в хранилище данных Azure из файлов CSV. Все задачи потока данных внутри пакетов настроены на параллельную обработку. Недавно пакеты начали выходить из строя со следующей ошибкой.
Не удалось скопировать в хранилище данных SQL из хранилища больших двоичных объектов. 110802; Произошла внутренняя ошибка DMS, которая привела к сбою этой операции. Подробности: Исключение: System.NullReferenceException, сообщение: ссылка на объект не установлена для экземпляра объекта.
Когда мы запускаем пакет вручную (запуская каждый dft по отдельности), он работает нормально. Когда мы запускаем пакет вручную как есть (с параллельной обработкой), возникает та же ошибка.
Кто-нибудь здесь, пожалуйста, помогите найти основную причину этой проблемы?
Ответ №1:
Я полагаю, что эта проблема может возникнуть, если несколько заданий пытаются одновременно получить доступ к одному и тому же файлу. Возможно, потребуется проверить, является ли один CSV-файл исходным кодом для нескольких пакетов SSIS, если да, возможно, вам потребуется изменить свой подход. Когда один пакет пытается прочитать один CSV-файл, он блокирует этот файл, чтобы другое задание не могло изменить этот файл. Чтобы избавиться от этой проблемы, вы можете использовать последовательные DFT для тех задач, которые используют тот же CSV, что и исходный, и поддерживать другие DFT параллельно, как есть.
Ответ №2:
ИМХО, ошибочно использовать поток данных SSIS для вставки данных в хранилище данных SQL Azure. На ранних этапах были проблемы с драйверами, которые ужасно снижали производительность, и, хотя сейчас они, возможно, исправлены, оптимальным методом импорта данных в хранилище данных SQL Azure является Polybase. Поместите свои csv-файлы в хранилище больших двоичных объектов или озеро данных, затем ссылайтесь на эти файлы с помощью Polybase и внешних таблиц. При необходимости затем импортируйте данные во внутренние таблицы, используя CTA, например псевдокод
csv -> blob store -> polybase -> external table -> CTAS to internal table
Если вам необходимо использовать SSIS, рассмотрите возможность использования только задачи Execute SQL в подходе типа ELT или используйте задачу Azure SQL DW Upload, которая является частью пакета функций Azure для служб SSIS, доступного здесь.
Ознакомьтесь с этим руководством, чтобы подробнее ознакомиться с этим подходом:
https://learn.microsoft.com/en-us/azure/sql-data-warehouse/design-elt-data-loading