Полевые специфические ошибки для ETL - PullRequest
1 голос
/ 18 февраля 2010

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

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

Ответы [ 2 ]

2 голосов
/ 19 февраля 2010

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

0 голосов
/ 02 июня 2010

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

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

...