SSIS: не импортируйте строки, у которых нет правильного количества столбцов

74
8

Я работаю в BIDS (SSIS 2008). У меня очень простая задача потока данных, которая импортирует плоский файл в таблицу OLE DB. Плоский файл имеет 10 столбцов, и все они отображаются в соответствующие столбцы в таблице. Разделитель столбцов плоского файла - это символ канала, разделитель строк - {CR} {LF}, и он не имеет заголовков. В исходном файле с плоскими файлами я перенаправляю строки-нарушители (для всех 10 столбцов) на оба параметра "Ошибка и усечение" на выходной файл с ошибкой.

Я запускаю эту задачу потока данных каждый день, но я не могу гарантировать, что у плоского файла всегда будет 10 столбцов для каждой записи. Поэтому, поскольку SSIS имеет дурную привычку (по крайней мере, на мой взгляд) использовать разделитель строк в качестве разделителя столбцов для последнего определенного столбца, тогда он пытается объединить строки. Это означает, что если у меня недостаточно количества столбцов, то не все строки будут импортированы как отдельные строки в таблице. Это также означает, что оскорбительные строки не обязательно будут записываться в выходной файл с ошибкой.

В настоящее время только 2 сценария: (1) файл будет иметь необходимое количество столбцов и (2) файл будет недостаточным по количеству столбцов. Мне еще предстоит увидеть файл с большим количеством столбцов, чем ожидалось. Поскольку этот файл используется в моем модульном тестировании, я не хочу предварительно обрабатывать файлы с правильным количеством столбцов. Я хочу, чтобы оскорбительные строки записывали в выходной файл ошибки (или, если не выводящий плоский файл ошибки), по крайней мере, в какой-либо другой плоский файл и не импортировались. Мне все еще нужны строки с правильным количеством столбцов для импорта. Как я могу это достичь.

спросил(а) 2021-01-19T18:10:58+03:00 1 месяц, 1 неделя назад
1
Решение
104

но я не могу гарантировать, что у плоского файла всегда будет 10 столбцов для каждой записи.

imo это разрыватель транзакций для SSIS, поскольку для правильной работы требуется контракт между источником и пунктом назначения. Чтобы избежать риска ошибок или наличия данных в неправильных столбцах, я рекомендую импортировать всю строку как один очень большой столбец varchar, а затем использовать T-SQL для "разбора" его в 10 столбцов, выявления недостатков и обработки их изящно.

ответил(а) 2021-01-19T18:10:58+03:00 1 месяц, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема