2010-02-18 4 views
1

Я создаю процесс 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.

В дополнение к предложению подхода, я хотел бы узнать, используете ли вы этот подход или что-то подобное уже в своей работе.

ответ

2

Я использую aproach, где я помещаю условное разделение на поток данных. Записи, которые не позволяют выполнить условия (недействительная дата, нет данных в требуемом поле и т. Д.), Затем отправляются в таблицу исключений, которая включает в себя идентификатор записи, плохие данные, причину, по которой она не удалась. Затем вы можете создать электронную таблицу или текстовый файл ошибок из этой информации, чтобы отправить обратно группе, предоставляющей файл. Хорошие записи, конечно, идут по пути и вставлены в стол.

+0

+1 Честно говоря, это, по-видимому, хорошо работает по большей части, за исключением ошибок, которые очень расплывчаты, а идентификаторы столбцов являются числовыми и требуют хакерского процесса для преобразования в имена. Другая проблема заключается в том, что SSIS делает вещи, обычно не разрешенные в SQL Server, например, при присвоении плохо введенного кода области из строки «386-» в столбец int, он преобразует его в отрицательный -386, что я бы предпочел ошибку. Где, как в SQL, это создало бы ошибку приведения. Мне, вероятно, понадобится использовать задачу преобразования сценария и код из этой проверки вручную, чтобы сделать ее более строгой. – AaronLS

0

Как насчет какой-либо очистки/преобразования перед загрузкой в ​​таблицы (то, что вы называете начальными таблицами)? Сбросьте данные из Excel на вкладку или файл, разделенный запятыми, а затем используйте некоторые языки программирования по вашему выбору, чтобы очистить данные, которые вы отметили. Кроме того, насколько велика вся загрузка данных? Вы можете использовать многопоточное или многопроцессное приложение для обработки основных загрузок (например, загрузка нескольких миллионов строк за раз). Во время этого процесса любая ошибка, с которой вы сталкиваетесь, может быть загружена в таблицу исключений с информацией об идентификаторе, ошибке и комментариях. Этот метод помогает улучшить контроль во время фазы очистки данных.

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

Смежные вопросы