Я создаю процесс ETL в MS SQL Server и хотел бы иметь ошибки, специфичные для определенного столбца определенной строки. Например, данные первоначально загружаются из файлов Excel в таблицу (назовем исходную таблицу), где все столбцы имеют значение varchar(2000)
, а затем я размещаю данные в другой таблице (DataTypedTable), которая содержит более конкретные типы данных ( datetime
, int
и т. Д.) Или более жестко ограниченные длины varchar. Мне нужно иметь возможность создавать сообщения об ошибках для определенного поля, такие как:
«13 января» не является допустимым форматом даты для даты подачи. Пожалуйста, используйте формат ММ / ДД / ГГГГ
Эти сообщения об ошибках должны быть каким-то образом сохранены, чтобы в дальнейшем автоматизированный процесс мог создавать отчеты с сообщениями об ошибках, так что каждое сообщение ссылается на определенную строку и поле (кто-то должен будет вернуться и исправить данные в исходной системе и повторно отправьте файл Excel). Поэтому в идеале он должен быть вставлен в таблицы Failures некоторого вида и содержать первичный ключ строки с ошибкой, имя столбца и сообщение об ошибке.
Вопрос: Так что мне интересно, можно ли это сделать с помощью SSIS или какого-либо инструмента с открытым исходным кодом, такого как Talend, и если да, то каков будет ваш общий подход? Или какой ручной подход вы бы выбрали?
Пара подходов, которые я думал об использовании SQL (до тех пор, пока я не делал ETL вручную в процессах SQL, но я хочу рассмотреть другие подходы. Возможный C # даже.):
Используйте курсор, чтобы прочитать исходную таблицу, и для каждой строки вставьте пустую запись с только первичным ключом в таблицу DataTyped, затем используйте один оператор обновления для каждого столбца, чтобы в случае сбоя обновления я мог вставить очень специфическое сообщение об ошибке, относящееся к этому столбцу в таблице сообщений об ошибках.
Вставить все данные как есть в таблицу DataTyped, но иметь повторяющиеся столбцы, такие как SubmissionDate
и SubmissionDateOld
. После начальной вставки * Старые столбцы содержат данные, остальные остаются пустыми, и у меня есть одно обновление для каждого столбца, который устанавливает SubmissionDate на основе SubmissionDateOld.
В дополнение к предложению подхода, я хотел бы знать, используете ли вы этот подход или что-то подобное уже в работе, которую вы делаете.