Имя столбца и описание ошибки в потоке ошибок SSIS

К большому сожалению в SSIS, по крайней мере 2008 R2, при направлении строки, содержащей ошибку в поток ошибок, из дополнительной информации, позволяющей локализовать проблемную ячейку, разработчику предоставляется только ID ошибки и ID ячейки.
Естественно в реальных логах от этой информации мало проку, ведь в базу желательно положить вменяемое описание ошибки, имя столбца, а также проблемное значение. На мой взгляд, бессмысленно создавать отдельную таблицу с набором столбцов для каждого отдельно взятого пакета.
В идеале, таблица для хранения вывода потока ошибок должна иметь следующий вид:
[Error ID] – идентификатор ошибки;
[Error Description] – описание ошибки;
[Error Column ID] – идентификатор столбца;
[Error Column Name] – имя столбца;
[Error Column Type] – тип данных;
[Error Column Length] – максимальный размер данных в ячейке;
[Error Task Name] – задание, с которого был перенаправлен ряд с ошибкой;
[Error Package Name] – имя пакета;
[Error Value] – значение ячейки, вызвавшей ошибку;
[Record TimeStamp] – время события.

Проблема с получением ID ошибки решается довольно просто при помощи Script Task’а и нескольких строк кода:

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
     Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
    }

C получением имени столбца дела обстоят несколько сложнее. Дело в том, что на уровне пакета SSIS идентификатором столбца является не имя, а Lineage ID, который уникален для каждого входящего и исходящего потока данных для каждого компонента в пакете SSIS.

Таким образом для того, чтобы получить имя столбца имея его Lineage ID, необходимо иметь таблицу соответствий айдишников и названий столбцов.

В своем блоге, посвященном SSIS, Бенни Остин предлагает использовать свободно распространяемую утилиту Dataflow Discover (DFLD), которая позволяет извлечь эту и другую полезную информацию из тела SSIS пакета и положить ее в таблицу в базе, которая в дальнейшем может быть использована для получения соответствий.

Очевидно, что главная проблема описанного метода – необходимость обновлять информацию в базе каждый раз при изменении потока данных в пакете SSIS.

Более правильный и изящный подход предполагает получение словаря соответствий динамически с помощью Script Task’а, о чем можно почитать здесь:
How To Find Out Which Column Caused SSIS To Fail
или здесь:
Retrieving SSIS Error Column Names

Либо можно использовать отдельный компонент SSIS, который сделает всю работу. На CodePlex мне удалось найти два компонента: eLog, который судя по описанию, делает все что нужно, но к сожалению для него отсутствуют не только исходный код, но и скомпилированная библиотечка (в своем блоге автор написал, что код используется в одном из сторонних коммерческих компонентов); и Error Output’s Description (EOD).

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

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

Для примера, вывод модифицированного EOD компонента выглядит вот так:

DataFlow компонент Error Output’s Description Mod можно скачать отсюда: ErrorOutputDescriptionMod.zip
Библиотека тестировалась только в SSIS 2008!!!

Отдельно хочу обратить внимание на то, что компоненты назначения (dataflow destination) не возвращают ID ошибки и ID столбца, поэтому для них описанные выше подходы и компонент не работают.

Запись опубликована в рубрике Business Intelligence с метками , . Добавьте в закладки постоянную ссылку.

3 Responses to Имя столбца и описание ошибки в потоке ошибок SSIS

  1. visit here пишет:

    Hello outstanding website! Does running a blog such as this require a lot of work? I’ve no knowledge of computer programming but I was hoping to start my own blog in the near future. Anyways, if you have any ideas or tips for new blog owners please share. I know this is off subject but I just wanted to ask. Thanks!|

  2. Mobile пишет:

    Wonda Mobile

Добавить комментарий для visit here Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *