SQL Server 2008 R2
其他版本
此主题尚未评级评价此主题
在第一课(SSIS教程):创建项目和基本包中,创建了从单个平面文件源提取数据的包,然后使用查找转换功能对数据进行了转换,最后将数据加载到AdventureWorksDW 示例数据库的 FactCurrencyRate 事实数据表中。
但 是,提取、转换和加载 (ETL) 过程很少使用单个平面文件。典型的ETL 过程从多个平面文件源提取数据。从多个源提取数据需要采用迭代控制流。MicrosoftIntegrationServices 最可能出现的功能之一是可以方便快捷地向包中添加迭代或循环。
Integration Services 为循环遍历包提供了两种容器类型:Foreach 循环容器和 For 循环容器。Foreach 循环容器使用枚举器执行循环,而 For 循环则通常使用变量表达式。本课使用 Foreach 循环容器。
Foreach 循环容器使包能够对指定枚举器的每个成员重复执行控制流。使用 Foreach 循环容器,可以枚举:
· ADO 记录集行和架构信息
· 文件和目录结构
· 系统、包和用户变量
· SQL Server 管理对象 (SMO)
在本课中,您将修改在第 1 课中创建的简单 ETL 包,以便利用 Foreach 循环容器。还将设置用户定义的包变量,以便使该教程包能够迭代遍历文件夹中的所有平面文件。如果您尚未完成上一课,则也可以复制本教程中附带的已完成的 Lesson 1 包。
在本课中,将不修改数据流,而只修改控制流。
重要提示 |
本教程需要 AdventureWorksDW 示例数据库。有关如何安装和部署 AdventureWorksDW 的详细信息,请参阅安装 SQL Server 示例和示例数据库的注意事项。 |
任务 1:复制 Lesson 1 包
SQL Server 2008 R2
其他版本
此主题尚未评级评价此主题
在本任务中,为在第 1 课中创建的 Lesson 1.dtsx 包创建一个副本。如果未完成第 1 课的学习,则可以向项目中添加本教程中附带的已完成的 Lesson 1 包,然后再对其进行复制。您将使用这一新副本来完成第 2 课剩余部分。
创建 Lesson 2 包
1. 如果 Business IntelligenceDevelopment Studio 尚未打开,请单击“开始”,依次指向“所有程序”和“Microsoft SQLServer”,再单击“BusinessIntelligence Development Studio”。
2. 在“文件”菜单中,依次单击“打开”、“项目/解决方案”、SSIS Tutorial 文件夹,然后再次单击“打开”,最后双击 SSIS Tutorial.sln。
3. 在解决方案资源管理器中,右键单击 Lesson 1.dtsx,再单击“复制”。
4. 在解决方案资源管理器中,右键单击“SSIS 包”,再单击“粘贴”。
默认情况下,复制的包将命名为 Lesson 2.dtsx。
5. 在解决方案资源管理器中,双击 Lesson 2.dtsx 打开此包。
6. 右键单击“控制流”设计图面背景的任意位置,再单击“属性”。
7. 在“属性”窗口中,将Name 属性更新为Lesson 2。
8. 单击 ID 属性框,然后在列表中,单击“<生成新 ID>”。
添加已完成的 Lesson 1 包
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,选择 Lesson1.dtsx,再单击“打开”。
5. 按先前过程中步骤 3-8 中所述,复制并粘贴 Lesson 1 包。
任务 2:添加并配置 Foreach 循环容器
SQL Server 2008 R2
其他版本
此主题尚未评级评价此主题
在本任务中,您将添加循环访问平面文件的文件夹的功能,并将第 1 课中使用的同一数据流转换应用于其中的每个平面文件。实现方法是将 Foreach 循环容器添加到控制流中并进行配置。
所 添加的 Foreach 循环容器必须能够连接到该文件夹中的每个平面文件。 由于该文件夹中的所有文件都具有相同的格式,因此,Foreach 循环容器可以使用同一平面文件连接管理器来连接其中的每个文件。 该容器所使用的平面文件连接管理器与您在第 1 课中创建的平面文件连接管理器相同。
目前,第 1 课中的平面文件连接管理器只连接一个特定的平面文件。 若要循环地连接该文件夹中的每个平面文件,必须同时对 Foreach 循环容器和平面文件连接管理器进行如下配置:
· Foreach 循环容器将该容器的枚举值映射为用户定义的包变量。 然后,该容器将使用此用户定义变量来动态修改平面文件连接管理器的 ConnectionString 属性,并循环连接该文件夹中的每个平面文件。
· 平面文件连接管理器 使用用户定义的变量填充在第 1 课中创建的连接管理器的 ConnectionString 属性,以修改该连接管理器。
本任务中的过程向您显示如何创建和修改 Foreach 循环容器以使用用户定义的包变量,以及如何将数据流任务添加到该循环中。您将了解改平面文件连接管理器,以便在下一任务中使用用户定义的变量。
在 对该包进行这些修改后,当该包运行时,Foreach 循环容器将循环访问示例数据文件夹中的文件集合。 每次找到一个与条件相匹配的文件时,Foreach 循环容器都会用文件名填充用户定义的变量,将用户定义的变量映射到Sample Currency Data 平面文件连接管理器的 ConnectionString 属性,然后对该文件运行数据流。 因此,在 Foreach 循环的每次迭代中,数据流任务都将使用一个不同的平面文件。
注意 |
由于 MicrosoftIntegration Services 区分控制流和数据流,因此添加到控制流的任何循环都不需要对数据流进行修改。因此,无需更改在第 1 课中创建的数据流。 |
添加 Foreach 循环容器
1. 在 BusinessIntelligence Development Studio 中,单击“控制流”选项卡。
2. 在“工具箱”中,展开“控制流项”,然后将“Foreach 循环容器”拖到“控制流”选项卡的设计图面上。
3. 右键单击新添加的“Foreach循环容器”,并选择“编辑”。
4. 在“Foreach 循环编辑器”对话框的“常规”页中,为“名称”输入 Foreach File inFolder。 单击“确定”。
5. 右键单击“Foreach 循环容器”,再单击“属性”,然后在“属性”窗口,确保已将LocaleID 属性设置为“英语(美国)”。
为 Foreach 循环容器配置枚举器
1. 双击文件夹中的 Foreach 文件以重新打开“Foreach 循环编辑器”。
2. 单击“集合”。
3. 在“集合”页中,选择“Foreach 文件枚举器”。
4. 在“枚举器配置”组中,单击“浏览”。
5. 在“浏览文件夹”对话框中,找到包含教程示例数据的示例数据文件夹。
默 认情况下,教程示例数据安装在以下文件夹中:C:\ProgramFiles\Microsoft SQL Server\100\Samples\Integration Services\Tutorial\Creating aSimple ETL Package\Sample Data。
6. 在“文件”框中,键入 Currency_*.txt。
将枚举器映射为用户定义的变量
1. 单击“变量映射”。
2. 在“变量映射”页的“变量”列中,单击空单元格并选择“<新建变量…>”。
3. 在“添加变量”对话框中,为“名称”键入 varFileName。
重要提示 |
变量名称区分大小写。 |
4. 单击“确定”。
5. 再次单击“确定”,退出“Foreach 循环编辑器”对话框。
将数据流任务添加到循环中
· 将 ExtractSample Currency Data 数据流任务拖动到现已重命名为 Foreach File in Folder 的 Foreach 循环容器中。
任务 3:修改平面文件连接管理器
SQL Server 2008 R2
其他版本
此主题尚未评级评价此主题
在本任务中,您将修改在第 1 课中创建和配置的平面文件连接管理器。平面文件连接管理器在最初创建时配置为静态加载单个文件。若要启用平面文件连接管理器以重复加载文件,您必须修改连接管理器的 ConnectionString 属性以接受用户定义的变量User:varFileName,该变量包含要在运行时加载的文件的路径。
通过将连接管理器修改为使用用户定义的变量 User::varFileName 的值并填充连接管理器的 ConnectionString 属性,连接管理器将能够连接到不同的平面文件。在运行时,Foreach 循环容器的每次迭代都将动态更新 User::varFileName 变量。 更新变量时,还会使连接管理器连接到不同的平面文件,并使数据流任务处理其他数据集。
配置平面文件连接管理器以使用连接字符串的变量
1. 在“连接管理器”窗格中,右键单击 SampleFlat File Source Data,再选择“属性”。
2. 在“属性”窗口中,针对“表达式”,单击空单元,然后单击省略号按钮“(…)”。
3. 在“属性表达式编辑器”对话框的“属性”列中,键入或选择 ConnectionString。
4. 在“表达式”列中,单击省略号按钮“(…)”以打开“表达式生成器”对话框。
5. 在“表达式生成器”对话框中,展开“变量”节点。
6. 将变量 User::varFileName 拖到“表达式”框中。
7. 单击“确定”关闭“表达式生成器”对话框。
8. 再次单击“确定”关闭“属性表达式编辑器”对话框。
任务 4:测试 Lesson 2 教程包
SQL Server 2008 R2
其他版本
此主题尚未评级评价此主题
使用现在配置的 Foreach 循环容器和平面文件连接管理器,Lesson2 包可以迭代遍历示例数据文件夹中由 14 个平面文件组成的集合。 每次找到与指定的文件名条件匹配的文件名时,Foreach 循环容器都将用该文件名填充用户定义的变量。 该变量又会更新平面文件连接管理器的 ConnectionString 属性,并与新平面文件建立连接。 然后,在连接到文件夹中的下一个文件之前,Foreach循环容器将对新平面文件中的数据运行未修改的数据流任务。
使用以下过程可以测试已添加到包中的新循环功能。
测试包之前,应当确保 Lesson 2 包中的控制流和数据流包含下列关系图中显示的对象。 数据流应与第 1 课中的数据流相同。
控制流
数据流
测试 Lesson 2 教程包
1. 在“调试”菜单中,单击“启动调试”。
包将运行。 可以在“输出”窗口中或单击“进度”选项卡来验证每个循环的状态。 例如,可以看到 1097 行从文件 Currency_VEB.txt 添加到目标表中。
2. 当包运行完毕后,在“调试”菜单中,单击“停止调试”。