Обработка ошибок в данных

Применимо к: SQL Server Integration Runtime служб SSIS в Фабрика данных Azure

Если компонент потока данных применяет преобразование к данным столбца, выделяет данные из источников или загружает данные в назначения, то может возникнуть ошибка. Ошибки часто возникают из-за непредвиденных значений данных. Например, преобразование данных не выполняется, так как столбец вместо числа содержит строку; вставка в столбец базы данных не выполняется, потому что данные имеют тип даты, а столбец содержит числовые данные; наконец, результат выражения не может быть определен, так как значение столбца равно нулю, поэтому математическая операция недопустима.

Обычно происходят ошибки следующих категорий.

  • Ошибки преобразования данных, возникающие, если преобразование приводит к потере значащих разрядов, потере незначащих разрядов или к усечению строк. Ошибки преобразования данных также возникают, если запрашиваемое преобразование не поддерживается.

  • Ошибки оценки выражений, возникающие, если выражения, оцениваемые во время исполнения, выполняют недействительные операции или становятся синтаксически неправильными из-за потери данных или их неверных значений данных.

  • Ошибки поиска, возникающие, если операция поиска не может обнаружить соответствия в таблице уточняющих запросов.

Список ошибок, предупреждений и других сообщений служб Integration Services см. в разделе Integration Services Error and Message Reference.

Использование выводов ошибок для записи ошибок на уровне строк

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

Вывод ошибок может быть связан с входными данными другого преобразования или загружен в назначение, отличное от назначения выхода без ошибок. Например, выход ошибки может быть привязан к преобразованию «Производный столбец», которое формирует строку для пустого столбца.

На следующей диаграмме показан простой поток данных, содержащий выход ошибок.

Поток данных с выводом ошибок

Дополнительные сведения см. в статьях Поток данных и Пути служб Integration Services.

Диалоговое окно "Настройка вывода ошибок"

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

Дополнительные сведения о работе с выводом ошибок на выходе см. в разделе Обработка ошибок в данных.

Параметры

Вход или выход
Просмотр имени вывода.

Столбец
Просмотр выходных столбцов, выбранных в диалоговом окне редактора преобразования.

Error
Если это применимо, при возникновении ошибки задайте событие: пропустить ошибку, перенаправить строку или вызвать сбой компонента.

См. также:Обработка ошибок в данных

Усечение
Если это применимо, при возникновении усечения задайте событие: пропустить ошибку, перенаправить строку или вызвать сбой компонента.

См. также:Обработка ошибок в данных

Описание
Просмотрите описание операции.

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

Применить
Применить параметр обработки ошибок к выбранным ячейкам.

Ошибки — сбои или усечения

Ошибки разделяются на две категории: ошибки и усечения.

Ошибки. Ошибка указывает на определенную неполадку и формирует результат NULL. Такие ошибки могут включать в себя ошибки преобразования данных или ошибки оценки выражений. Например, попытка преобразовать в число строку, содержащую буквенные символы, вызывает ошибку. Преобразования данных, вычисления выражений и назначения результатов выражений переменным, свойствам и столбцам данных могут завершиться неудачей вследствие неверного приведения типа или несовместимости типов данных. Дополнительные сведения см. в разделах Приведение (выражение служб SSIS), Типы данных в выражениях служб Integration Services и Типы данных служб Integration Services.

Усечения. Усечение менее серьезно, чем ошибка. Усечение формирует результаты, которые могут использоваться или даже быть желательными. Можно выбрать, интерпретировать усечения как ошибки или как приемлемые состояния. Например, при вставке 15-символьной строки в столбец шириной всего в один символ можно выбрать усечение строки.

Выбор параметра обработки ошибок

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

Параметр Описание
Компонент, завершившийся сбоем Задача потока данных заканчивается сбоем, если возникли ошибка или усечение. Неудача является параметром по умолчанию для ошибки и усечения.
Пропуск неудачи Ошибка или усечение пропускаются, и строка данных направляется на выход преобразования или источника.
Перенаправление строки Ошибка или строка данных усечения направляется на выход ошибок источника, преобразования или назначения.

Получение дополнительных сведений об ошибке

В дополнение к столбцам данных выход ошибок включает в себя столбцы ErrorCode и ErrorColumn . Столбец ErrorCode идентифицирует ошибку, а столбец ErrorColumn содержит идентификатор журнала обращений и преобразований столбца с ошибкой.

В некоторых случаях значение столбца ErrorColumn устанавливается в ноль. Это происходит, если условие ошибки влияет на целую строку, а не один столбец. Например, если преобразование «Уточняющий запрос» завершилось неудачно.

Эти два числовые значения могут быть малополезны без соответствующего описания ошибки и имени столбца. Ниже приведены несколько способов, как получить описание ошибки и имя столбца.

  • Чтобы просматривать описания ошибок и имена столбцов, можно подключить к выводу ошибок средство просмотра данных. В конструкторе служб SSIS щелкните правой кнопкой мыши красную стрелку для вывода ошибок и выберите Включить средство просмотра данных.

  • Вы можете найти имена столбцов, включив ведение журнала и выбрав событие DiagnosticEx . Это событие записывает карту столбцов потока данных в журнал. Затем можно найти имя столбца по его идентификатору в карте столбцов. Обратите внимание, что событие DiagnosticEx не сохраняет пробелы в выводе XML, чтобы уменьшить размер журнала. Для улучшения удобочитаемости скопируйте журнал (например, в решении Visual Studio) в редактор XML, поддерживающий форматирование XML и выделение синтаксиса. Дополнительные сведения о ведении журналов см. в разделе Ведение журналов Integration Services (SSIS).

    Ниже приведен пример карты столбцов потока данных.

    
    \<DTS:PipelineColumnMap xmlns:DTS="www.microsoft.com/SqlServer/Dts">  
        \<DTS:Pipeline DTS:Path="\Package\Data Flow Task">  
            \<DTS:Column DTS:ID="11" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="12" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Product]"/>  
            \<DTS:Column DTS:ID="13" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Price]"/>  
            \<DTS:Column DTS:ID="14" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Timestamp]"/>  
            \<DTS:Column DTS:ID="20" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="21" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Product]"/>  
            \<DTS:Column DTS:ID="22" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Price]"/>  
            \<DTS:Column DTS:ID="23" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Timestamp]"/>  
            \<DTS:Column DTS:ID="24" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorCode]"/>  
            \<DTS:Column DTS:ID="25" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorColumn]"/>  
            \<DTS:Column DTS:ID="31" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Customer]"/>  
            \<DTS:Column DTS:ID="32" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Product]"/>  
            \<DTS:Column DTS:ID="33" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Price]"/>  
            \<DTS:Column DTS:ID="34" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Timestamp]"/>  
        \</DTS:Pipeline>  
    \</DTS:PipelineColumnMap>  
    
    
  • Можно также использовать компонент сценария, чтобы включить описание ошибки и имя столбца в дополнительные столбцы вывода ошибок. Например, см. раздел Расширение вывода ошибок с помощью компонента скрипта.

    • Чтобы включить описание ошибки в дополнительный столбец, используйте одну строку скрипта для вызова метода GetErrorDescription интерфейса IDTSComponentMetaData100 .

    • Включите имя столбца в дополнительный столбец, используя одну строку скрипта для вызова метода [Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100.GetIdentificationStringByID*] (/previous-versions/sql/sql-server-2016/mt657629(v=sql.130)) интерфейса IDTSComponentMetaData100.

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

См. также:

Поток данных
Преобразование данных с помощью преобразований
Соединение компонентов с путями
Задача потока данных
Поток данных