且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Data Flow的错误输出

更新时间:2022-08-12 17:08:42

一,在Data Flow Task中,对于Error Row的处理通过Error Output Tab配置的。

Data Flow的错误输出

 

1,操作失败的类型:Error(Conversion) 和 Truncation。

2,错误处理方式:Fail Component,Ignore Failure 和 Redirect Row

3,Error Output增加两个跟Error相关的Column:ErrorCode 和 ErrorColumn,这两个Column的数据类型是DT_4

二,错误处理方式

Fail Component:当某一列选择了Fail Component,并且产生了错误时,数据流将停止并失败,同时触发任何针对Data Flow Task的OnError Event。

Redirect Row:当任何被标记为Redirect Row的column 中任何一行产生错误,整个行将被发送到红色的错误path输出,但数据流不会失败。如果没有使用红色的Error Path输出,那么,该行将会从数据流中抛弃。

Ignore Failure:忽略错误。如果错误发生在源或转换中,那么错误列的值会被设置为NULL;如果是截断错误,那么只会向下游发送部分截断后的值;当错误发生在目的组件上,Ignore Failure的处理方式将会导致目的组件忽略整个行。

 

这三种处理错误的方式,只有Fail Component 会导致Data Flow 失败,触发OnError Event,并产生错误信息;Redirect Row 和 Ignore Failure 不会导致任何组件失败,因此,SSIS 不会抛出任何错误信息。

三,对Error Row的 Redirect 处理

1,Data Flow Design

Data Flow的错误输出

2,配置Data Conversion 组件的Error Output

在Data Comversion 组件,进行一个转换,将字符串类型转换为int 类型,产生错误

Data Flow的错误输出

配置Error的错误处理方式是 Redirect Row

Data Flow的错误输出

在Advanced Editor中查看组件的Error Output columns:ErrorCode 和 ErrorColumn,这两个Column 都是 DT_I4类型,用于输出ErrorCode 和 发生错误的Column ID。

Data Flow的错误输出

3,存储Error Output

创建临时表,存储Data Conversion的Error Output

Data Flow的错误输出
create table dbo.Test_ErrorOutput
(
    ID int,
    Env nvarchar(11),
    ErrorCode int,
    ErrorColumn int
)
Data Flow的错误输出

将Data Conversion的 红色Path(Error Output Path)链接到Error Output Destination。

Data Flow的错误输出


 

查看 Error Output path的Metadata,共有四个Column,Source的两个(ID和 Env),ErrorCode 和 ErrorColumn,对于转换失败的Column(copy of env),并没有出现在path中。对于转换失败的新增Column,Error Output不会输出给下游组件。

Data Flow的错误输出

4,执行Package,查看执行结果

Data Flow的错误输出

Data Flow的错误输出

 

Redirect Row的错误处理方式不会导致Data Flow Task的失败,不会触发OnError 事件,也不会导致其子组件和整个Package的失败。

结论:Data Flow的错误处理方式,表示组件能够自行处理错误。当设置Failure Component时,表示Data Flow需要触发OnError Event,抛出错误信息;当设置Redirect或者ignore,表示Data Flow 不会触发OnError Event,Data Flow 将按照设定的容错逻辑进行处理。

 

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: SSIS






本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5493973.html,如需转载请自行联系原作者