SSIS中的容器和数据流—简单介绍

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器 容器是SSIS为一个或多个任务提供一种结构的对象。例如可以执行一个循环直到到达边界条件,或者将一系列的task按逻辑组织在一起。一个容器也可以包含其他的容器。容器和任务(task)一样也放在Control Flow标签内,总共有四种类型的容器:任务宿主Task Host,Sequence序列,For循环和Foreach循环。

容器

容器是SSIS为一个或多个任务提供一种结构的对象。例如可以执行一个循环直到到达边界条件,或者将一系列的task按逻辑组织在一起。一个容器也可以包含其他的容器。容器和任务(task)一样也放在Control Flow标签内,总共有四种类型的容器:任务宿主Task Host,Sequence序列,For循环和Foreach循环。

 

任务宿主Task Host Containers

任务宿主是单个task的默认容器,你在工具栏中找不到这种工具的图标,实际上即使不选择一个容器,单个task仍然包含在一个任务宿主中。SSIS的结构通过任务宿主来扩展变量和事物控制。

 

Sequence容器

Sequence容器可以处理package中的子任务,将package划分成更容易控制的小片段。下面是Sequence容器的一些应用:

  • 将task归类使其中一部分不再需要的task不能执行
  • 缩小一个容器中的变量范围
  • 设置容器中所有task的属性
  • 使用方法来保证一个task执行成功之后再执行下一个task

在工具栏的Control Flow中拖放一个Sequence容器,如图4-1,左边是一个Sequence容器,包含两个task,右边是一个Foreach循环容器,左边容器中的task执行成功之后才能执行右边容器中的task。

 img_0068841f924d6f3d13a740db58d93921.png

图4-1

 

For循环容器

For循环容器像其他程序语言一样,是一种创建循环方法的任务。在这种循环中SSIS设置一个初始值,在循环中不断地重新赋值,只到不满足边界条件。

双击打开For循环容器的编辑页面如图4-2。InitExpression选择项设置循环的初始条件。EvalExpression选择项是每次循环都会重新赋值的,一旦它变成false,循环将停止。AssignExpression可以在每次循环时都改变表达式的值。

img_664b4668385db963d6bba41883fd50c1.png

图4-2

现在来试验一个循环容器的用法,在这个例子中将试验在循环中五次执行一段脚本,这是一个很简单的例子,可以添加一些其他功能。

  1. 创建一个SSIS项目,将默认的package更名为ForLoop.dtsx
  2. 打开这个package,川建一个新的变量Counter,在面板中右击选择Variables,点击添加变量按钮,默认变量类型为int32
  3. 从工具箱中拖放一个Loop循环容器,双击打开编辑页面,设置InitExpression为@Counter = 0,循环开始时变量Counter的值设置为0,EvalExpression选项设置为@Counter < 5 and @Counter = @Counter + 1,在满足条件@Counter<5是循环一直执行,并自加1,在Name选项中输入Iterate through a Script,最后如图4-3
  4. 在这个Loop循环容器中拖放一个脚本任务,双击这个脚本任务,取名为Pop Up the Iteration
  5. 在脚本任务的编辑页面如图4-4,在ReadOnlyVariables选项中输入Counter,向任务传入一个参数变量
  6. 点击Design Script,打开Visual Studio编辑环境,在Mian()方法体内输入下面的代码,代码根据变量弹出对话框显示Counter变量的值
Public Sub Main()
    Dim variables As Variables
    If Dts.Variables.Contains("Counter") = True Then
        Dts.VariableDispenser.LockOneForRead("Counter", variables)
    End If
    MsgBox("You are in iteration: " & CStr(variables("Counter").Value))
    Dts.TaskResult = Dts.Results.Success
End Sub

注:VS2008环境内部分代码是Dts.TaskResult = ScriptResults.Success

  1. 退出Visual Studio编辑环境,回到原来的编辑界面,执行这个package结果如图4-5,会出现5个弹出框,从0到4,Task的颜色变成绿色,然后右变成黄色。最终执行完之循环后又变成绿色。

img_3f9ab352be401299549b3060fc05899b.png

图4-3

img_e03134ce70d526897726bb6131913393.png

图4-4

 

Foreach循环容器

Foreach循环容器是一个很强大的容器,它可以对对象集合进行循环操作。在循环操作的过程中取得对象集合中相关值,对象集合的类型可以是文件等,在下面列举。还可以将对象集合中的值映射到变量中。对象的类型根据标签Collection中Enumerator属性的设置不同,这些属性如下:

  • For Each File Enumerator:对指定文件夹下的文件进行循环操作
  • For Each Item Enumerator:对手动设置的对象集合进行循环操作
  • For Each ADO Enumerator:对一个ADO集合中的表中的行进行循环操作
  • For Each ADO.NET Schema Rowset Enumerator:对一个ADO.NET模型进行循环操作
  • For Each From Variable Enumerator:对一组SSIS变量进行循环操作
  • For Each Nodelist Enumerator:对一组XML节点对象进行循环操作
  • For Each SMO Enumerator:对一组SQL管理对下你给进行循环操作

