您的位置:首页 > 数据库

SQL Server Integration Services教程2: 添加循环

2008-11-25 09:51 239 查看
在教程1:创建简单 ETL 包中,创建了从单个平面文件源提取数据的包,然后使用查找转换功能对数据进行了转换,最后将数据加载到 AdventureWorksDW 示例数据库的 FactCurrency 事实数据表中。
但是,提取、转换和加载 (ETL) 过程很少使用单个平面文件。典型的 ETL 过程从多个平面文件源提取数据。从多个源提取数据需要采用迭代控制流。Microsoft SQL Server 2005 Integration Services (SSIS) 的一项最有可能出现的功能是您将很容易向包中添加迭代或循环。
Integration Services 为循环遍历包提供了两种容器类型:Foreach 循环容器和 For 循环容器。Foreach 循环容器使用枚举器执行循环,而 For 循环则通常使用变量表达式。本教程使用 Foreach 循环容器。
Foreach 循环容器使包能够对指定枚举器的每个成员重复执行控制流。使用 Foreach 循环容器,可以枚举:
• ADO 记录集行和架构信息
• 文件和目录结构
• 系统、包和用户变量
• SQL 管理对象 (SMO)
在本教程中,您将修改在教程1中创建的简单 ETL 包,以便利用 Foreach 循环容器。还将设置用户定义的包变量,以便使该教程包能够迭代遍历文件夹中的所有平面文件。
复制 Lesson 1 包
在此任务中,将创建 SSIS Tutorial 项目中包含的 Lesson 1.dtsx 包的副本。您将使用这一新副本来完成教程2剩余部分。
创建 Lesson 2 包
1. 如果 Business Intelligence Development Studio 尚未打开,请单击“开始”,指向“所有程序”,指向 Microsoft SQL Server 2005,再单击 Business Intelligence Development Studio。
2. 在“文件”菜单上,依次单击“打开”、“项目/解决方案”、SSIS Tutorial 文件夹,然后再次单击“打开”,最后双击 SSIS Tutorial.sln。
3. 在解决方案资源管理器中,右键单击 Lesson 1.dtsx,再单击“复制”。
4. 在解决方案资源管理器中,右键单击“SSIS 包”,再单击“粘贴”。
默认情况下,复制的包将命名为 Lesson 2.dtsx。
5. 在解决方案资源管理器中,双击 Lesson 2.dtsx 打开该包。
添加和配置 Foreach 循环容器
在本任务中,您将添加循环访问平面文件的文件夹的功能,并将教程1中使用的同一数据流转换应用于其中的每个平面文件。实现方法是将 Foreach 循环容器添加到控制流中并进行配置。
所添加的 Foreach 循环容器必须能够连接到该文件夹中的每个平面文件。由于该文件夹中的所有文件都具有相同格式,因此 Foreach 循环容器可以使用同一平面文件连接管理器来连接其中的每个文件。该容器所使用的平面文件连接管理器与您在教程1中创建的平面文件连接管理器相同。
目前,教程1中的平面文件连接管理器只连接一个特定的平面文件。若要循环地连接该文件夹中的每个平面文件,必须同时对 Foreach 循环容器和平面文件连接管理器进行如下配置:
• Foreach 循环容器 将该容器的枚举值映射为用户定义的包变量。然后,该容器将使用此用户定义变量来动态修改平面文件连接管理器的 ConnectionString 属性,并循环连接该文件夹中的每个平面文件。
• 平面文件连接管理器 使用用户定义的变量填充在教程1中创建的连接管理器的 ConnectionString 属性,以修改该连接管理器。
本任务中的过程向您显示如何创建和修改 Foreach 循环容器以使用用户定义的包变量,以及如何将数据流任务添加到该循环中。您将学习如何修改平面文件连接管理器,以便在下一任务中使用用户定义的变量。
在对该包进行这些修改后,当该包运行时,Foreach 循环容器将循环访问示例数据文件夹中的文件集合。每次找到一个与条件相匹配的文件时,Foreach 循环容器就会将用该文件名填充用户定义的变量,将用户定义的变量映射到 SampleCurrencyData 平面文件连接管理器的 ConnectionString 属性,然后对该文件运行数据流。因此,在 Foreach 循环的每次迭代中,数据流任务都将使用一个不同的平面文件。
注意:

