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