SSIS教程SQlServer2008R2 (5) 添加错误流重定向
第 5 课:添加错误流重定向
SQL Server 2008 R2
为了处理在转换过程中可 能发生的错误,MicrosoftIntegration Services 使您能够基于每个组件和每个列来决定如何处理无法转换的数据。可以选择忽略某些列中的失败、重定向整个失败的行或者只是使组件失败。默认情况下,Integration Services 中的所有组件被配置为在发生错误时失败。而使组件失败又会导致包失败,并使所有后续处理停止。
如 果不让失败导致包停止执行,一个好方法是通过配置使在转换中发生潜在处理错误时这些错误能够得到处理。虽然可能选择忽略失败以确保包成功运行,但通常更好 的做法是将失败的行重定向到另一个处理路径,在这里可以使数据和错误持久化、接受检查并在随后的某个时间对其进行重新处理。
在本课中,将创建在第4课:添加日志记录中开发的包的副本。使用这个新包时,将创建一个示例数据文件的损坏版本。损坏的文件将在运行包时强制发生处理错误。
为了处理错误数据,您将添加并配置一个平面文件目标,它会将所有无法在 Lookup Currency Key 转换中找到查找值的行写入文件。
将错误数据写入文件之前,需要包括一个使用脚本获取错误说明的脚本组件。然后,将重新配置 Lookup CurrencyKey 转换,以便将所有无法处理的数据重定向到脚本转换中。
重要提示 |
本教程需要 AdventureWorksDW 示例数据库。有关如何安装和部署 AdventureWorksDW 的详细信息,请参阅安装 SQL Server 示例和示例数据库的注意事项。 |
本课程包含以下任务:
任务 1:复制 Lesson 4 包
SQL Server 2008 R2
此主题尚未评级评价此主题
在本任务中,您将为在第 4 课中创建的 Lesson 4.dtsx 包创建一个副本。或者,如果未完成第 4 课,则可以向项目添加本教程中附带的已完成的第 4 课包,然后再对其进行复制以供使用。您将使用这一新副本来完成第 5 课剩余部分。
创建第 5 课包
1. 如果 Business IntelligenceDevelopment Studio 尚未打开,请单击“开始”,依次指向“所有程序”和 Microsoft SQLServer,再单击 BusinessIntelligence Development Studio。
2. 在“文件”菜单中,单击“打开”,单击“项目/解决方案”,选择 SSIS Tutorial,再单击“打开”,然后双击 SSISTutorial.sln。
3. 在解决方案资源管理器中,右键单击 Lesson 4.dtsx,再单击“复制”。
4. 在解决方案资源管理器中,右键单击“SSIS 包”,再单击“粘贴”。
默认情况下,复制的包命名为 Lesson 5.dtsx。
5. 在解决方案资源管理器中,双击 Lesson 5.dtsx 打开该包。
6. 右键单击“控制流”选项卡背景的任意位置,再单击“属性”。
7. 在“属性”窗口中,将Name 属性更新为第 5 课。
8. 单击 ID 属性框,然后在列表中,单击“<生成新 ID>”。
添加已完成的第 4 课包
1. 依次打开 Business IntelligenceDevelopment Studio 和 SSIS Tutorial 项目。
2. 在解决方案资源管理器中,右键单击“SSIS 包”,再单击“添加现有包”。
3. 在“添加现有包的副本”对话框的“包位置”中,选择“文件系统”。
4. 单击浏览 (…) 按钮,导航到 C:\Program Files\Microsoft SQLServer\100\Samples\Integration Services\Tutorial\Creating a Simple ETLPackage\Completed Packages,选择 Lesson 4.dtsx,再单击“打开”。
5. 按先前过程中步骤 3 到步骤 8 所述,复制并粘贴第 4 课包。
任务 2:创建损坏的文件
SQL Server 2008 R2
此主题尚未评级评价此主题
为阐释如何配置和处理转换错误,必须创建示例平面文件,处理该文件时将导致组件失败。
在本任务中,将创建现有示例平面文件的一个副本。然后,用记事本打开该文件,编辑 CurrencyID 列,以确保该列在转换查找期间无法生成匹配项。处理新文件时,查找失败将导致Currency Key 查找转换失败,因此,包的剩余部分将失败。创建了损坏的示例文件后,将运行包以查看包失败的情况。
创建损坏的示例平面文件
1. 在记事本或其他文本编辑器中,打开Currency_VEB.txt 文件。
默 认情况下,Currency_VEB.txt 文件安装在以下文件夹中:c:\Program Files\Microsoft SQL Server\100\Samples\IntegrationServices\Tutorial\Creating a Simple ETL Package\Sample Data。
2. 使用文本编辑器的查找和替换功能,查找 VEB 的所有实例,并替换为 BAD。
3. 在包含其他示例数据文件的同一文件夹中,将修改后的文件另存为 Currency_BAD.txt。
重要提示 |
请确保将 Currency_BAD.txt 保存到 c:\Program Files\Microsoft SQL Server\100\Samples\Integration Services\Tutorial\Creating a Simple ETL Package\Sample Data 文件夹中。 |
4. 关闭文本编辑器。
验证是否将在运行时发生错误
1. 在“调试”菜单中,单击“启动调试”。
在数据流第三次迭代时,Lookup Currency Key 转换将尝试处理 Currency_BAD.txt 文件,并且该转换将失败。转换失败将导致整个包失败。
2. 在“调试”菜单中,单击“停止调试”。
3. 在设计图面上,单击“执行结果”选项卡。
4. 浏览日志,确认是否发生了以下未处理的错误:
[LookupCurrency Key[30]] Error: Row yielded no match during lookup.
注意 |
数字 30 为组件的 ID。该值在生成数据流时进行分配,可能与包中的值不同。 |
任务 3:添加错误流重定向
SQL Server 2008 R2
此主题尚未评级评价此主题
如上一个任务中所示,当 Lookup Currency Key 转换尝试对产生错误的已损坏示例平面文件进行处理时,该转换无法生成匹配。由于转换针对错误输出使用了默认设置,因此,任何错误都将导致该转换失败。当转换失败时,该包的其余部分也将失败。
可以使用错误输出将组件配置为将失败的行重定向到其他处理路径,而不是允许转换失败。使用单独的错误处理路径,您可以执行多项任务。例如,您可能要尝试清除该数据,然后重新处理失败的行。或者,您可能要将失败的行与其他错误信息保存在一起,以便以后进行验证和重新处理。
在本任务中,您将 Lookup Currency Key 转换配置为将所有失败的行重定向到错误输出。在数据流的错误分支中,这些行将被写入文件中。
默认情况下,Integration Services 错误输出中的另外两列(ErrorCode 和 ErrorColumn)只包含表示错误号的数值代码以及出现错误的列的 ID。这些数值的使用具有限制性,而且没有相应的错误说明。
若要更有效地使用错误输出,请在包将失败的行写入文件之前,使用脚本组件来访问 Integration ServicesAPI,然后获取错误说明。
配置错误输出
1. 在“工具箱”中,展开“数据流转换”,然后将“脚本组件”拖动到“数据流”选项卡上的设计图面。将“脚本”放置在 LookupCurrency Key 转换的右侧。
2. 在“选择脚本组件类型”对话框中,单击“转换”,再单击“确定”。
3. 单击 LookupCurrency Key 转换,并将红色箭头拖动到新添加的“脚本”转换中,以连接这两个组件。
红色箭头表示 LookupCurrency Key 转换的错误输出。通过使用红色箭头将转换连接到脚本组件,您可以将所有处理错误重定向到脚本组件,然后,该组件会处理这些错误并将它们发送到目标。
4. 在“配置错误输出”对话框的“错误”列中,选择“重定向行”,再单击“确定”。
5. 在“数据流”设计图面上,在新添加的“脚本组件”中单击“脚本组件”,再将该名称更改为 GetError Description。
6. 双击 Get ErrorDescription 转换。
7. 在“脚本转换编辑器”对话框中的“输入列”页中,选择 ErrorCode 列。
8. 在“输入和输出”页中,展开“输出 0”,单击“输出列”,再单击“添加列”。
9. 在 Name 属性中,键入 ErrorDescription 并将 DataType 属性设置为 string [DT_WSTR]。
10.在“脚本”页中,确保已将 LocaleID 属性设置为“英语(美国)”。
11.单击“编辑脚本”以打开MicrosoftVisual Studio Tools for Applications (VSTA)。在 Input0_ProcessInputRow 方法中,键入或粘贴以下代码。
[Visual Basic]
Row.ErrorDescription =
Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)
[Visual C#]
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
已完成的子例程如以下代码所示。
[Visual Basic]
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Row.ErrorDescription =
Me.ComponentMetaData.GetErrorDescription(Row.ErrorCode)
End Sub
[Visual C#]
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);
}
12.生成脚本以保存所做的更改,然后关闭 VSTA。
13.单击“确定”以关闭“脚本转换编辑器”对话框。
任务 4:添加平面文件目标
SQL Server 2008 R2
此主题尚未评级评价此主题
Lookup Currency Key 转换的错误输出将无法执行查找操作的所有数据行重定向到脚本转换。为了突显相关错误的信息,脚本转换将运行可获取错误说明的脚本。
在 本任务中,请将有关失败行的所有这些信息保存到分隔的文件中,以便进行后续处理。若要保存失败的行,必须为将包含错误数据和平面文件目标的文本文件添加并 配置平面文件连接管理器。通过设置平面文件目标所用的平面文件连接管理器的属性,可以指定平面文件目标如何格式化和写入文本文件。有关详细信息,请参阅平面文件连接管理器和平面文件目标。
添加并配置平面文件目标
1. 单击“数据流”选项卡。
2. 在工具箱中,展开“数据流目标”,然后将“平面文件目标”拖动到数据流设计图面上。将“平面文件目标”直接放在“获取错误说明”转换的下面。
3. 单击“获取错误说明”转换,然后将绿色箭头拖动到新的“平面文件目标”上。
4. 在“数据流”设计图面上,在新添加的“平面文件目标”转换中单击“平面文件目标”,然后将该名称更改为 FailedRows。
5. 右键单击 FailedRows 转换,再单击“编辑”,然后在平面文件目标编辑器中单击“新建”。
6. 在“平面文件格式”对话框中,确认已选中“带分隔符”,然后单击“确定”。
7. 在平面文件连接管理器编辑器的“连接管理器名称”框中,键入Error Data。
8. 在“平面文件连接管理器编辑器”对话框中,单击“浏览”,然后找到存储文件的文件夹。
9. 在“打开”对话框中,对于“文件名”键入 ErrorOutput.txt,然后单击“打开”。
10.在“平面文件连接管理器编辑器”对话框中,验证“区域设置”框是否包含“英语(美国)”,“代码页”是否包含 1252 (ANSI -Latin I)。
11.在“选项”窗格中,单击“列”。
注意,除了源数据文件中的列以外,还存在三个新列:ErrorCode、ErrorColumn 和 ErrorDescription。这三列由 Lookup Currency Key 转换的错误输出和获取错误说明转换中的脚本生成,可用于排查失败行的原因。
12.单击“确定”。
13.在平面文件目标编辑器中,清除“覆盖文件中的数据”复选框。
清除该复选框可使错误在执行多个包的过程中持续存在。
14.在平面文件目标编辑器中,单击“映射”来验证所有列是否正确。您也可以选择重命名目标中的列。
15.单击“确定”。
任务 5:测试 Lesson 5 教程包
SQL Server 2008 R2
此主题尚未评级评价此主题
在运行时,损坏的文件 Currency_BAD.txt 将无法在Currency Key 查找转换中生成匹配。由于 Currency Key 查找的错误输出现在已配置为将失败的行重定向到新的失败的行目标,因此该组件不会失败,并且包会成功地运行。所有失败的错误行都将写入 ErrorOutput.txt。
在此任务中,您将通过运行该包对已修改的错误输出配置进行测试。包成功执行后,您将查看 ErrorOutput.txt 文件的内容。
注意 |
如果不需要在 ErrorOutput.txt 文件中积累错误行,则应在包的运行间隔手动删除文件内容。 |
测试包之前,应当确保第 5 课包中的控制流和数据流包含下列关系图中显示的对象。控制流应与第 2 到第 4 课中的控制流相同。
控制流
数据流
运行第 5 课教程包
1. 在“调试”菜单中,单击“启动调试”。
2. 当包运行完毕后,在“调试”菜单中,单击“停止调试”。
验证 ErrorOutput.txt 文件的内容
· 在 记事本或任何其他文本编辑器中,打开ErrorOutput.txt 文件。默认的列顺序为:AverageRate、CurrencyID、CurrencyDate、EndOfDateRate、ErrorCode、 ErrorColumn、ErrorDescription。
请注意,文件中的所有行都包含不匹配的 CurrencyID 值 BAD、ErrorCode 值-1071607778、ErrorColumn 值 0 以及 ErrorDescription 值“在查找期间行没有生成任何匹配项”。由于此错误并不是列所特有的,所以 ErrorColumn 的值设置为 0。它是已失败的查找操作。.