由于 Microsoft SQL Server 2005 Integration Services (SSIS) 区分控制流和数据流,因此添加到控制流的任何循环都不需要对数据流进行修改。因此,无需更改在教程1中创建的数据流。
添加 Foreach 循环容器
1. 在 Business Intelligence Development Studio 中,单击“控制流”选项卡。
2. 在“工具箱”中,展开“控制流项”,然后将“Foreach 循环容器”拖到“控制流”选项卡的设计图面上。
3. 右键单击新添加的“Foreach 循环容器”,并选择“编辑”。
4. 在“Foreach 循环编辑器”对话框的“常规”页上,为“名称”输入 Foreach File in Folder。
为 Foreach 循环容器配置枚举器
1. 单击“集合”。
2. 在“集合”页上,选择“Foreach 文件枚举器”。
3. 在“枚举器配置”组中,单击“浏览”。
4. 在“浏览文件夹”对话框中,找到包含教程示例数据的示例数据文件夹。
默认情况下,教程示例数据安装在 c:/Program Files/Microsoft SQL Server/90/Samples/Integration Services/Tutorial/Creating a Simple ETL Package/Sample Data 文件夹中。
5. 在“文件”框中,键入 Currency_*.txt。
将枚举器映射为用户定义的变量
1. 单击“变量映射”。
2. 在“变量映射”页的“变量”列中,单击空单元格并选择“<新建变量…>”。
3. 在“添加变量”对话框中,为“名称”键入 varFileName。
4. 单击“确定”。
5. 再次单击“确定”,退出“Foreach 循环编辑器”对话框。
将数据流任务添加到循环中
• 将“提取示例货币”数据流任务拖到现已重命名为 Foreach File in Folder 的 Foreach 循环容器中。
修改平面文件连接管理器
在本任务中,您将修改在教程1中创建和配置的平面文件连接管理器。平面文件连接管理器在最初创建时配置为静态加载单个文件。若要启用平面文件连接管理器以重复加载文件,您必须修改连接管理器的 ConnectionString 属性以接受用户定义的变量 User:varFileName,该变量包含要在运行时加载的文件的路径。
通过将连接管理器修改为使用用户定义的变量 User::varFileName 的值并填充连接管理器的 ConnectionString 属性,连接管理器将能够连接到不同的平面文件。在运行时,Foreach 循环容器的每次迭代都将动态更新 User::varFileName 变量。更新变量时,还会使连接管理器连接到不同的平面文件,并使数据流任务处理其他数据集。
配置平面文件连接管理器以使用连接字符串的变量
1. 在“连接管理器”窗格中,单击 SampleCurrencyData。
2. 在“属性”窗口中,针对“表达式”,单击空单元,然后单击省略号按钮“(…)”。
3. 在“属性表达式编辑器”对话框的“属性”列中,键入或选择 ConnectionString。
4. 在“表达式”列中,单击省略号按钮“(…)”以打开“表达式生成器”对话框。
5. 在“表达式生成器”对话框中,展开“变量”节点。
6. 将变量 User::varFileName 拖到“表达式”框中。
7. 单击“确定”关闭“表达式生成器”对话框。
8. 再次单击“确定”关闭“属性表达式编辑器”对话框。
测试 Lesson 2 教程包
使用现在配置的 Foreach 循环容器和平面文件连接管理器,Lesson 2 包可以迭代遍历示例数据文件夹中由 14 个平面文件组成的集合。每次找到与指定的文件名条件匹配的文件名时,Foreach 循环容器都将用该文件名填充用户定义的变量。该变量又会更新平面文件连接管理器的 ConnectionString 属性,并与新平面文件建立连接。然后,在连接到文件夹中的下一个文件之前,Foreach 循环容器将对新平面文件中的数据运行未修改的数据流任务。
使用以下过程可以测试已添加到包中的新循环功能。
测试 Lesson 2 教程包
1. 在“调试”菜单上,单击“启动调试”。
包将运行。可以在“输出”窗口中或单击“进度”选项卡来验证每个循环的状态。例如,可以看到 1097 行从文件 Currency_VEB.txt 添加到目标表中。
2. 当包运行完毕后,在“调试”菜单上,单击“停止调试”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: