ETL学习之六:在SSIS中使用循环

      在第 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 循环容器。还将设置用户定义的包变量,以便使该教程包能够迭代遍历文件夹中的所有平面文件。

此任务中,将创建 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 打开该包。

 

在本任务中,您将添加循环访问平面文件的文件夹的功能,并将第 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 教程包
    1. 在“调试”菜单上,单击“启动调试”。

      包将运行。可以在“输出”窗口中或单击“进度”选项卡来验证每个循环的状态。例如,可以看到 1097 行从文件 Currency_VEB.txt 添加到目标表中。

    2. 当包运行完毕后,在“调试”菜单上,单击“停止调试”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSIS说明 SSIS初步认识 SSIS常见组件 SSIS变量使用 SSIS开发注意 SSIS包的部署 SQL创建作业 讲解内容 ETL-SSIS培训教程全文共34页,当前为第1页。 SSIS说明——什么是SSIS SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案(包括数据仓库的提取、转换和加载 (ETL) 包)的平台(农银和兴业简称为ETL)。 ETL-SSIS培训教程全文共34页,当前为第2页。 SSIS说明——功能 SQL Server Integration Services (SSIS) 提供一系列支持业务应用程序开发的内置任务、容器、转换和数据适配器。您无需编写一行代码,就可以创建 SSIS 解决方案来使用 ETL 和商业智能解决复杂的业务问题,管理 SQL Server 数据库以及在 SQL Server 实例之间复制 SQL Server 对象 ETL-SSIS培训教程全文共34页,当前为第3页。 ETL说明——特色 1、可视化环境 熟悉了SSIS的可视化操作后,给你的感觉应该是震撼的,因为几乎你所能想得到的ETL操作都能通过简单托拽控件加以实现。 2、强大的参数设置功能 SSIS的另一个特色是的参数设置功能,这一点比DTS有了明显的进步。连接参数,源与目的关联的表名或者SQL语句的条件子句,都可以通过参数来构建,甚至参数本身可以由其他参数动态赋值(通过Expression功能),这就给用户提供了非常广阔界面编程的空间,充分发挥你的想象力,就能够在可视化界面上实现复杂逻辑功能的ETL操作。 ETL-SSIS培训教程全文共34页,当前为第4页。 1、创建SSIS项目文件 (1)在开始菜单,找到SQL数据库文件下的SQL Server Business Intelligence Development Studio程序,单击运行程序。 (2)在打开的页面,点击左上角的"文件 新建 项目",在商业智能项目目录下选择Integration Service项目,填入名称和位置,点击确定。 SSIS初步认识 ETL-SSIS培训教程全文共34页,当前为第5页。 SSIS初步认识 2、打开现有的SSIS项目文件 找到需要打开SSIS项目的文件夹,打开文件。找到文件后缀名为.sln的文件,并运行该文件 ETL-SSIS培训教程全文共34页,当前为第6页。 SSIS初步认识 3、页面介绍 菜单栏、工具箱、设计区、连接管理器、解决方案资源管理器等 菜单栏:所有的菜单选项 工具箱:所有的组件 设计区:开发组件区域 连接管理器:当前SSIS包所用到的数据源 解决方案资源管理器:可以查看数据源和项目文件 补充:整体风格和微软的C/S页面类似 ETL-SSIS培训教程全文共34页,当前为第7页。 SSIS初步认识 4、创建SSISSSIS所有的开发都是在包完成的。 创建包步骤:在右侧的解决方案资源管理器,右键SSIS包文件夹,选择新建SSIS包,这样就可以开始ETLETL-SSIS培训教程全文共34页,当前为第8页。 SSIS初步认识 5、创建数据源 做数据处理,当然不能少了数据,所以还需要添加数据源。这里的数据源包括数据来源和数据目标。在右侧的解决方案资源管理器,右键数据源,选择新建数据源。 ETL-SSIS培训教程全文共34页,当前为第9页。 SSIS初步认识 6、数据源分类: 默认添加的是SQL Server数据源,提供程序选择"本机OLE DB\SQL Server Native Client10.0(SQL SERVER2008)"; Oracle数据源,我们可以选择"Oracle Provider for OLE DB"。 ETL-SSIS培训教程全文共34页,当前为第10页。 SSIS常用组件 1、执行SQL任务 执行一条或者多条SQL语句,SQL类型可以是增、删、改、查,也可以是执行一个存储过程。 补充:由于不同的数据源有不同的语法,并且SSIS对数据语言的支持度不一样,在数据库能成功执行的SQL,在执行SQL任务不一定能正常执行。 例如:在执行SQL任务,SQL SERVER语句支持注释(--),而在Oracle数据源下,不支持注释(--);还有调用其他数据源,需要主要用户是否有权限去操作表。 ETL-SSIS培训教程全文共34页,当前为第11页。 SSIS常用组件 2、数据流任务 数据流任务封装数据流引擎,该引擎在源和目标之间移动数据,使用户可以再移动数据时转换、清除和修改数据。将数据流任务添加到包控制流使得包可以提取、转换和加载数据。一个包可以有多个数据流任务,也可以包含零个数据流任务。 ETL-SSIS培训教程全

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值