Загрузка большого CSV-файла в таблицу SQL Columnstore Случайная ошибка, после перезапуска тот же SSIS работает нормально

#sql #sql-server #sql-server-2016 #ssis-2012

#sql #sql-server #sql-server-2016 #ssis-2012

Вопрос:

Я столкнулся со странной ошибкой при загрузке файла CSV (, разделенные значения), содержащего ~ 1,2 миллиона строк, в таблицу хранилища столбцов SQL (2016) с использованием пакета SSIS, я редко получал следующую ошибку, особенно в столбцах datetime.

После того, как я просто перезапустил сбойный ETL, он просто работает нормально. Мы загружаем один и тот же файл в разных средах, и ошибка появляется только в одной среде в тот же день. Я пытаюсь добавить вывод ошибки и жду, чтобы увидеть в следующий раз, тем временем я хотел бы обратиться к экспертам с просьбой о помощи, если есть какие-либо проблемы с таблицей SQL columnstore или SSIS при загрузке значений datatime.

Но ошибка возникает при вставке данных, так что это может быть скорее проблема со стороны базы данных.

PackageName > Контейнер последовательности> Транзакции DFL. Код ошибки SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80004005. Доступна запись OLE DB. Источник: «Собственный клиент Microsoft SQL Server 11.0» Результат: 0x80004005 Описание: «Недопустимый формат даты». PackageName > Контейнер последовательности> Транзакции DFL. Произошла ошибка с транзакциями DST.Входные данные [Ввод назначения OLE DB].Столбцы [Account_FromDate] в транзакциях DST.Входные данные [Ввод назначения OLE DB]. Возвращенный статус столбца был: «Преобразование не удалось, поскольку значение данных превысило указанный тип»..

введите описание изображения здесь

Комментарии:

1. Можете ли вы показать нам объекты последовательности транзакций DFL и код, который он использует?

2. Загрузка плоского файла в sql server никогда не бывает прямой, особенно когда вы имеете дело с файлами, разделенными запятыми. Обычно я загружаю данные в промежуточные таблицы SQL Server с очень свободным типом данных, что-то вроде varhcar (100), varhcar (200). Как только у меня будут данные на SQL Server, затем запустите некоторые проверки проверки данных и строк, которые не проходят проверку, вставьте эти строки в таблицу ErrorLog и обрабатывайте только те строки, которые проходят все ваши проверки проверки, теперь у вас есть возможность выполнить все необходимые проверки проверки 🙂

3. Когда что-то работает в одной среде, но не в другой, это обычно означает проблемы с конфигурацией. Некоторые вещи, которые следует проверить: убедитесь, что значения даты в ваших CSV-файлах находятся в одном формате, т. Е. все dd / mm / yyyyy, все mm / dd / гггг или все гггг-мм-дд; убедитесь, что серверы Windows, на которых размещены ваши серверы SQL, имеют одинаковый часовой пояс и региональные настройки; поскольку языковые настройки SQL Server влияют на настройки dateformat, а настройки dateformat влияют на то, как он анализирует форматированные даты строки, убедитесь, что для default_language_name для всех логинов в master.sys.server_principals установлено одно и то же значение.

4. @SchmitzIT, как вы просили, добавил изображение потока данных, это просто и прямолинейно.

5. @M.Ali, проблема здесь в том, что я не могу повторно выдать ошибку, как только снова запустите etl, она просто отлично работает. И ключевой проблемой здесь был сбой при вставке данных в таблицу SQL. Единственный вариант, который у меня есть, — это постоянно добавлять задачу вывода ошибок и ждать ошибки в следующий раз.