SSIS介绍
SSIS首先是在1997年的SQL Server 7.0中引入的,当时它的名称为数据转换服务(DTS)。SSIS属于ETL产品家族,ETL代表提取(Extraction)、转换(Transformation)和加载(Loading)。
现在,越来越多的企业都有数据仓库。ETL是将来自OLTP数据库的数据定期加载到数据仓库中必不可少的工具。在SQL Server的前两个版本—— SQL Server 7.0和SQL Server 2000中,SSIS主要集中于提取和加载。通过使用SSIS,可以从任何数据源中提取数据以及将数据加载到任何数据源中。在SQL Server 2005中,对SSIS进行了重新设计和改进。SSIS提供控制流和数据流。控制流也称为工作流或者任务流,它更像工作流,在工作流中每个组件都是一个任务。这些任务是按预定义的顺序执行的。在任务流中可能有分支。当前任务的执行结果决定沿哪条分支前进。
数据流是新的概念。数据流也称为流水线,主要解决数据转换的问题。数据流由一组预定义的转换操作组成。数据流的起点通常是数据源(源表);数据流的终点通常是数据的目的地(目标表)。可以将数据流的执行认为是一个流水线的过程,在该过程中,每一行数据都是装配线中需要处理的零件,而每一个转换都是装配线中的处理单元。
图12-1显示了SSIS设计器。可以通过启动 Business Intelligence Development Studio,然后创建一个Integration Services项目来调用SSIS设计器。在左边有一个工具箱窗口。工具箱窗口包含预定义的控制流任务和数据流转换。中间的视图窗格包含4个视图:控制流、数据流、事件处理程序和包资源管理器。控制流视图提供了一个设计环境,在这个设计环境中可以使用工具箱中与控制流相关的项来构建控制流。数据流视图也提供了一个设计环境,在这个设计环境中可以使用工具箱中与数据流相关的项来构建数据流。在事件处理程序视图中,可以定义由特定的执行事件触发的后续响应操作。包资源管理器视图提供了流的树型视图。
12.1.1 理解SSIS包
包(package)是SSIS项目中基本的部署和执行单元。SSIS任务执行的所有工作都发生在包的上下文中。SSIS包是SSIS流的容器。可以通过以下方式来创建SSIS包:在 Integration Services项目文件夹中右击“SSIS包”文件夹,然后选择“新建SSIS包”菜单项。
SSIS项目可以包含多个包。包只包含一个控制流,而该控制流可以包含一个或者多个数据流。
除了控制流和数据流,包还包含了SSIS连接和包的变量。可以有不同作用域的变量,例如,作用域为整个包的全局变量或者作用域为任务序列的局部变量。
在托盘中显示了连接和变量,如SSIS设计器底部所示(参见图12-1)。连接可以连向关系数据库,也可以连向Analysis Services数据库。
12.1.2 任务流
SSIS包包含一个控制流,该控制流由一组任务组成。这些任务定义了包的工作,例如,加载数据、执行SQL语句、处理脚本或者调用其他过程。在工具箱中列出了这些任务。可以通过以下方式将任务加入包中:从工具箱中拖动该任务,然后将它释放到包的设计器中。
在任务流中,包通常包含多个任务。多个任务是按优先权约束的顺序来进行组织的。优先权约束按以下顺序连接两个任务:执行第一个任务的结果决定是否运行第二个任务。可以在工作流中使用优先权约束来创建条件分支。可以将多个优先权约束进行组合,然后将其作为一个约束来求值。
1. 在SSIS中的标准任务
表12-1列出了SSIS任务流中的一些预构建的任务及其描述信息。
除了在下表中所列出的任务之外,SSIS还提供了简单的API,可以使用这些API来开发自己的任务。一旦注册了任务,则在工具箱中将会出现这些任务,然后可以在任务流中像所有预构建的任务一样使用这些任务。
2. 容器
容器(container)是向包提供结构的 SSIS对象。每个包都有一个容器,用来存储包的流。包的容器可以包含其他类型的容器,例如序列容器、Foreach循环容器和For循环容器,这些容器都可以在控制流工具箱中获得。可以在这些容器中定义子流。容器丰富了控制流的运行时执行模型。例如,并不是所有的任务都是顺序执行的。在Foreach循环容器内部的子流将会基于容器中定义的迭代器而多次执行。
3. 调试
对SSIS控制流进行调试是在SQL Server 2005中引入的新特性。当在设计器中选择了一个任务时,只要按下F9就可以设置断点。通过调试,可以在执行期间检查包的变量的值以及任务的状态。断点可以基于事件来设置。例如,可以基于一个任务的以下事件来设置一个或者多个断点:
● OnPreExecute
● OnPostExecute
● OnError
● OnWarning
● OnProgress
当SSIS的运行时遇到了一个断点事件时,SSIS的运行时会在包的执行期间暂停。这与在Visual Studio中调试C#代码类似。
4. 研究一个控制流示例
图12-2显示了一个简单的控制流示例。它以 FTP任务开始,该FTP任务用于下载已压缩的数据文件。一旦下载完这些文件,运行时就会到达Foreach循环容器,在该容器内部有两个任务:执行进程任务(该任务调用unzip应用程序来解压缩数据文件)和大容量插入任务(该任务将数据文件的数据插入到SQL Server中)。当解压缩完数据文件并且将数据文件的数据加载到SQL Server中时,循环会停止。如果在循环期间发生了错误,则该控制流将执行发送邮件任务:向DBA发送电子邮件。如果正确地执行了每个任务,则该控制流将执行SQL任务:在新的数据集上创建一些视图。断点是在执行SQL任务的OnPreExecute事件上设置的,以便DBA在创建视图前可以对数据加以验证。
12.1.3 数据流
控制流是出现较早的概念,因为它从SSIS的第一个版本开始就已经存在了,而数据流是在SQL Server 2005中才引入的新概念。数据流是专门处理数据操作的工作流。
数据流也称为流水线。可以将数据流认为是装配线,该装配线包含了顺序执行的多个操作。在数据流中的每个节点都称为转换。数据流通常以源转换开始,以目标转换结束。在这两个转换之间,预定义的数据流转换被依序应用到数据上。一些转换是同步的,例如,查找、条件性拆分和数据转换。这些同步的转换可以并行执行。
一旦已经将转换应用到数据行上,则下一个转换可以开始处理该数据行,而无需等到上一级转换处理完整个数据集。一些转换是异步的,例如聚合和排序。这些转换必须从前面的输出中获得所有的行,从而可以处理和产生输出,用于后续转换。
除了预构建的转换清单,SSIS还提供了一些API,可以使用这些API来构建自己的数据流转换。例如,可以构建Numeric Processing转换来将数学计算和转换应用到流水线数据上。
数据流总是包含于任务流中。有一个特殊的任务,其名称为数据流任务,该任务是用于容纳数据流的容器。在构建数据流之前,必须将数据流任务加入到设计器中。
1. 转换
任务是任务流的基本组件,而转换是数据流的基本组件。转换是预定义的数据操作。可以将转换视为装配线中的机器,用于对输入数据进行操作。表12-2显示了在SSIS数据流环境中流行的转换列表。
2. 查看器
查看器是为了调试数据流而设计的。可以在执行期间使用查看器来查看流水线中的流。可以将查看器附加在转换之间的连线上。要增加查看器,可以在连线上右击,然后选择“数据查看器”菜单项。默认的查看器是网格图。也可以增加直方图,散点图和圆柱图作为图形查看器。如果这些预定义的查看器还不能满足您的需求,则您甚至可以构建自己的查看器。
3. 研究一个数据流示例
图12-3显示了一个数据流的示例。该数据流以 OLE DB Source转换开始,该转换加载包含零售销售事务的事实表。第二个转换是“查找”,该转换从客户维表中查找客户姓名中的名和姓。这两列被加入到流水线的数据中。下一个转换是“派生列”,该转换基于姓名中的名和姓来创建新的Full Name列。然后,数据到达“聚合”转换,该转换累加每个客户的总销售额。基于销售额,“条件性拆分”转换将客户拆分为两个目标表:一个表对应重要的客户,而另一个表对应普通的客户。
图12-3 数据流的示例
现在,越来越多的企业都有数据仓库。ETL是将来自OLTP数据库的数据定期加载到数据仓库中必不可少的工具。在SQL Server的前两个版本—— SQL Server 7.0和SQL Server 2000中,SSIS主要集中于提取和加载。通过使用SSIS,可以从任何数据源中提取数据以及将数据加载到任何数据源中。在SQL Server 2005中,对SSIS进行了重新设计和改进。SSIS提供控制流和数据流。控制流也称为工作流或者任务流,它更像工作流,在工作流中每个组件都是一个任务。这些任务是按预定义的顺序执行的。在任务流中可能有分支。当前任务的执行结果决定沿哪条分支前进。
数据流是新的概念。数据流也称为流水线,主要解决数据转换的问题。数据流由一组预定义的转换操作组成。数据流的起点通常是数据源(源表);数据流的终点通常是数据的目的地(目标表)。可以将数据流的执行认为是一个流水线的过程,在该过程中,每一行数据都是装配线中需要处理的零件,而每一个转换都是装配线中的处理单元。
图12-1显示了SSIS设计器。可以通过启动 Business Intelligence Development Studio,然后创建一个Integration Services项目来调用SSIS设计器。在左边有一个工具箱窗口。工具箱窗口包含预定义的控制流任务和数据流转换。中间的视图窗格包含4个视图:控制流、数据流、事件处理程序和包资源管理器。控制流视图提供了一个设计环境,在这个设计环境中可以使用工具箱中与控制流相关的项来构建控制流。数据流视图也提供了一个设计环境,在这个设计环境中可以使用工具箱中与数据流相关的项来构建数据流。在事件处理程序视图中,可以定义由特定的执行事件触发的后续响应操作。包资源管理器视图提供了流的树型视图。
12.1.1 理解SSIS包
包(package)是SSIS项目中基本的部署和执行单元。SSIS任务执行的所有工作都发生在包的上下文中。SSIS包是SSIS流的容器。可以通过以下方式来创建SSIS包:在 Integration Services项目文件夹中右击“SSIS包”文件夹,然后选择“新建SSIS包”菜单项。
SSIS项目可以包含多个包。包只包含一个控制流,而该控制流可以包含一个或者多个数据流。
除了控制流和数据流,包还包含了SSIS连接和包的变量。可以有不同作用域的变量,例如,作用域为整个包的全局变量或者作用域为任务序列的局部变量。
在托盘中显示了连接和变量,如SSIS设计器底部所示(参见图12-1)。连接可以连向关系数据库,也可以连向Analysis Services数据库。
12.1.2 任务流
SSIS包包含一个控制流,该控制流由一组任务组成。这些任务定义了包的工作,例如,加载数据、执行SQL语句、处理脚本或者调用其他过程。在工具箱中列出了这些任务。可以通过以下方式将任务加入包中:从工具箱中拖动该任务,然后将它释放到包的设计器中。
在任务流中,包通常包含多个任务。多个任务是按优先权约束的顺序来进行组织的。优先权约束按以下顺序连接两个任务:执行第一个任务的结果决定是否运行第二个任务。可以在工作流中使用优先权约束来创建条件分支。可以将多个优先权约束进行组合,然后将其作为一个约束来求值。
1. 在SSIS中的标准任务
表12-1列出了SSIS任务流中的一些预构建的任务及其描述信息。
除了在下表中所列出的任务之外,SSIS还提供了简单的API,可以使用这些API来开发自己的任务。一旦注册了任务,则在工具箱中将会出现这些任务,然后可以在任务流中像所有预构建的任务一样使用这些任务。
2. 容器
容器(container)是向包提供结构的 SSIS对象。每个包都有一个容器,用来存储包的流。包的容器可以包含其他类型的容器,例如序列容器、Foreach循环容器和For循环容器,这些容器都可以在控制流工具箱中获得。可以在这些容器中定义子流。容器丰富了控制流的运行时执行模型。例如,并不是所有的任务都是顺序执行的。在Foreach循环容器内部的子流将会基于容器中定义的迭代器而多次执行。
3. 调试
对SSIS控制流进行调试是在SQL Server 2005中引入的新特性。当在设计器中选择了一个任务时,只要按下F9就可以设置断点。通过调试,可以在执行期间检查包的变量的值以及任务的状态。断点可以基于事件来设置。例如,可以基于一个任务的以下事件来设置一个或者多个断点:
● OnPreExecute
● OnPostExecute
● OnError
● OnWarning
● OnProgress
当SSIS的运行时遇到了一个断点事件时,SSIS的运行时会在包的执行期间暂停。这与在Visual Studio中调试C#代码类似。
4. 研究一个控制流示例
图12-2显示了一个简单的控制流示例。它以 FTP任务开始,该FTP任务用于下载已压缩的数据文件。一旦下载完这些文件,运行时就会到达Foreach循环容器,在该容器内部有两个任务:执行进程任务(该任务调用unzip应用程序来解压缩数据文件)和大容量插入任务(该任务将数据文件的数据插入到SQL Server中)。当解压缩完数据文件并且将数据文件的数据加载到SQL Server中时,循环会停止。如果在循环期间发生了错误,则该控制流将执行发送邮件任务:向DBA发送电子邮件。如果正确地执行了每个任务,则该控制流将执行SQL任务:在新的数据集上创建一些视图。断点是在执行SQL任务的OnPreExecute事件上设置的,以便DBA在创建视图前可以对数据加以验证。
12.1.3 数据流
控制流是出现较早的概念,因为它从SSIS的第一个版本开始就已经存在了,而数据流是在SQL Server 2005中才引入的新概念。数据流是专门处理数据操作的工作流。
数据流也称为流水线。可以将数据流认为是装配线,该装配线包含了顺序执行的多个操作。在数据流中的每个节点都称为转换。数据流通常以源转换开始,以目标转换结束。在这两个转换之间,预定义的数据流转换被依序应用到数据上。一些转换是同步的,例如,查找、条件性拆分和数据转换。这些同步的转换可以并行执行。
一旦已经将转换应用到数据行上,则下一个转换可以开始处理该数据行,而无需等到上一级转换处理完整个数据集。一些转换是异步的,例如聚合和排序。这些转换必须从前面的输出中获得所有的行,从而可以处理和产生输出,用于后续转换。
除了预构建的转换清单,SSIS还提供了一些API,可以使用这些API来构建自己的数据流转换。例如,可以构建Numeric Processing转换来将数学计算和转换应用到流水线数据上。
数据流总是包含于任务流中。有一个特殊的任务,其名称为数据流任务,该任务是用于容纳数据流的容器。在构建数据流之前,必须将数据流任务加入到设计器中。
1. 转换
任务是任务流的基本组件,而转换是数据流的基本组件。转换是预定义的数据操作。可以将转换视为装配线中的机器,用于对输入数据进行操作。表12-2显示了在SSIS数据流环境中流行的转换列表。
2. 查看器
查看器是为了调试数据流而设计的。可以在执行期间使用查看器来查看流水线中的流。可以将查看器附加在转换之间的连线上。要增加查看器,可以在连线上右击,然后选择“数据查看器”菜单项。默认的查看器是网格图。也可以增加直方图,散点图和圆柱图作为图形查看器。如果这些预定义的查看器还不能满足您的需求,则您甚至可以构建自己的查看器。
3. 研究一个数据流示例
图12-3显示了一个数据流的示例。该数据流以 OLE DB Source转换开始,该转换加载包含零售销售事务的事实表。第二个转换是“查找”,该转换从客户维表中查找客户姓名中的名和姓。这两列被加入到流水线的数据中。下一个转换是“派生列”,该转换基于姓名中的名和姓来创建新的Full Name列。然后,数据到达“聚合”转换,该转换累加每个客户的总销售额。基于销售额,“条件性拆分”转换将客户拆分为两个目标表:一个表对应重要的客户,而另一个表对应普通的客户。
图12-3 数据流的示例
白虎
Hello! I Am David.DU.