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

Область применения:SQL Server среда выполнения интеграции SSIS в Фабрика данных Azure

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметры

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

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

Ошибка
Если это применимо, укажите, что должно происходить при возникновении ошибки: игнорировать сбой, перенаправить строку или завершить работу компонента с ошибкой.

Связанные разделы:обработка ошибок в данных

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

Связанные разделы:обработка ошибок в данных

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Вы можете увидеть как описания ошибок, так и имена столбцов, подключив к выводу ошибок средство просмотра данных. В конструкторе 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.

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