我们来做一个和For循环容器类似的例子,在这个例子中我们将列举一个文件夹下的所有文件,使用对话框输出文件的名字信息。

  1. 新建一个项目,将默认包重命名为ForeachLoop.dtsx
  2. 拖拽一个Foreach循环容器,双击打开编辑界面,在General标签内将它重命名为Iterate through Files
  3. 在Collection标签内,报纸Enumerator属性默认值Foreach File Enumerator,设置Folder属性内选择一个文件较少的文件夹,这个例子不会修改文件,只是读出文件的相关信息,在Files选项内保持默认值“.”,最后的界面如图4-5
  4. 转到变量映射标签页面内,在变量列内选择<New variable…>,打开添加变量对话框。为变量命名FileName,在Index列内变量的值默认0,因为只对一个文件夹下的文件循环操作,所以保持默认值0不变,点击OK退出编辑界面
  5. 拖放一个脚本任务放置到Foreach循环容器中,双击打开编辑界面重命名为Read Files
  6. 转到Script标签,在ReadOnlyVariale属性内设置变量FileName,点击Design打开Visual Studio编辑环境,使用下面代码代替Main()方法体内的代码
 
Public Sub Main()
    Dim variables As Variables
    If Dts.Variables.Contains("Counter") = True Then
        Dts.VariableDispenser.LockOneForRead("Counter", variables)
    End If
    MsgBox("You are in iteration: " & CStr(variables("Counter").Value))
    Dts.TaskResult = Dts.Results.Success
End Sub

注:VS2008环境内部分s代码是Dts.TaskResult = ScriptResults.Success

  7.  点击OK退出编辑界面,执行这个package得到的结果如图4-6(弹出内容根据具体设置不同而不同)

img_37dbdaca67473bdc052acf64846e51e0.png

图4-6

img_4fe456a0da94ae10eb75ab9460cf8df7.png

图4-7



作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
SQL 数据库 索引
SSIS之Foreach循环容器用法
原文:SSIS之Foreach循环容器用法 要实现的业务:A数据库服务器上某库的T_GOODS_DECL的状态字段“Is_Delete”标记为“1”的时候删除B数据库服务器上对应库的T_GOODS_DECL表中的记录,二者的主键为“DECL_NO”。
1425 0
|
SQL 存储 容器
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流   首先我们来看看包里面的变量       SSIS包变量分为两种,一种是系统的内置变量,是一个SSIS包初使化都会自带的,一种是用户自己定义的变量。
1373 0
|
数据挖掘 容器 存储
SSIS中的容器和数据流—数据转换(Transformations)
对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和SQL Server 2000 DTS完全不同,这些操作不需要编写script,所有的运算都在内存中进行。
1051 0
|
存储 算法 数据挖掘
SSIS中的容器和数据流—数据转换(Transformations)续
在上一篇随笔中列举了部分Data Flow中的数据转换任务,这里继续剩余的转换任务。   数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法。数据挖掘请求运行数据挖掘请求,并将结果输出到数据流。
1162 0
|
数据库 容器 数据库连接
SSIS中的容器和数据流—举例说明数据转换任务
在上一个随笔中我们熟悉了数据流任务,现在来做一个例子,通过实践学习这些介绍的内容。这个例子从AdventureWorks数据库中取得数据,然后对数据进行聚合,排序,计算产生新列操作并输入到一个.csv文件中。
969 0
|
容器
SSIS中的容器和数据流—调试工具数据视图
数据视图是SSIS中常见的调试工具,它的功能是在包运行的时候查看数据。例如如果在Aggregate转换的前,后分别放置一个数据视图,尅查看数据在进行聚合操作之前和之后的数据。 但是如果将package部署或者作为job的一个步骤运行,数据视图将不会显示出来。
1168 0
|
XML 数据格式 容器
SSIS中的容器和数据流—数据源
在SSIS中大多数的数据源都指向一个连接管理器,通过指定连接管理器可以在Package中重复使用连接,这样只需要修改一次就能重新设置所有连接,在SSIS中有6中不同的数据源。    OLE DB数据源 OLE DB数据源用来连接OLE EB数据,是一种最常用的数据源。
1031 0
|
SQL 数据挖掘 BI
SSIS中的容器和数据流—数据目的
在Data Flow中Destination从数据源或者数据处理流程中接收数据。在SSIS中数据可以导入到任何OLE DB支持的数据源,平面文件或者Analysis Service中的数据。和数据源一样Destinations也通过连接管理器来连接,不同之处是有一个数据映射界面如图4-11。
1080 0
|
7天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
129 77
|
15天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序