Вопрос

Я создаю процесс ETL в MS SQL Server, и мне хотелось бы иметь ошибки, характерные для определенного столбца определенной строки.Например, данные изначально загружаются из файлов Excel в таблицу (назовем ее «Исходная таблица»), где все столбцы varchar(2000) а затем я помещаю данные в другую таблицу (DataTypedTable), которая содержит более конкретные типы данных (datetime,int, и т. д.) или более жестко ограниченные длины varchar.Мне нужно иметь возможность создавать сообщения об ошибках для определенного поля, например:"Ян.13-е число» не является допустимым форматом даты подачи.Пожалуйста, используйте формат ММ/ДД/ГГГГ.

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

Вопрос: Поэтому мне интересно, можно ли это сделать с помощью SSIS или какого-либо инструмента с открытым исходным кодом, такого как Talend, и если да, то каков будет ваш общий подход?Или какой подход с ручным кодированием вы бы выбрали?

Несколько подходов, которые я думал об использовании SQL (до тех пор, пока я не выполнил ETL вручную в процедурах SQL, но я хочу рассмотреть другие подходы.Возможно даже С#.):

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

Вставьте все данные как есть в таблицу DataTyped, но сделайте дубликаты столбцов, например SubmissionDate и SubmissionDateOld.После первоначальной вставки в столбцах *Old есть данные, остальные пусты, и у меня есть одно обновление для каждого столбца, которое устанавливает SubmissionDate на основе SubmissionDateOld.

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top