在 SSIS 2008 中使用条件拆分数据传输






4.56/5 (9投票s)
本文介绍了 SQL Server 2008 Integration Services 条件拆分数据流转换元素以将数据从一组平面文件传输到 SQL Server 数据库表的基本概念……
1. 引言
本文使用 Integration Services 条件拆分数据转换元素来过滤并将数据从一组平面文本文件传输到 SQL Server 数据库表。此概念可以轻松扩展到应用于 Microsoft Excel 等任何其他源或目标。此场景对于在报告和分析环境中创建反规范化数据库表非常有用。
2. 数据加载任务
在开始编写任何 ETL(提取、转换和加载)任务之前,我们应首先概述包中涉及的任务和子任务。在此简单教程中,我们计划编写一个执行以下操作的 ETL 包:- 从一个文件夹中读取一组文本文件,每个文件都具有通用格式
- 将文件中的记录分成两组
- 将每个组加载到指定的目标表
在本教程中,我们有一组文件,其中包含花卉名称及其类型,即一年生或多年生。这些文件来自不同来源,但格式相同,包含标题行和数据行。数据元素是逗号分隔值。随附的压缩文件包含一个顶级文件夹*SSISSolution*。该文件夹有两个子文件夹,即包含两个示例数据文本文件的*DataFiles*文件夹和*SSISConditionalSplit* Visual Studio 2008 解决方案文件夹。当您在本地计算机上解压缩文件夹时,可以使用 Visual Studio 2008 打开解决方案。但是,您需要根据您的 SQL Server 2008 安装更新包的所有连接信息。
3. 项目设置
打开 Visual Studio 2008 IDE,然后设置一个 SSIS 项目,如下图所示。命名解决方案后,单击“确定”创建项目。默认情况下,包将命名为*Package.dtsx*。您可以根据需要重命名该包。

4. 在控制流面板上添加 Foreach 循环容器
从 IDE 左侧面板的工具箱中,选择一个 Foreach 循环容器控件流元素并将其拖到控制流设计图面上。将该元素重命名为有意义的名称,例如“Loop Over Nursery Flower Source”。在设计图面上选中该控件时,双击它以打开其属性对话框。对话框如下图所示。

接下来,创建一个变量来保存 Foreach 循环容器中迭代的文件名。选择循环容器属性对话框上的“变量映射”,然后从下拉组合框中选择“新建变量”项,如下图所示。

现在,在下图所示的新变量对话框中,将变量容器范围指定为“包”,将变量命名为vSourceFile
,命名空间为User
,类型为String
,然后单击两个对话框上的“确定”返回到控制流图面。

5. 创建平面文件源连接管理器
在此示例中,我们的数据源是文件夹中的一组文本文件,目标是 SQL Server 2008 表。右键单击 IDE 上的连接管理器窗格,然后选择“新建平面文件连接…”。平面文件连接管理器对话框将打开,如下图所示。

按所示指定条目。
- 连接管理器名称
- 文件名
- 标题行分隔符为逗号{,}
- 勾选使用第一行的列名复选框
其他所有条目都可以保留为默认值。请注意,即使连接将在循环容器内执行以在每次循环中使用不同的文件,您仍然可以指定一个文件。如下面的说明所示,您需要配置平面文件连接管理器的表达式以指向我们已经创建的 Foreach 容器循环变量。
现在,您需要为平面文件连接管理器的连接字符串创建一个表达式,以指向 Foreach 循环容器的文件变量。选择您刚刚创建的平面文件连接管理器,然后转到解决方案资源管理器中的属性窗格,单击属性树视图中表达式条目旁边的“...”按钮。这将打开属性表达式编辑器对话框,如下图所示。在左侧组合框中选择“连接字符串”条目。

现在,单击下图所示的表达式生成器对话框的“...”按钮。选择文件变量并按对话框所示指定表达式,然后单击“确定”关闭对话框。这将把变量绑定到连接管理器。

6. 创建 SQL Server 数据库目标连接管理器
右键单击连接管理器窗格,然后选择“新建 ADO.Net 连接”条目。在打开的对话框中,单击“新建…”按钮打开连接管理器对话框,并按下图所示的对话框进行选择。请注意,您指定的服务器名称和连接类型取决于您在本地计算机上设置的 SQL Server 2008。

7. 向 Foreach 循环容器添加数据流任务
将数据流任务从控制流项窗格拖到 Foreach 循环容器的图面上。请注意,此数据流任务是一个控制流元素,它将控制数据流面板上配置的数据流任务的执行。您也可以将数据流任务重命名为有意义的名称,例如“Split Text Data”。包含连接管理器的控制流图面应如下图所示。

8. 配置数据流
现在,双击循环容器上的数据流任务。这将选择设计器上的“数据流”选项卡面板,并在设计器左侧的工具箱窗格中显示“数据流源”、“数据流转换”和“数据流目标”。将平面文件源项从工具箱拖到数据流图面上。双击平面文件源以打开属性对话框。在对话框的组合框中选择本教程中创建的平面文件连接管理器。
现在,将条件拆分元素从数据流转换面板拖到数据流图面上,并通过将绿色箭头从平面文件源拖到条件拆分来连接平面文件源与条件拆分。双击条件拆分元素以打开对话框,如下图所示。

在此编辑器中,您将创建用于将数据拆分到源的条件。由于条件拆分链接到具有平面文件源连接的源,因此您可以根据数据创建条件。我们将创建以下两个条件。我们可以指定多个条件这一事实是 SSIS 强大且计算能力强大的可视化功能。这在报告和分析场景中非常有用。
- 选取所有多年生花卉
- 选取所有一年生花卉
在上面显示的对话框中,展开列名节点,将PlantType
列拖到下方的表行中,并按对话框所示命名条件和输出名称。这完成了条件拆分的规范。接下来,我们将为两个已过滤的数据集添加目标。
将两个 ADO NET 目标拖到数据流面板。将目标重命名为有意义的名称。将绿色输出箭头从条件拆分拖到目标。当您将绿色箭头拖到目标时,将出现以下对话框,要求您为目标指定筛选条件。对话框如下图所示。

选择您之前指定的条件,然后单击“确定”。现在,您需要选择目标表。双击目标对话框以打开编辑器。从下拉列表中选择 ADO NET 连接管理器,并按如下图所示选择目标表。可选地,您可以转到编辑器中的映射窗格,设置已过滤源列与目标表列之间的映射。您可以通过将源列拖到编辑器对话框下方面板中的映射表来执行此操作。此目标对话框编辑器的两个视图均显示在下图所示的图形中。

数据流面板的最终布局应与下图所示的布局相似。

现在,您可以在 Visual Studio 环境中运行包,并验证两个目标表是否已填充了已过滤的记录集。
9. 结论与讨论
这个简单的教程演示了 SSIS 中条件拆分转换的用法。通过修改连接和拆分条件,该示例可以扩展到任何源和目标。SQL Server 2008 的此功能提供了一个强大的机制,可以为报告、分析和数据仓库场景可视化地设计 ETL 包,而无需编写一行代码。
在 CodeProject 本栏的后续文章中,我将介绍其他高级 SSIS 数据转换工具及其用法。