Имитация вывода ошибок для компонента скрипта
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Хотя невозможно напрямую настроить вывод ошибок в компоненте скрипта для автоматической обработки строк ошибок, можно воспроизвести функциональность встроенного вывода ошибок, создав дополнительный выход и используя условную логику в скрипте для направления строк на этот выход, когда это целесообразно. Возможно, потребуется имитация поведения встроенного вывода ошибок с помощью добавления двух дополнительных выходных столбцов для номера ошибки и идентификатора столбца, в котором эта ошибка возникла.
Если вы хотите добавить описание ошибки, соответствующее определенному коду ошибки служб Integration Services, можно использовать GetErrorDescription метод интерфейса, доступный IDTSComponentMetaData100 через свойство компонента ComponentMetaData script.
Пример
В следующем примере используется компонент скрипта, настроенный в качестве преобразования и имеющий два синхронных выхода. Этот компонент скрипта предназначен для фильтрации строк ошибок в строках, содержащих адреса, в образце базы данных AdventureWorks. Вымышленная ситуация, рассматриваемая в этом примере, предполагает увеличение количества клиентов в Северной Америке, в результате чего возникает необходимость выполнить фильтрацию, исключающую адреса, расположенные за пределами Северной Америки.
Настройка примера
Перед созданием нового компонента скрипта создайте диспетчер соединений и настройте источник потока данных, выбирающий адреса из образца базы данных AdventureWorks. В этом примере, где предусмотрено обращение только к столбцу CountryRegionName, можно просто использовать представление Person.vStateCountryProvinceRegion либо выбрать данные, соединив таблицы Person.Address, Person.StateProvince и Person.CountryRegion.
Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве преобразования. Откройте редактор преобразования "Скрипт".
На странице Скрипт задайте свойство ScriptLanguage, указав язык скрипта, используемый для создания скрипта.
Нажмите кнопку "Изменить скрипт", чтобы открыть набор средств Microsoft Visual Studio Tools для работы с приложениями (VSTA).
В методе Input0_ProcessInputRow введите или вставьте следующий код.
Закройте среду VSTA.
На странице Входные столбцы выберите столбцы, которые необходимо обработать в преобразовании "Скрипт". В этом примере используется только столбец CountryRegionName. Невыбранные доступные входные столбцы будут пропущены без изменения в потоке данных.
На странице Входы и выходы добавьте новый, второй выход и укажите в качестве значения его свойства SynchronousInputID идентификатор входа, используемый также в качестве значения свойства SynchronousInputID выхода по умолчанию. Присвойте свойству ExclusionGroup обоих выходов одно и то же ненулевое значение (например, 1), чтобы указать, что каждая строка должна быть направлена только в один из двух выходов. Дайте новому выводу ошибок понятное описательное имя, например MyErrorOutput.
Добавьте в новый вывод ошибок дополнительные выходные столбцы для отслеживания требуемых данных ошибок. В их число может входить код ошибки, идентификатор столбца, в котором возникла ошибка, а также, возможно, описание ошибки. В этом примере создаются новые столбцы, ErrorColumn и ErrorMessage. Если вы перехватываете предопределенные ошибки служб Integration Services в собственной реализации, обязательно добавьте столбец ErrorCode для номера ошибки.
Запишите значение идентификатора входного столбца или столбцов, которые должны проверяться компонентом скрипта на наличие ошибок. В этом примере идентификатор столбца используется для заполнения значений в столбце ErrorColumn.
Закройте редактор преобразования "Скрипт".
Соедините выходы компонента скрипта с подходящими назначениями. Назначение «Неструктурированный файл» проще всего для настройки тестирования в нерегламентированных случаях.
Запустите пакет.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Row.CountryRegionName <> "Canada" _
And Row.CountryRegionName <> "United States" Then
Row.ErrorColumn = 68 ' ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America."
Row.DirectRowToMyErrorOutput()
Else
Row.DirectRowToOutput0()
End If
End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")
{
Row.ErrorColumn = 68; // ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America.";
Row.DirectRowToMyErrorOutput();
}
else
{
Row.DirectRowToOutput0();
}
}
См. также
Обработка ошибок в данных
Использование выводов ошибок в компоненте потока данных
Создание синхронного преобразования с помощью компонента скрипта