SQL Server 2005 整合服务的新特性

摘要
这篇白皮书提供了浏览SQL Server 整合服务(SSIS)平台新特性的实用指导。

目录
简介
SSIS向导
Business Intelligence Development Studio
Visual Studio 2005
解决方案浏览器窗口
工具栏
属性窗口
其他窗口
面板和卷轴控制
UI的制定
SSIS 包设计器
控制流
任务逻辑分组
注释
连接管理器
变量
数据流
执行一个包
体系架构
数据源元素
数据源
数据源视图
连接
控制流元素
任务
共享的体系架构
优先约束
约束值
条件表达式
容器
变量
动态改变属性
属性表达式       
数据流元素
数据源
OLE DB 数据源
Flat File 数据源
Raw File 数据源
XML 数据源       
DataReader 数据源
目的数据源
SQL Server 目的数据源
Raw File 目的数据源
OLE DB 目的数据源
Recordset 目的数据源
DataReader 目的数据源       
数据转换
扩展或修改数据
Character Map
分发, 合并或抽取采样数据
商业智能转换
杂项转换
事件处理元素
异常处理元素
日志和审核元素
开发和测试
调试
教程:创建你的第一个SSIS包
关于作者

简介
Microsoft® SQL Server™整合服务(SSIS)经历了将SQL Server 2000中的数据传输服务重新设计和重写的过程。做为这个过程的一部分,很多产品设计和管理范例也被重新思考过。SSIS现在不再有单独的设计器,SSIS使用了Microsoft Visual Studio® 做为它的开发环境,但是也继续支持SQL Server 2005中标准的管理工具。新的开发环境叫Business Intelligence (BI) Development Studio,管理环境叫SQL Server Management Studio。不同的两种环境允许开发者和数据库管理员(DBA)着重各自的任务。

2种环境都能够执行包,但是BI Development Studio只能在开发控制台执行,而Management Studio可以执行已经导入到服务器中的包。BI Development Studio解决方案中可以包括1个或多个项目,而在项目中可以包含数据源,数据源视图,SSIS包和杂项文件。例如,1个新的项目中可以包含你在开发的SSIS包和任何你要调用的包。也可能包括你使用的数据库中所有相关的文件,例如数据定义语言(DDL)和数据维护语言(DML)文件。当要进行部署到生产环境时,你可以在1个位置中拿到所有你需要的文件。

BI Development Studio不需要直接连接到SQL Server RDBMS来设计包,也不需要连接来保存你的工作。BI Development Studio在项目文件家中保存项目,就像Visual Studio一样。BI Development Studio也可以直接从设计环境中和Visual SourceSafe连接(或其他的源代码控制系统)。当要对项目作出修改时,可以直接签入到VSS中。

Management Studio不像BI Development Studio,它主要针对于DBA来管理SQL,分析服务和报表服务。它支持执行和调度SSIS包,但是不能编辑或设计包。但是它可以允许用户使用SSIS框架导入和导出数据并完成常规的维护任务。

SSIS向导
Microsoft将SQL Server 2000中的导入/导出向导进行了升级,用于帮助DBA和开发者自动化的完成将数据从1个位置移动或复制到其他位置这样的重复工作。

导入/导出向导
在DTS 2000中最简单也是最常用的向导就是导入/导出向导。可以使DBA,开发者和初学者快速的,无需代码的从任意类型的数据源将数据移动到任意类型的数据源。它是我们学习如果构建和设计DTS包的起点。导入/导出向导在SQL Server 2005中还是出现了并有了下列改进:
•        改进的对平板文件在数据源和目的数据源中的控制。
•        数据的实时预览。
•        当需要大量表和视图时的优化处理。
•        直接从向导创建新的数据库。
图1 显示了先导的欢迎界面,在后面的一些截图中显示了向导其他的步骤。



随同新的特性,用户界面已经被更新了,可以节省经常使用向导用户的时间。
众多令人兴奋改进中的一个是能从向导中直接创建数据库。在DTS2000中,用户不得不停止导入/导出过程,返回企业管理器,创建新的数据库。现在管理员可以使用在图2中显示的对话框创建和配置新数据库。



当包被构建,保存或执行时,显示的状态对话框比DTS2000中的有更多有用的信息。图3显示了状态对话框。



当包被保存到SQL Server或文件后,你可以打开包。图4显示了导入/导出向导包的控制流部分。



与使用DTS2000中的导入/导出向导创建的包相比,所有的CREATE TABLE DDL都在第1个EXECUTESQL任务Preparation SQL Task中包含着。数据移动实际发生在表创建后的管道任务中。
当打开数据流任务后,可以看到数据流组件。在图5中,3个表被导入,并创建了3个数据源和3个目的数据源(每个集合对应一个表)。



就像在SQL Server 2000中的一样,导入/导出向导只是SSIS功能的一小部分。

Business Intelligence Development Studio
在Business Intelligence Development Studio中,你可以在1个解决方案中的整合服务项目中开发SSIS包。解决方案是一个容器,可以使你是用同样的一套工具同时工作于多个Visual Studio 项目,开发企业级,紧密地整合BI解决方案,其中包括SSIS解决方案。

Visual Studio 2005
BI Development Studio基于Visual Studio 2005,可以使你在一个整合开发环境中设计,构建,测试,部署和扩展SSIS包。BI Development Studio也支持通过微软开发工具 (Microsoft Visual Basic®. NET, C#, C++, J#) 使用.NET Framework。因为它整合于Visual Studio 2005,BI Development Studio也具有整合开发的特性,包括健壮的调试工具,整合的源代码控制环境和整合的帮助工具。BI Development Studio针对于开发者,使他们可以使用和以前开发应用程序同样的开发模型,开发工具并可以构建包和自定义任务。

这种基于项目的模式提供了很多好处,不需要在运行SQL Server来进行开发,并可以自动整合访问源代码控制系统中的解决方案或项目文件。

当你第1次打开Development Studio并创建新的整合服务项目时,你可以看到一个简单的环境视图。你不会看到任何任务,对象或包,因为你只是创建了一个空的解决方案。你注意到有几个窗口已经打开了:工具箱,解决方案浏览器,属性,输出窗口和搜索结果窗口。所有的窗口可从当前的位置挂接到其他的位置,移动或关闭,或者设置为自动隐藏等来节省屏幕空间或提高生产力。如果你关闭了需要的窗口并想重新开启,在主菜单中选择视图然后选择相应的菜单属性,重新打开。你也可以直接通过工具栏直接打开解决方案浏览器,属性窗口,工具栏或其他的窗口,只需要点击图6中的这组图表。



注意,Development Studio的默认组织是将其它支持窗口围绕在中心的主窗口旁。许多自定义我们在后面的章节中进行讨论。

解决方案浏览器窗口
当开始使用BI Development Studio工作时,你必须先打开或创建新的项目或解决方案。如果你开始创建了一个整合服务项目,将创建一个包含一个新的SSIS项目的默认解决方案。你也可以创建一个空的解决方案并添加一些项目,例如SSIS项目,分析服务项目,报表服务项目,或是Visual Basic. NET项目。这样的解决方案/项目的联系可以使开发者将不同的工具单元出于部署和测试的目的分组。
图8显示了在BI Development Studio中组织的项目。示例中有3个ETL项目 (Source1ToStaging,Source2ToStaging,StagingToEDW) 和1个分析服务项目。因为这个环境整合于Visual Studio,很多开发者可以同时在项目中的不同部分中工作。



如果你右击SSIS包文件夹并选择新建SSIS包,你可以看到图9的显示。



dtsx扩展名的文件是保存你的所有信息的核心包。包含.dtsx的解决方案和项目也提供了分组组织的功能。你可以通过创建SSIS项目并添加已存在.dtsx文件来打开.dtsx文件。

工具栏
当你查看BI Development Studio时,你可以注意到一个窗口叫做工具栏,停靠在窗口的左边。工具箱依赖于你工作的不同项目使用很多栏来组织控件。在SSIS项目中没有过多的分割栏,在SSIS中有2个分割栏,控制流项和数据流项。我们将在后面的篇幅中涵盖在工具箱中的任务和对象。根据你的屏幕分辨率,你可以注意在工具栏名称下有2个滚动条箭头。如果你没有足够的空间来显示所有的任务,滚动条箭头可以帮你浏览工具栏中的项。(请见图10)。



当你使用工具栏时,你可能需要通过从默认试图中删除人物或工具栏来自定义你的视图。右击特定的任务将会显示快捷菜单,可以通过添加或删除工具栏并添加,重命名或删除项。你也可以通过从源到目的的托拽来改变项的排序。

属性窗口
默认情况下属性窗口在BI Development Studio的右下角。当你开始使用BI Development Studio创建包并点击任务或对象时,属性窗口会显示出来。属性窗口是上下文敏感的,你会注意窗口依赖于你点击的不同项而改变。
如果你想测试这个,点击主设计器窗口。图11展现了在属性窗口中包的属性页。



其他窗口
在设计时,BI Development Studio有一些其它窗口,你可以选择将他们停靠,显示,隐藏或自动隐藏。它们包括下列窗口:
•        任务列表窗口显示了一些描述性任务,是开发者创建的描述开发意图或后期开发的跟进任务。
•        错误列表窗口显示了在包中检测到的错误和警告。双击在窗口中的一项将会打开导致错误对象的编辑器。
•        输出窗口显示了在BI Development Studio中构建和执行发生的结果。例如,输出窗口将显示在构建或部署时产生的错误或在运行时产生的错误。  
•        2个搜索窗口(帮助)和1个结果窗口可以允许搜索SQL Server联机丛书和显示搜索的结果。
当你测试你的包时,你将希望在BI Development Studio中执行它们。这时将转换到运行时模式。直到包已经完全执行完,否则不允许进行编辑。在运行时,一些其他的窗口将会显示出来:
•        调用堆栈窗口将显示在栈上上的函数或任务。
•        断点窗口显示在当前项目中所有的断点。
•        命令窗口用于在BI Development Studio中直接执行命令或别名。
•        立即窗口用于调试和评估表达式,执行语句和打印变量值。
•        自动窗口显示在当前语句和之前的语句中使用的变量。
•        本地窗口显示在单前范围的本地变量。
•        监视窗口允许你添加特殊的变量到该窗口,当包执行发生时变量会显示出来。你也可以在窗口中直接修改,读/写变量。

面板和卷轴控制
如果你设计的包分散在设计器表面的无法完全显示并需要滚动轴,你将看到1个小的十字显示在设计器表面的右下脚(图12)。



如果你点击这个十字,1个弹出窗口显示了整个包的缩略图,1个点线的窗口显示了当前可见的区域(图13)。



UI的制定
BI Development Studio中最好的一个特性就是可以用户界面几乎可以按照用户的意愿自定义。所有我们讨论的窗口可以停靠和移动。他们也可以停靠在屏幕上不同的位置可以结合其它的窗口显示。他们可以被设置为自动隐藏,当你使用时它会显示,然后会消失。

SSIS 包设计器
SSIS包设计器内建在BI Development Studio中,也是包开发的主要界面。设计器包含了一套图形化的工具可以通过最小化或没有代码的方式完成数据移动,工作流,和复杂的数据转换操作。设计器有一些窗口用于控制流,数据流,连接创建和变量创建。

不像DTS 2000中一样控制流和数据流是混合的,控制流和数据流编辑器在SSIS中是完全分离的。分开的控制控制流和数据流在开发复杂SSIS包时提供了更轻松和更好的环境。这种分割也提供了更直接的用户界面,更好的控制包的执行,增加数据转换的可见度,通过简单开发实现自定义的任务或转换来增强扩展SSIS。除了简化复杂的SSIS包外,你可以创建简单的导入和到处数据流而不用考虑控制流。
分开的2个编辑器也意味有2套不同的任务集。使2个流设计器共同工作的唯一方法是使用数据流任务容器。所有的数据激动和转换发生在1个或多个这种数据流任务中。

控制流
控制流设计器在包含的任务和优先限制上类似于DTS 2000,但是它也引入了一些新的你需要知道的容器对象。这些容器,For Loop,Foreach Loop,Sequence和数据流任务,都包含了其他完成工作的组件。包中的工作流使用控制流设计器来创建。该设计器是一个制图的界面,可以让你图形化的定义任务如何和其他的任务交互和他们的执行顺序。
一旦你添加一个任务到控制流设计器,设计器自动的添加一个箭头或先前的约束到任务上,允许你连接到其他的任务上。图14显示了这些。



当你点击一次箭头或联线,包设计器将会将它改编成虚线。你将它拖到其他的任务上并在成功的任务上点击一次鼠标。设计器将2个任务连接起来,这样任务通过箭头连结和指向后,图15中显示了前面的执行成功后将执行后续的任务。



如果你希望后续任务只是在前面任务失败时执行,你可以双击2个任务间的连接线。在这个对话框中,你可以改变一些执行结果值,但是如果你改变了OnFailure并点击OK,连接线将变为红色。图16展示了优先约束编辑器的对话框。



如果你希望后续任务不管之前任务执行的结果,你可以改变约束为OnCompletion,连接线将改为蓝色。
如果你的包只有2个任务,你只有1个约束。如果你的包需要其他的任务,你可以在多个任务间添加一些其他的约束来支持更复杂的需求。图17显示了1个更复杂的工作流,说明了SSIS在执行上有更多的控制。



新的SQL Server 2005中提供了在当任务有多个约束时的逻辑与和逻辑或。在DTS 2000中,有多约束的任务只能在所有约束都为真时才能执行。当然,当任务有2个或多个错误的前置约束时是一个问题,因为在后续任务执行前任务必须是失败的。在SQL Server 2005中,如果你在约束条件上双击,一个对话框将显示出来,允许你配置成功,失败或完成的约束,但是多约束还可以选择“And”或“Or”。逻辑“与”意味着所有条件都满足的时候后续任务被执行。逻辑“或”在一个条件满足的时候后续任务就可以执行。如果约束时逻辑与,显示为实线。如果是或,显示为虚线。图18显示了配置失败约束,但是允许后续任务执行。



在图19中显示了这种SSIS逻辑流的能力。在这个例子中,任何包任务执行失败将导致Error Handler任务的执行。这样可以设计出任务分组可以通过一个单一的“异常处理”任务统一处理的场景。。



任务逻辑分组
一个可用性的特性是控制流设计器中可以实现任务分组。如果你希望折叠一些任务到一个图表中,你可以选择你希望添加的所有任务,右击打开快捷菜单,点击Group。这将为所选任务创建一个逻辑容器。一旦创建后,分组将被折叠到一个单一的任务,这将复杂的包简单化。不像容器对象,这个分组在执行,日志,变量范围等方面都是不生效的。它只是一种图形表现的方法。

在图20中,1个包必须在加载数据前先清理表和文件系统目录。你希望将这些任务逻辑分组到1个叫Cleanup的容器中。



选择第1个任务Truncate Source 1 Staging Table,然后选择第2个任务。你可以按下Ctrl键并点击其他人物或你也可以圈选任务。然后右击这些任务显示快捷方式菜单并选择Group,像图21中所示。



SSIS将创建叫做Groupbox的逻辑分组。你可以点击名称并改为Cleanup,如图22所示。然后点击名称右侧的箭头折叠这个分组。然后你可以改变它的大小来适应你的包。



注释
如果将任务分组后,你的包直觉上仍然很复杂,或许如果你希望为包的行为添加文档,你可以直接在包的布局中添加文本的注释。在你希望放置文本框的位置右击并点击Add Annotation。在设计器上将创建一个文本框,你可以直接在里面添加文字并改变大小。你也可以通过选择注释框改变字体,大小和颜色,右击并选择Set Text Annotation Font。同样利用刚才的方法,你也可以在数据流设计器上添加注释。图23显示了一个文本注释的例子。



连接管理器
在控制流设计器窗口的底部的工具栏包含了在控制流和数据流任务中可用的数据连接列表。这些连接可以在任何数据流操作中的数据源和目标中被引用,可以连接关系型或分析服务数据库,平板文件或其他数据源。
当你创建新包时,没有定义过连接。你可以通过右击连接管理器区域,像图24中选择相应的连接类型来创建连接。这里可以有一些连接类型。在后面的篇幅我们还会讨论。一旦连接被创建,可以将它改称有意义的名称。



变量
1个可选的设计时窗口可以显示变量的列表。变量可以贯穿包来在不同任务间传递值,并能动态的控制包在运行时的执行。变量窗口(图25)显示了变量名,它的范围,数据类型和值。



与DTS 2000中全局变量主要的不同是在SSIS中每个变量都有范围。范围提供了很好的定义和控制方式将变量与包和对象联系起来。

每个包,任务,事件句柄,和For Loop,For Each Loop及Sequence容器都可以在各自的范围中包含变量。这意味着1个Execute SQL任务和1个For Loop容器可以分别定1个同名的变量,仅在各自的容器中可以引用。
在后面的章节中我们会更详细的讨论变量。

数据流
数据流设计器在源和目的间管理所有的数据移动和转换。为了在你的包中包含数据流,你必须手工添加数据流任务到控制流设计器或当你打开数据流设计器窗口时SSIS自动创建。在数据路任务内部你的数据移动和转换将被封装。虽然数据流以任务是数据移动和转换步骤中的一个逻辑容器,如果这些移动或转换步骤中的1个失败,这个数据流任务将会失败(当然依赖于数据流配置为Fail Component),图26显示了并行数据流的示例。



图26
1个包可以有多个数据流任务。在每个数据流任务中,实际上在源和目的间有多个“流”。在数据流任务中,每个源-目的流都叫做1个图表。1个图表可以有多个转换的阶段。1个图表通常有1个源适配器来提供数据,和1个目的适配器来接收数据。在适配器间有一些转换被创建。如果数据在源和目的间被改变,这将在转换中实现。如果数据只在源和目的适配器间移动,这个过程使用路径类似于在控制流设计器中的优先约束。
你可以通过双击在适配器间的箭头来查看列的属性,然后如图27在左侧面板中点击Metadata。



这些控制和数据流容器对象在后面的章节会详细描述。

执行一个包
在这之前,我们只是讨论了设计包。如果希望执行1个包,你可以点击在工具栏上的运行图标,或按F5,或点击Start然后在菜单中点击Debug。这将设计环境转化为执行模式,开启一些新窗口,激活一些新的菜单和工具栏项,并开始执行包。当包完整的运行时,BI Development Studio不会立即回到设计模式,保留在执行模式允许开发者查看运行时变量或查看任何执行输出。这意味着你不能对包中的对象做任何修改,但是你可以修改变量和对象读/写属性。

为了回到设计模式,你可以在调试工具栏中点击停止图标或按Shift+F5,或选择Debug然后在菜单中点击Stop Debugging。

体系架构
在从SQL Server 2000数据传输服务演变到SQL Server 2005整合服务过程中,体系架构被重新检查来适应更健壮的,企业级抽取,转换和加载(ETL)环境。图28显示了SSIS体系架构。



数据源元素
独立使用SSIS的主要原因是同数据源中提取数据,转换并将其加载到其他的位置。数据源是用户使用的源和目的的连接。

数据源
数据源包含SSIS连接到OLE DB兼容系统的信息,例如SQL Server,Oracle,DB2或Microsoft Access。你也可以创建到非关系型数据源,类似于分析服务,XML数据源或Microsoft目录服务。你的数据源可以在Business Intelligence Development Studio项目中被多个包共享或在1个单一的包中使用。创建连接可以简单的通过连接管理器对话框,如图29所示。在这个对话框中,你可以创建一个到任意类型数据源的连接。图中的对话框显示了连接到SQL Server OLE DB数据源。



一旦在你的Business Intelligence Development Studio项目中创建了连接,这不意味着你已经连接到了数据源。直到在你的包中需要利用这个连接,否则它一直是断开的。这是一个好想法,当你在机场,无法实际连接到你的数据库上,你可以开发大多数SSIS包,然后将包和连接一起部署到运行的SQL Server。

数据源视图
数据源视图(DSV)是你的数据源的逻辑视图。它简单将数据库对象(表,视图和存储过程)逻辑上组成一个集合,并在你的项目中共享。数据源视图可以在分析服务和Report Builder中重用。

数据源视图非常类似于SQL Server中的关系视图并可以展现你的数据模型的业务逻辑视图。特别是在复杂架构例如在某些大型的企业资源计划(ERP)软件包,例如SAP,Seibel或Peoplesoft这样的环境中特别有用。为适应这些软件开发商开发有扩展性的应用程序适应各种公司,他们不得不通过数千个对象构建各种数据模型。有时这些ERP模型会有非常复杂的列名,类似A54210。这种环境中你必须精通整个数据模型并花费宝贵的时间将列转换为业务名称,这样减少了你做主要工作的时间。

在这种企业资源计划(ERP)的例子中,数据源视图(DSV)提供了1种分割着数千种对象到1个逻辑分组的能力,类似于账目,人力资源和库存。更重要的是,它可以让你给每个列指派友好名字的能力,这样你可以从复杂的名字例如A54210翻译成有意义的名称,并可以在以后为你的企业环境中的其他工具所使用。这样节约了你的时间并减轻了为数据源翻译列名的痛苦。

这里有一些关键的事情要在数据源视图中记住。类似数据源,DSV允许你一次性的定义连接,并在之后的SSIS包中重用。不像连接,DSV是从数据源连接断开的并且当数据源结构改变后不会刷新。例如,如果你在连接资源中改变了Employee表 ,DSV不会自动认识到改变。

在开发过程中这种缓存的类型有巨大的好处。DSV允许你利用缓存在开发环境中的元数据,即使你在机场等断线环境。这样也提高了包开发的速度。以后你的DSV更像是实际数据源的一个子集,SSIS连接对话框将会更快的被加载。例如图30中的DSV视图展示了AdventureWorks数据库的子集。在图中,你可以看到Employee表,我添加了一个友好名称VactionHours列兵在单词间加了空格。当你允许业务用户使用包或者分析服务向外暴露数据时,这将帮助提高在后面的数据可见性。



如果你开发SSIS包时使用DSV,即使在生产环境中不存在DSV,它也能正常工作。这是因为SQL展现DSV也是通过转换实现的。

连接
在SQL Server 整合服务中连接从DTS中有了深远的变化。代替了在1个DTS包中的局部的1个连接,你现在可以将连接在1个项目中跨多个包使用。这个优势的实际意义在于你可以通过一个应用程序部署一套包到生产环境并只需单一的改变连接到生产数据就可使用。在SQL Server 2000中,你不得不到每一个包中完成这个工作,并存在连接错误导致部署问题的风险。
即使你能在包内创建连接,但是这不是必须的。如果你自己预见连接只使用一次并且不会导致你的项目混乱,你也可以在你的SSIS包中创建连接。

控制流元素
在SSIS组件中控制流协调SSIS包地执行和条件流。控制流包含任务,这样处理工作的单元,例如通过FTP发送文件,也包含了约束,例如通过1个逻辑顺序约束不同的任务。

任务
就像在SQL Server 2000中一样,任务是SSIS包的基础。一个SSIS任务是在工具栏中的一个对象,用于处理一个工作单元。例如,有处理复制文件的任务也有其他的任务处理数据流。

共享的体系架构
在SSIS中每个任务包含一套标准的属性。SSIS环境可以在包括这些属性时通过厂商或用户编写自定义任务扩展处理功能。在每个任务重的一些基本属性是:
•        Disable –如果设置为True,该任务被禁用并将不会被执行。
•        DelayValidation –如果设置为True,SSIS将不验证在任务中的任何属性集直到运行时。如果你的操作是离线模式并且你希望输入的值直到包被部署时才验证。这个属性的默认值是False。
•        Description –描述任务的实例。默认值是任务名称。它不需要唯一,应该为在你的操作组中监视包的用户提供正确的任务描述。
•        ExecValueVariable –包含将存储在任务执行的输出中自定义变量的名称。默认值是空,意味着执行的输出将不被保存。
•        Fail Package on Failure –如果设置为True,如果个别任务失败将导致整个包失败。默认值为False。
•        Fail Parent on Failure –如果设置为True,如果个别任务出现一个错误,该父对象将失败。任务的父对象可以是包或容器。你可以在后面读到更多关于容器的信息。
•        ID – A unique ID that is associated with an instance of a task.和该任务实例关联的唯一ID。ID的GUID格式如同: {R438HJI-7DN3-I8EF-NFUF-JF83AFFJ83A}
•        IsolationLevel –如果在TransactionMode属性中激活事务,指定事务的隔离级别。值可以是:Chaos,ReadCommitted, ReadUncommitted,RepeatableRead,Serializable,Unspecified。默认值是Serializable。
•        LoggingMode –指定这个任务完成后的日志类型。值包括:UseParentSetting,Enabled和Disabled。默认值是UseParentSetting,该设置告诉人物使用包或容器的日志机制。
•        Name –联系该任务的名称。默认值是任务名。做为SSIS设计者,你可能希望改变它的名称使它在运行时有更好的可读性。这个名称在你的包中必须是唯一的。
•        TransactionOption –指定任务的事物属性。值包括:NotSupported,Supported,和Required。默认值是Supported,可以在你的任务中利用事务。

现在你知道了当选择一个任务后的常规属性,让我们再看看在SSIS中通常使用的任务。注意Maintenance Plan任务也在同一个工具栏里,但是默认没有被折叠。

Bulk Insert 任务
The Bulk Insert 任务 (图31) 几乎和SQL Server 2000 DTS中同名任务一样。当你不需要转换时,这个任务使用最快的方法从一个平板文件将数据装载到SQL Server中。与SQL Server 2000中的版本不同的是在SSIS任务重使用常规的数据源连接。在SSIS中,你不能在这个任务生成这种格式的文件,作为你相应DTS的任务。你将不得不从BCP控制台生成格式文件。



数据流任务
熟悉SQL Server 2000 DTS的人可能还不理解SSIS中的数据流任务。这是一个在SSIS中十分特殊的1个任务,不同于其他的任务。我们会在后续篇幅中详细描述。在SSIS体系架构中最大的改进就是你不需要创建阶段表来完成普通的任务,例如聚合数据。

Data Mining Query 任务
Data Mining Query任务比SQL Server 2000中有了很大的进步。就像在SQL Server 2000DTS任务中,Data Mining Query任务允许你根据你的分析服务中的数据挖掘模型运行预测查询。不像DTS,在SSIS中,你可以将结果集保存到1个SSIS参数中,并且该任务可以有数据参数。你也可以使用这种任务将输出结果保存到一个表中在后面的控制流中使用。

Execute Package 任务
Execute Package 任务(图32)允许你从父包中执行一个包。这个任务在SSIS版本中有很多好地增强。其中之一是你现在有一个新的属性ExecuteOutofProcess。如果设置为True,将在这个包自己的进程和内存空间中执行这个包。默认值是True。这需要更多的内存来将任务完成得更好。另外一个关键的不同时,在这个版本中任务不再将参数推到子包中。而是,子包将延伸到父包,并获取配置值。



Execute Process 任务
Execute Process任务(图3)和在SQL Server 2000中的相同,可以执行一个批处理文件或可执行的包。这个任务引人注意的增强是提供了个多种扩展性方法。例如,你现在能指定传递到进程的输入变量或将执行的数出做为输出变量。也有一个错误数据变量包含在运行进程中所遇到的错误。这允许你处理错误,比之前的版本提供了更好的扩展性。



Execute SQL 任务
Execute SQL 任务(图34)可以通过1个连接(不仅是SQL Server 连接)执行关系查询,DDL,或DML。在SSIS中,除了直接输入查询外,你还可以将查询存储在1个平板文件或做为1个参数。当你希望从1个外部的DDL文件创建安装过程,或者如果你希望从SSIS过程外的SQL文件创建一系列要重用的方法库时,这个功能很有用。和以前的版本一样,你可以轻松的在查询中传递输入和输出变量。全部查询的结果可以存储在1个变量中。



File System 任务
这是一个新的SSIS任务(图35)允许你控制文件系统,这在DTS中需要大量的脚本来完成。在多数ETL过程中,你从不同的主机中获取文件然后处理并将文件存档到其他的文件夹中。在这个过程再次运行前,你必须清理包含这些文件的目录。

File System任务可以帮助你完成在之前的ETL示例中所有对文件系统的操作。该任务可以处理文件夹操作,例如创建,重命名或删除文件夹。它也可以管理文件的操作,例如移动,复制或删除文件。所有这些操作在SQL Server 2000中将不得不需要复杂的脚本操作。



File Transfer Protocol 任务
File Transfer Protocol任务允许使用FTP完成文件操作。这个任务继承于SQL Server中的但是增加了很多新的功能。在之前版本的SQL Server File Transfer Protocol任务中你只能使用FTP接收文件。在SQL Server 2005中,你可以通过FTP完成发送,接收,创建本地和远程目录。该任务也可以使用FTP连接管理编辑器注册FTP连接,就像在SSIS中的其他连接类型(见图36)。一个关键的增强时你可以使用FTP的被动模式完成所有操作。因为在SQL Server 2000中没有这个特性,你不得不通过Execute Process任务加载FTP.EXE来完成。



该任务现在还可以在源和目的文件夹中使用SSIS中的变量(见图37)。  



Message Queue 任务
Message Queue任务比SQL Server 2000中的有了明显的改进。就像之前的版本,它可以向Microsoft Message Queue发送数据文件或字符串。另外,你现在可以向队列中发送SSIS变量。你现在也可以将要发送到队列上的数据加密并使用证书来做验证。

Message Queue 任务是一个强大的应用程序,当你使用它从包到包发送消息并行运行你的包。例如,每个SSIS包完成一段工作一旦子集包的工作完成时将向下进行其他操作。另外一个消息队列的应用是分布式环境,每个区域办公司处理自己的数据,然后发送到公司服务器通过消息队列处理。公司的SSIS包在这种情况下会监听从区域办公室发送的数据然后开始聚合。



Script 任务
在很多ETL开发者眼中从SQL Server 2000迁移到SSIS的主要原因将是Script 任务(在SQL Server 2000 DTS中使用了ActiveX Script任务)。新的Script任务有丰富的设计界面(见图39)在Visual Studio中有智能感知和脚本代码颜色的功能。



Send Mail 任务
Send Mail任务(图40)允许你向用户或邮件列表发送e-mail消息。不像在SQL Server 2000中,现在它使用SMTP而不是MAPI。这意味着你将不需要在运行SQL Server并运行这个任务的机器上安装Microsoft Outlook®。E-mail消息可以使用类似于Notepad的界面录入。消息的正文可以从文件输入或从DTS变量获取。



SQL Server Analysis Services Execute DDL 任务
新的SQL Server Analysis Services Execute DDL任务允许你执行DDL来创建,修改,删除或处理分析服务对象。你能执行存储在任务中的变量或在外部的一个文件中的DDL代码,。
SQL Server Analysis Services Processing 任务
SQL Server Analysis Services Processing任务继承于SQL Server 2000中的Analysis Services Processing任务,但是提供了更多的功能。任务可以处理分析服务中的cube和维度,但是现在添加了并行的层次,可以使你同时处理多个对象。你现在也可以制定如何处理错误。很重要的是这个任务和SQL Server 2000 cube和维度并不兼容。
Web Service 任务
Web Service任务是SSIS中新的任务用来执行Web Service方法。一旦你执行了方法,你可以将结果从Web Service写到文件中,或写到一个变量中。这在和第3方应用程序的业务交易中非常有用。例如,你能通过执行Web Service方法从Amazon获取更新的产品列表。然后将产品写入到一个文件并输入到你的数据库中。
Web Service任务通过使用HTTP连接管理器连接到Web Service。HTTP连接管理器时你能用过代理连接到Web站点或者用它做验证。在Web Service任务中,你能使用内部或外部的Web站点。你也可以指向本地的Web Service Description Language (WSDL) 文件,列出可以被调用的方法。如果你使用外部的Web站点,你必须将WSDL文件复制到本地。
你连接的Web Service也许需要输入参数。输入参数通过变量传入任务。例如,你可以向Amazon发送一个类别的请求,Amazon将返回新书的列表。这通过在任务中的Input栏配置。输出结果在Output栏中配置,可以配置任务的输出到变量或文件。
WMI Data Reader 任务
Windows Management Instrumentation (WMI) 是在Windows中最保密的组件。WMI允许你通过脚本接口管理Microsoft Windows® 服务器和工作站。WMI Data Reader任务(图41)允许你通过编写WMI Query Language (WQL) 查询连接到这个服务器或工作站环境。例如,你可以使用它查看应用程序日志。这种查询的输出可以写到文件或变量中。



WMI Event Watcher 任务
WMI Event Watcher任务(图42)使SSIS能够等待和响应某种发生在操作系统中的WMI事件。例如,你可以设置任务来相应一个给定的错误,当写入应用程序日志中触发。另一种很好的使用是在目录中一系列的文件写入后,执行一个方法。这是一个很普通的ETL过程。在WMI Data Reader任务,你能使用WQL查询语言查询WMI。WQL查询可以从文件或变量中读取,或者在任务中直接输入。



XML 任务
XML任务是一个全新的任务,能通过你的XML文件完成很多不同的功能。它允许在运行时SSIS动态的修改,合并或创建XML文件。任务完成的功能有:
•        获取一系列XML文件并将起合并为1个单一文件。
•        通过XSLT为报表准备XML文件。
•        使用XPATH获取XML片断。
•        比较2个XML文件并将差异写到XML DiffGram。
•        通过Document Type Definition(DTD)验证文档。
基于你选择操作类型,任务对话框会有很大的不同。图43 显示了你如何使用XML任务编辑器验证XML。你将验证的结果输出到1个变量。



还有其他的任务,例如SQL Server使用的SQL Server维护计划,这些可以展开维护计划任务面板看到。
优先约束
优先约束基于给定的条件指引SSIS包中的工作流。优先约束在SQL Server 2005整合服务中有了显著的增强。
约束值
和在SQL Server 2000 DTS一样,优先约束有3种条件:
•        完成-完成约束意味直到之前的任务执行否则后续的任务不会执行,不论改任务成功或是失败。
•        成功-成功约束意味着直到之前任务成功地执行后后续任务才能执行。如果之前任务执行失败,则这个分支上的后续任务将不会执行。
•        失败-失败约束意味着后续任务只能在之前任务执行失败后才能执行。这种约束典型应用是失败后的E-mail通知。
条件表达式
优先条件最大的增强是能够添加条件表达式连接你的任务或循环直到定义的条件满足。我将在后面的部分给出很多示例来展示如何使用这个特性。
评估操作符
评估操作符给程序员这种能力在一个包中创建真正的工作流来通过条件指引工作流任务。一旦你创建了优先约束,你可以设置EvalOp属性来确定是否满足优先约束标准:
•        约束- 默认设置仅评估约束。
•        表达式-仅评估表达式。
•        表达式和约束-在运行到下一个任务前评估表达式和约束。
•        表达式或约束-在运行到下一个任务前确定表达式或约束成功地满足。
逻辑评估
最后一个需要提及的优先约束属性是LogicalAnd。这个属性控制在下个任务进行前,是否多个任务必须执行来满足指定条件。默认值是True,确认多个约束做为一个SQL中的And进行工作。
容器
容器是控制流架构和SSIS对象模型中的核心组件。他们帮助你将任务逻辑分组到工作单元或创建复杂的条件。有4种类型的容器:Task Host,Sequence,For Loop和Foreach Loop容器。这允许你:
•        在执行后续任务前,任务分组必须完整成功或失败时根据约束设置分组。
•        循环执行一系列任务直到给定条件满足
•        在集合中循环执行一些列任务历遍每一项。
Task Host 容器
Task Host容器是默认单任务的容器。如果你不为一个任务指定容器,它将被放入Task Host容器。SSIS架构在整个Task Host容器中为任务扩展了变量和事件处理。
Sequence 容器
顺序约束处理包中的流的子集并能帮助逻辑的将包分成较小的可管理部分。在一些应用程序中你可以使用Sequence容器:
•        禁用包中部分功能区域。
•        提供较小变量范围而不是整个包。
•        在容器中通过设置每个独立任务属性提供可管理性。
Sequence容器在你的控制流中显示任何其他任务。一旦你从工具箱中拖放Sequence容器,你可以将任务拖拽到容器中。图44给我们一个2个容器的示例。左边的容器是一个Sequence容器有2个任务在执行ForEach Loop容器前必须成功执行。我们在后面会提到这个容器类型。



For Loop 容器
For Loop容器循环容器中的任务直到给定的条件满足。例如,在图45中,Send Mail任务执行4次。然而这个例子有点不切实际,它只说明了For Loop容器的能力。容器也能包含其他容器创建嵌套的循环。


图45
在图46中,有3个主要的元素。第一是InitExpression参数,用于初始化参数的第一个值。EvalExpression是导致SSIS运行时引擎中断For Loop容器的条件。最后,AssignExpression是可选属性,迭代之前在InitExpression属性初始化的参数。



更实际的使用这个容器是循环1个WMI Event Watcher任务或者Message Queue任务监视一个任务。在Message Queue任务示例中,在执行该分支的后续任务前,你可以等待从不同服务器传入的一系列包。这里,你使用For Loop容器循环了Message Queue任务,等待Message Queue任务写到SSIS变量表示成功。之后,一个OnSuccess约束将指引包到分支的下一个任务。
Foreach Loop 容器
最令人兴奋的新容器是Foreach Loop容器。它节省了典型DTS开发者更多的时间。Foreach Loop容器允许SSIS开发者循环一个集合,例如文件,Microsoft ActiveX® Data Objects (ADO) 结果集或变量,来完成在容器中的一系列任务。
这有一个Foreach Loop容器的示例,在ETL过程中经常发生。你写一个包递归一个目录中的文件,并在加载每个文件时执行子包。在SQL Server 2000 DTS中,这需要在ActiveX Script任务编写很多代码。在SSIS中,你只需要创建容器,并设置Enumerator属性为For Each File Enumerator像图47中所示。然后指向Enumerator配置节设置循环和文件类型。一旦枚举找到文件,可以映射文件名到连接或SSIS中的变量 ,可以在循环内动态的驱动包的运行。



图47
在Collection栏中显示的信息基于你设置的Enumerator属性更改。下列是一些枚举类型:
•        For Each File Enumerator-循环一个文件集合实现要完成的操作。
•        For Each ADO Enumerator-循环一个ADO结果集中的记录集合。结果集将存储在SSIS中的一个变量。
•        For Each From Variable Enumerator -循环一个SSIS变量。
•        For Each NodeList Enumerator -依据XPATH信息循环XML文件。
•        For Each SMO Enumerator -在所有级别上循环SQL Server对象列表。
当你循环一个集合时,容器将集合中的值指派到容器内的任务或连接上 (图48) 。你也可以将值映射到变量上。



变量
自从SQL Server 7.0中,全局变量(现在叫做变量)已经是用于不需要硬编码动态配置包的重要元素。在SSIS中,这种功能已经被无限的扩展为处理更健壮的变量处理和范围。
在SQL Server 2000中,只有一种变量类型,全局变量。这个范围是这个包。现在在SSIS中,变量范围可以是包,容器或系统。这帮助包更好地在其他包间共享变量。它也帮助在工作单元范围内保持变量。因为这种能力,在你的产品中创建一个ETL过程更简单,在Script 任务中需要很少的代码。
因为现在的变量是给定范围的,你需要完全的变量名。变量全名包括变量类型和名称。例如,一个系统变量将称为System::VariableName,而用户变量将称之为User::VariableName。
动态改变属性
你也许注意到这里没有提到SQL Server 2000 Dynamic Properties 任务。这个任务现在已经被删除了,因为每个任务和约束的属性可以基于变量被动态的改变。当你希望执行任务连接到在运行时才知道的数据源时,非常有用。你可以在图49种看到这个功能的示例,XML任务的连接使用了XPathResult的变量。



你可以在优先约束中使用变量满足某种关键条件来驱动包中的工作流。为了实现这种功能,在优先约束上双击,并像图50中一样改变约束属性。你应该先设定评估操作(EvalOp属性)包含要评估的表达式。你可以评估表达式或指定之前的任务必须成功,及在继续前需要满足的关键条件。最后,制定你要评估的表达式。变量使用@符号来指定。



我们的示例中,你可以看到如果@NumberWidgets变量小于10,我将收到坏的XML文件并发送一个消息。如果你有多于10个产品,数据将被验证,我可以写XSLT文件作为输出。当它执行时,你可以看到XML被验证,只有XSLT To TextFile任务执行。Send Mail任务被忽略。



另外值得提一下的特性是可以设置变量为只读。通过设置变量为只读,你可以本质上视变量为常量。这允许在设计时其他的开发者可以改变变量,但是在执行时不能更改。
属性表达式
属性表达式允许你在运行时动态设置变量。使用表达式语言构件的表达式允许你轻松的改变任务属性,连接,日志提供者和ForEach枚举。之前版本,你不得不使用Dynamic Properties任务在运行时改变属性,但是属性表达式更强大。你可以在以下时刻使用它改变属性:
•        任务
•        保存前
•        加载后
•        初始化前
•        验证前
•        执行前
•        连接管理器
•        保存前
•        加载后
•        初始化前
•        从AcquireConnection调用返回前
•        日志提供者
•        保存前
•        加载后
•        初始化前
•        ForEach 枚举
•        保存前
•        加载后
•        初始化前
•        从GetEnumerator调用返回前
例如,你可以每天从主机中接收文件,然后将它移动到被处理的文件夹并添加时间戳,你可以使用属性表达式联合File System任务动态设置目标文件名。
数据流元素
正像控制流处理包中的主要工作流一样,数据流处理转换数据。几乎任何操作数据都归到数据流类别。为了产生数据流,你可以添加数据流任务到你的控制流中。
数据流引擎的最大增强是更多的数据操作可以在内存中完成。例如,你可以从平板文件数据源获取详细订单数据,然后排序,聚合并输出到其他平板文件,而不像以前需要写到SQL Server中。
数据源
数据源是你指定的数据位置。数据源通常在SSIS中的连接管理器中指定。通过在连接管理器的指定,你可以在这个包中重用连接,因为你只需要在一个地方更改连接即可。在SQL Server 2000中,数据源和目的数据源实际上本身就是连接。
OLE DB 数据源
OLE DB数据源可能是在工具箱中最经常使用的数据项。就像在SQL Server 2000 DTS一样,OLD DB连接几乎可以连接到任意关系型数据源,例如SQL Server,Access,Oracle,或DB2。在SQL Server 2005中,当你添加OLE DB数据源,将被提示提供要使用的连接。如果是常规的数据库,你可以从数据源视图中选择指向的连接。你可以在图52中看到鼠标指向Transactions DSV而不是包含所有未修改对象的主共享连接AdventureWorks。



一旦你选择了数据源(图53),你可以选择列栏并通过钩选数据流中可用的列选择你希望传递到在数据链中下一个数据项的列的子集。你可以通过修改输出列条目来重命名在数据流中要表现的列名。



Flat File 数据源
Flat File数据源提供了为非关系数据源的连接。Flat File数据源典型的是逗号分隔符或制表符分隔的文件尽管他们也可以有固定的宽度。你像指定OLE DB数据源一样指定Flat File数据源。一旦你在数据流面板中添加了Flat File数据源,你可以在连接管理器找到它。之后,你在列栏中指定你需要在数据流中表现的列。所有平板文件的规范,例如分隔符类型,将在之前的Flat File连接管理其中设定。
Raw File 数据源
Raw File数据源是专门为SSIS优化过的平板文件类型。Raw File文件通过早期的Raw File目的数据源创建。列不能添加到Raw File数据源,但是无用的列可以向其他的数据源一样从数据源中移除。因为Raw File数据源需要甚少的转换,它可以比Flat File数据源更快的加载数据。代价就是丧失了一些适应性。
XML 数据源
XML数据源允许你使用XML文件或数据项中获取数据。一旦数据项添加进来,你可以在XML location属性硬编码XML文件位置或者可以通过变量指定。你可以指定XML数据保存在一个变量中。这种数据源在与Web Service任务或XML任务联合使用时十分有用。一旦你指定XML文件的数据项,你必须生成一个XML架构(XSD)文件,可以通过Generate XSD或指定存在的XSD文件。类似于其它数据源你也可以过滤在下面数据链中不希望出现的列。



DataReader 数据源
DataReader数据源是一个ADO.NET连接,很像你在应用程序中使用.NET Framework使用DataReader接口代码连接到数据库。DataReader数据源允许你连接到托管连接管理器并传递SQL查询。查询的结果可以在后面的数据流中使用。主要要考虑当使用这种数据源时,你不得不手工的输入SQL查询,没有其他源中的查询设计器。
目的数据源
在数据流内,目的数据源接受从数据原来的数据。可扩展的架构可以发送数据到任何OLE DB兼容的数据源或平板文件。在这篇介绍性的文章中包括了大部分的目的数据源。几乎每个目的数据源共享的属性都在2个重要的截图上。一般在连接管理器栏,你可以设置目的数据源的连接信息。然后你可以在图55中的Mappings中映射数据流中使用的和在目的数据源中使用的列。



SQL Server 目的数据源
SQL Server 目的数据源是一种为SQL Server优化过的目的数据源。它通过SQL Server内建的批量导入的特性来获取更好的性能。在目的栏中的高级选项中,你可以配置批量导入的特性,例如执行的触发器或表锁定等。图56显示了默认开启的选项。更重要的要知道,这个目的数据源只能使用在与这个包运行在同一台SQL Server上,因为它是使用了内存作为数据交换的接口。



Raw File 目的数据源
Raw File目的数据源(也叫做Append目的数据源)将数据用裸露格式写入文件。因为使用了自身的格式,是将数据导出为文件的最快方式。这个任务可以用于将数据写入临时格式,在后面的转换操作可以用作为Raw File数据源。
OLE DB 目的数据源
这是OLE DB包含说有数据库类型的示例。OLE DB目的数据源可以用于向几乎所有关系数据源中发送数据。它基本上和其他的目的数据源配置相同。这个目的数据源提供了将失败的行重定向到不同的表或导致组件失败的能力(图57)。为了重定向行,你添加一个额外的目的数据源连接用于接收接受这些有问题的行。



Recordset 目的数据源
Recordset目的数据源是一个非常灵活的目的数据源,允许你将数据流存储在SSIS内存中的结果集中。当你的包运行时,SSIS将数据流存成一个变量。这可以在之后的Foreach循环任务中使用。
DataReader 目的数据源
DataReader目的数据源(和DataReader数据源没有关系)是一个强大的目的数据源,可以将输出通过管道暴露给ADO.NET应用程序,例如报表服务或使用DataReader接口的自定义应用程序。为了帮助你在后续应用中使用,确认你的目的数据源的名称在之后你的应用程序中是可以是别的。在图58中,你可以看到我的目的数据源的名称是OutputAfterAggregation。



图58
如果你希望在报表服务中中使用这个数据源,你要确认在报表服务中可用SSIS连接类型。在报表服务中,确认在RSReportDesigner.config文件中的<DATA>节有SSIS扩展。在SQL Server 2005 Beta3的安装中已经帮你完成了这个操作。在报表设计器中,你将看到一个新的连接类型叫SSIS。选择这个数据源,然后输入类似如下的名称:

-f C:\SamplePackages\RSSFeedFromPartner.dtsx
在查询窗口中,指定你希望获取数据的DataReader目的数据源。每当报表需要数据时,DTS包将被执行,你将看到暴露在管道中DataReader目的数据源中的数据。为了完成你设想的场景,你必须在包中有一个数据流任务。
当在报表服务或你的应用程序中,要显示非SQL Server数据转换后的结果时将非常有用。用户可以在报表服务中订阅RSS,并使用订阅将订阅者的数据推给订阅者。
数据转换
SSIS包含了许多新的使用不同方法转换数据的对象,包括了清理,转换,分发和合并数据这些转换操作,方便了开发一般商业智能任务。
扩展或修改数据
下列转换都是在转换过程中通过添加,清理或直接修改的方法扩展数据。
Aggregate
Aggregate转换任务将一个数据集做为输入并在数据集上应用Sum,avergae,count,distinct count,maximum或minimum函数。它可以根据一个或多个列分组。这种转换可以用于不需要在关系数据源中写入汇总大量数据或给数据源系统增加额外的负载的场景中。在图59中实现了一些在Adventueworks数据仓库中Employee维度表的聚合(Sum,Average,Max,Min)并根据Department分组的功能:



在图中利用数据查看器显示了插入到目的数据源中的Aggregate转换结果。



Audit
这个转换可以在数据流中访问环境和包的数据。通过配置转换,可以向目的数据源添加列来存储你希望审核的属性。可以插入数据流中的审核属性包括:
•        ExecutionInstanceGUID
•        PackageID
•        PackageName
•        VersionID
•        ExecutionStartTime
•        MachineName
•        UserName
•        TaskName
•        TaskID
在需要审核谁在什么时候执行包时,这个转换非常有用。例如,你向账单表中添加一些列来审核如何向表中添加记录的过程。
Character Map
Character Map转换可以在列中应用字符串转换,生成新列或代替原列。Character Map转换包括:
•        Lowercase –转换为小写字符。
•        Uppercase –转换为大写字符。
•        Byte reversal –按字节顺序倒序。
•        Hiragana –从片假名映射到平假名。
•        Katakana –从平假名映射到片假名。
•        Half width –从双字节字符映射到单字节字符。
•        Full width –从单字节字符映射到双字节字符。
•        Linguistic casing –应用语言的大小写而不是系统规则。
•        Simplified Chinese –将字符映射到繁体中文。
•        Traditional Chinese – 将字符映射到简体中文。
Copy Map
Copy Map转换允许复制列并将副本发送到目的数据源。Copy Map转换的典型应用是在将副本列转换时,保留原有列的副本。
Data Conversion
Data Conversion可以将数据源中的列转换成目的数据源中不同的数据类型。
Derived Column
Derived Column转换可以使用SSIS表达式转换数据。例如,你可以在一个数字列上应用CEILING函数并将输出生成一个新列。你也可以通过表达式应用条件if语句。
Fuzzy Grouping
Fuzzy Grouping转换在转换时通过在数据行中识别相似数据实现清洗。转换的输出包括3个额外的列,每行的唯一标识,组标识和相似可能性(0到1)。基于你在任务中定义的可能性阀值,你可以在匹配精确度有很高的信心等级。例如,如果配置的信心等级为80%,任何高于这个可能性将被视为匹配的。任何低于这个值的将需要手工确认是否匹配。这个转换的典型应用是当数据源是自由表单输入( 例如Micorosft=Micro soft=MicroSoft等),并需要将相同的公司名称分组。
注意该转换需要连接到SQL Server 2005数据库来创建临时状态表进行分组算法的操作。
Fuzzy Lookup
Fuzzy Lookup转换完成数据清理操作,包括标准化数据,纠正数据和提供缺失值。输入数据和已存在的数据集通过查找相似值的算法进行引用关联。
该转换的典型应用是为没有精确匹配的记录进行标准的Lookup转换。该转换不同于Lookup转换,它使用模糊匹配而不是精确匹配。  
Lookup
Lookup转换使用精确匹配查找引用的数据集合。Lookup转换比DTS 2000中的有了很大的改进,可以通过修改缓存和内存限制来调节。同样,查询可以向数据流中添加新列来保护原有列的自然键值。
该转换的典型应用是在数据仓库加载维度时完成代理键查询。
Pivot
Pivot转换通过在列值上旋转输入数据将标准化数据转换为非标准化的版本。该功能类似于在Microsoft Excel中的透视功能,但是可以应用在管道中的数据。
Sort
Sort转换在将数据发送到目的前完成对输入数据的排序。它可以在多列上进行升序或降序,也可以基于一些比较标记排序,包括大小写敏感,单/双字节和发音。
Unpivot
Unpivot转换完成Pivot转换的反向操作。
分发, 合并或抽取采样数据
下列转换完成对数据的分发,合并或抽取。
Conditional Split
Conditional Split转换可以基于所满足的编程条件将数据路由到不同的输出上。没有没有满足的条件,数据自动的被路由到指定默认条件的目的。BI Development Studio将为每个场景提供注释也包括默认输出。每个条件必须有唯一的目的。
Multicast
Multicast转换可以将同样的数据流复制到多个目的上。复制是逻辑上的复制,但是典型应用是当详细数据继续常规的转换时,复制多分数据集副本到不同的转换。注意,Multicast转换在实际完成转换时不支持错误输出。
Merge
Merge转换基于他们键值,将二个排序的数据集合并到一个输出。该转换需要输入都进行过排序并且合并的列有相同的数据类型。不同长度的数据类型是可以接受的,在第2个输入中的相应列要小于或等于第1个输入。Merge转换的典型应用是将通过Lookup转换和Fuzzy Lookup转换的结构合并到一个单一的数据流中。
Merge Join
Merge Join转换类似于Merge转换,但是它允许通过使用FULL,LEFT或INNER Join将2个排序的数据集生成一个输出。Merge Join转化的需求和Merge转换相同都是需要排序的数据和元数据的匹配。
Union All
Union All转换合并多个输入到一个输出。不同于Merge和Merge Join转换,因为它不需要排序的输入。然而输出也不是排序的。第一个输入与引用的后续输入必须满足使用下列标准:
•        数据类型
•        编码
•        精度
•        数值范围
•        长度
•        比较标记
在其他输入中没有和引用列映射上的列在输出中将被设置为NULL。
商业智能转换
Data Mining Query
Data Mining Query转换根据数据挖掘模型完成预测查询。为了创建Data Mining Extensions(DMX)查询,它包含一个查询构建器,选择挖掘模型,转换输入数据,预测方法和自定义的表达式。
如果模型基于相同的发掘结构,一个转换可移执行多个预测查询。
转换需要一个分析服务数据库的连接,该库包含挖掘结构和挖掘模型。

Slowly Changing Dimension
Slow Changing Dimension转换或SCD转换在SSIS中是最精妙的转换。它自动化和标准化共同,但复杂的问题,如何在数据仓库中跟踪属性的更改。令人感激的是他的配置是一个向导,指导开发人员通过转换的配置步骤完成转换。
SCD向导第一步配置维度数据目的数据源和业务主键。列自动映射名称和初始数据类型,但是用户也可以手工映射。而数据类型必须一致。图61展示了向导中第一个对话框,映射输入的列。



下一步将把你带入一个冗长的任务,选择维度列是固定的或是Type I或 Type II变化维度。在向导的这个部分,你要选择当在数据源中的维度数据发生改变后ETL如何处理。例如,如果你有一个包含3个列的员工维度,BirthDate,Phone和Department,业务要求跟踪3个列上不同的更改:
•        业务要求生日不能改变(如果改变,引发异常)。
•        业务希望可以更改Phone,但是不保存Phone的更改历史。
•        业务希望可以更改Department并需要对更改进行存档。
SCD转换支持这种抽取场景并允许设计者为每个属性选择适当的业务规则,图62所示。



在向导中接下来的一些新的步骤配置了关于如果在一个固定属性发生改变时的处理或当可更改属性被删除时如何保持记录,和如何使用当前/过期标识或开始/结束时间戳来跟踪历史属性。
最后的步骤是指定配置的推断成员。推断成员将在关联事实记录出现时被加载到维度表中,其中没有关于维度成员的其他信息。一个普通的示例是在零售场景中,当数据仓库受到一个关于卖出产品的事务,但是在主产品维度中没有这个产品的记录。SCD转换无论如何会加载这个维度(通过在事实表中的键值)。如果或当支持的维度数据到达时,它将更新存在的推断成员记录。图63显示了在SCD向导中的推断维度对话框。



向导的最后一步允许回顾将被创建的输出(最多6个输出)。SCD向导将为每个输出连同一些在SCD中支持的其他转换创建新的OLE DB目的数据源。输出将类似于图64所示。



注意当你重新开始SCD向导,任何在屏幕上的更改都会重写在画图界面上任务的布局。
杂项转换
File Extractor
File Extractor转换可以从流中直接获取TEXT,NTEXT或IMAGE数据并插入一个文件。在源中每行可以输出到不同的文件。目的文件可以在空闲时创建并且数据可以从一个文件中被附加或截断。
File Inserter
File Inserter转换类似于File Extractor除了File Inserter可以为数据集中的每行打开并从文件读取数据。文件数据的目的数据类型必须是TEXT,NTEXT或IMAGE类型。
OLE DB Command
OLE DB Command转换可以在数据集中的每一行执行SQL语句。SQL语句可以包含参数。该转换的典型应用是当在结果集上完成独特操作时代替Transact-SQL游标的功能。
Row Count 转换
Row Count转换对传入的行计数并将计数储存处在一个变量来用于验证数据和处理。也可以用于更新Conditional Split转换或循环容器。
Script Component
Script Component可以在数据流中通过脚本操作数据。他的特性类似于在控制流中的Script任务。一个Script Component在数据流中的典型应用是在每行中应用多个基于脚本的转换,而不是通过使用多个基于任务的转换。另外一个典型应用是类似于从现存的代码片断中进行业务转换。也是一个创建自定义转换的方法。
Term Extraction
Term Extraction转换可以从文本列中抽取熟悉的术语并将输出写入不同的数据源。例如,Term Extraction转换可以在文本中查找关键字或名词,而忽略冠词或动词。输出结果包含一个单词列表可以用于确定文本的内容。
Term Lookup
Term Lookup转换在输入数据集中与引用数据集进行匹配并记录在输入数据集中出现的次数。它可以规格化单词包括复数和所有格形式。例如,通过一个关键字列表比较输入注释字段,将包含关键字的注释路由到适当的位置。
事件处理元素
在SSIS架构中,有事件和事件处理的概念。在之前的版本,包级别的事件可以在Visual Basic或Microsoft Visual C++®环境中通过编程访问包的执行。在SSIS中,包事件在用户界面中暴露为事件,每个事件都有自己的事件处理设计界面用于实现复合工作流。事实上,每个可执行的容器任务的事件在包执行时暴露出来。在SSIS运行时中提供的事件处理在下面列出:



通过多种事件处理,事件架构给开发提供简单,统一的处理解决方案,例如包或容器范围的错误处理和报表。(事件处理在SQL Server 2005联机丛书中有详细地描述)。加之在架构中广泛的事件模型允许深入解决方案进行底层的事件处理。这种底层的解决方案可以基于控制流任务或数据流任务级很好的支持ETL的控制。
异常处理元素
在SSIS中的异常处理比DTS 2000中的更健壮。SSIS可以通过使用一些新的功能用不同的方法管理错误。这可以友好的基于错误类型或时间或错误发生的位置来处理或忽略错误。SSIS允许开发者有效的处理过程和数据的错误。
过程错误
与DTS 2000中一样,SSIS支持OnFailure约束所以如果任务失败,你可以图形化的路由执行流到处理这个错误的任务。你也可以通过将约束执行结果改为OnCompletion来忽略发生的错误。在DTS 2000中,这意味着包将向调用他的应用程序(类如SQL Agent)报告失败,尽管这种失败可能很小并可以恢复。  
SSIS通过支持新的属性ForceExecutionResult使设计者更灵活。这个属性可以被设置为None,Success,Failure或Completion。通过将属性设置为Success或Completion,你可以强制SSIS在执行完该任务后不管发生什么总是返回成功。
SSIS也可以为任何控制流项包括数据流任务捕获OnError和OnTaskFailed事件。通过使用事件处理,你可以简化你的项目设计也可以利用事件级变量。你可以根据你的需求在包的OnError或OnTaskFailed事件写一个错误处理 。  
数据错误
SSIS允许在数据流设计器中直接处理错误数据或不一致的数据。数据错误可以有很多原因引发,包括不一致的源数据或程序错误。然而SSIS不需要触发包错误就可以传递,失败或从定向问题数据;SSIS可以修复和嵌入的再生,或保存到磁盘然后处理,这些都在数据流设计器中完成。
例如,如果你插入一行违反了主键或外键约束,这行可以被推到一个错误表以后处理。图65展示了这个事例。



错误处理可以为错误行创建将要流入的目的数据源(OLE DB,Flat File或Raw File)。当你点击转换的目标,一个红色的箭头显示出来类似OnFailure约束。将这个箭头托拽到新的目的,错误输出对话框将如图66显示。



这里有2种不同类型的数据错误可以被自动的处理:致命错误(例如违反主键)和切断错误。错误可以被传递,失败或重定向到其他目的。在上面的例子我们将发生在Col1,Col2或Col3中任意致命错误传递到错误数据源,但是允许切断错误成功传递过去。下面的表描述了处理选项:



如果你决定通过将错误发送到新目的的方法处理你的错误(而不是忽略或失败整个包)。你需要为错误设置映射。在错误目的连接双击,选择你希望复制错误数据的表,然后选择Mapping栏(图67)。你将注意有2个额外的列在可用输入列中:ErrorCode和ErrorColumn。这将包含导致失败转换的特殊行的错误信息并插入到错误表中。



最后的步骤是在转换目的中禁用快速加载属性。如果开启,SSIS将尝试批量插入,这样行级错误将不可用。这明显的有性能问题,但是如果对重定向的所有数据错误感兴趣,这种折衷也许是值得的。
日志和审核元素
  SSIS日志引人注目的支持更好的日志收集能力。就像之前版本,SSIS支持包级和任务级日志,但是现在设计者可以为每个任务和包定义不同的日志选项。新的日志也支持为每个任务或包的事件创建日志项。这意味着每次任务抛出错误,警告或变量变化时你可以选择日志信息。
你可以通过右击控制流设计器并选择Logging或在DTS 菜单中选择Logging来在你的包中激活日志。默认情况,日志没有被激活,所以你需要在开始配置中添加至少一个包级别的提供者。在图68中的例子中,在包中起用了3个提供者:



一旦激活,你可以选择指定任务记录然后配置日志细节。在Details栏,你要注意一个Advanced按钮。如果你点击它,你将看到能被记录的全部事件和属性(如图69)。



可以在任务级别中记录的事件和已有的事件处理相同。然而你要注意一些新的额外事件:  
•        OnPipelinePostEndOfRowset
•        OnPipelinePostPrimeOutput
•        OnPipelinePreEndOfRowset
•        OnPipelinePrePrimeOutput
•        OnPipelineRowsSent
•        Diagnostic
OnPipeline事件是验证在数据流任务过程中引发。Diagnostic事件可以记录当前环境和诊断信息。
这些事件中的每一个,DTS支持任意1个或5个记录方法或提供者:文本文件,SQL Profiler,SQL Server,Windows Event Log和XML文件。  
一旦你决定了哪个任务或事件要记录,你可以选择哪个属性要在日志中捕获。这些属性包括:
•        Computer
•        Operator
•        SourceName
•        SourceID
•        ExecutionID
•        MessageText
•        DataBytes
换句话说,理论上你能为你的包配置数千种不同组合。一旦你已经配置了你需要的日志选项,你能将他们保存并从外部文件加载或读取。如果你需要,允许为开发,测试和生产配置不同的日志选项。
最后,SSIS支持自定义日志提供者,你可以开发自己的提供者支持你的特殊需求。如需更多信息,请查看SQL Server联机丛书。
开发和测试
调试
一旦你创建了你的SSIS包并解决了构建中的错误,你可以遇到潜在的逻辑和数据的错误。你可以直接在BI Development Studio中使用Visual Studio的调试功能。这个功能允许你在任务或事件上设置断点,检查或更改变量,考察调用堆栈,跨多个项目和语言调试(包括SQL存储过程),并且可以从内部查看你的包。
调试工具支持逐步调适,断点和脚本调试。当转换执行时,你可以查看修改的数据(转换前或转换后的数据)。你也可以从数据源和插入数据查看样本数据。
断点
开发环境在任意任务事件中支持断点。在需要打断的任务上右击并选择Edit Breakpoints,可以设置新的断点。你可以配置断点在第一次出现或在出现指定次数后中断。在图70中所示,当OnPreExecute事件执行2次时中断执行。



教程:创建你的第一个SSIS包
现在SSIS中你已经有了一个好的背景,可以准备创建你的第一个包了。在这个教程中,你处理一个包含大概90,000条记录的平板文件,在将它们插入到新的文本文件前要对数据聚合,分组,排序。在SQL Server 2000 DTS,这需要复杂的脚本或你需要将数据插入分段表来完成这个任务。在SQL Server 2005中,你不再需要阶段表或了解编码更多的编码。这减少了ETL开发时间。
在开始教程前,打开Business Intelligence Development Studio。在File菜单中,点击New,然后点击Project。
为了演示目的,输入名称FirstPackage,如下图所示。



当你点击OK,如图72所见创建了一个基本项目。



Package.dtsx将在项目创建时被打开。如果没打开,在解决方案浏览器中,双击包并打开。
我开始添加右面要使用的连接。

为添加第一个平板文件连接,在屏幕底部右击Connections栏并选择New Flat File Connection。将打开平板文件连接管理编辑器(图73)。
在编辑器的General栏,你可以配置大部分平板文件的配置。在连接管理名称中,输入Input File。文件名将指向位置和文件名,输入SampleFile.txt。
接下来,确认你的文本分隔符为双引号(“)并且选择Column names in first data row选项。文本分隔符选项告诉SSIS引擎数据封装在双引号标示符中。封装数据时可以文本分隔符,例如逗号等。



在同样对话框的左边的Columns栏(图74)中确认你看到第一行的数据和列。下一步,点击Advanced栏(图74)。选择每个列,你可以看到在平板文件中使用的SSIS数据类型。选择列TransactionDate,并选择数据类型为“date [DT_DATE]”。Quantity列将被设置为“four-byte signed integer [DT_I4]”。
令人更兴奋的特性是你能点击Suggest Type让DTS采样数据并预测。然后它建议出数据类型,它将预测说有列尔不仅是你选择的列。确认选择后点击OK。



当你点击OK后,你将在底部的Connections栏中看到这个连接。创建一个额外的连接到SummarybyProductID.txt文件。在这个连接,接受默认属性除了文本分隔符,使用双引号。这个连接的名称为Output File。
在左侧面板,你将看到Toolbox栏。从工具栏中拖拽数据流任务到控制流栏。
注意 你可以通过点击固定钮将Toolbox固定在涉及环境中。右击新创建的任务并选择Rename。输入“Transform Flat File”作为新的任务名称。(你也可以点击任务并在右边的属性面板修改Name属性。
右击你刚重命名的数据流任务并选择Edit。这将显示Data Flow栏。
在Data Flow栏,从工具栏中拖拽Flat File Source数据流项到设计面板。你可以通过右击项并选择Rename随意的重命名数据流项。我将重命名为“Sample File.”。
右击Sample File数据流项并选择Edit。在左边Connection选线下,确认Sample File被选为你的连接。接下来,到Columns节并取消大部分的列,仅保留ProductID,TransactionDate,Quantity和ActualCost。这些列将在下游的SSIS包中使用。(图75)



我们现在需要创建在下游可用的新列。它将代表所有项(Quantity列)的产品开销(ActualCost列)。为了完成,拖拽Derived Column任务到设计面板至于Sample File下。右击Derived Column项并选择Rename。重命名为”Total Cost”。点击Sample File连接,你将看到红色和绿色的向下箭头。绿色箭头定义了如果步骤成功后续的任务。红色箭头定义了如果步骤失败后的后续任务。点击绿色箭头并拖拽到Total Cost任务。
当2个项连接后,右击Total Cost项选择Edit。这将显示Derived Column编辑器。
在右侧展开Columns树并拖拽Quantity和ActualCost列到表达式列(如图76)。将表达式写成Quantity*ActualCost。如果你收到数据类型错误,你应该到该教程第一部分为每个列设置正确的数据类型。
改变Derived Column的名称为TotalCost,数据类型为Currency,如图76所示。当完成后,点击OK。这为未来转换任务创建了一个额外的列,将计算2个列的总和。



带着新定义的列,你将准备在产品级别汇总数据。从工具箱拖拽Aggregate任务到设计面板。通过连接绿线,连接TotalCost任务和新的任务。然后重命名这个任务为”Group by Product”。
通过右击Group by Product并选择Edit打开Aggregate Editor。在Aggregate Editor中定义如何在内存中从数据源连接聚合数据。重要的是注意目前为止我们没有提交一条记录到任何数据源。所有的事物都在内存中操作并没有触及实质。
在Aggregate Editor(图77所示),选择ProductID,TransactionDate,Quantity和TotalCost列。这将部分填充输入列。
.然后指定你要为每列所作的操作类型。我们希望给予ProductID分组,所以你需要确认Group By被选中。Quantity选择Sum,TotalCost选择Sum。最后选择Maximum for the TransactionDate Input Column。我也改变2列的输出别名。本质上,我希望做的是将数据通过ProductID分组,决定TransactionDate列的最大值和Quantity和Cost的总和。
点击OK保存你的工作。注意TotalCost列在这里是可用的。只要你添加了派生的列,他们将在后续的任务中可见。



数据现在通过ProductID聚合,你现在要将数据排序是在报表中容易读取。从工具栏中拖拽Sort任务(图78),重命名为”Order by ProductID”。确认通过绿色的箭头将其和Group by Product项连接。像我们在其他的之前所做的,编辑这个任务。选择ProductID并确认使用升序排列。点击OK退出。



最后,我们需要将所有的工作输出到另外一个平板文件。从工具箱中拖拽Flat File Destination(不是使用字母排序)。通过绿色箭头将其和Order by ProductID连接。
点击Edit修改Flat File Destination属性。
点击New创建新的平板文件连接。
命名这个连接为Output File(图79显示了其他信息)。
注意在预览部分,从初期的项中你可以看到所有输出列。
点击OK。在Mappings节,确认转换正常。点击OK.
你完成了。为了执行这个包,按下F5或在Debug菜单中点击Start。你会看到技术数量在增加。图79显示了我的示例的输出。



你可以在Progress栏(图80)看到SSIS执行的详细信息。



关于作者
Brian Knight 是SQL Server MVP和MCDBA。他是SQLServerCentral.com的创始人,在AllState做开发经理。Brian也是一位作家,出版了Professional SQL Server 2000 DTS 和SQL Server 2000 for the Experienced DBA。可以通过邮件bknight@sqlservercentral.com 联系到他。
Mark Chaffin是Avanade(www.avanade.com)北美地区商业智能实施总监 ,该公司是Microsoft®平台企业及商业智能解决方案金牌提供商。他为很多不同行业的客户构建过上也只能解决方案,包括零售,生活消费品,医疗,金融,市场,银行,科技,体育和娱乐。他在数据挖掘,事务应用程序架构,Internet应用程序架构,数据库管理和数据库设计上有丰富经验。他也合著过SQL Server 2000 Data Transformation Service,Wrox出版社出版,也写过很多关于商业智能,SQL Server,DTS, 分析服务方面的文章。他也在Microsoft和SQL Server会议包括PASS和TechED作为讲师。
Brain和Mark主要执笔的Professional SQL Server 2005 Integration Services(Wiley Press)也将要出版了。


版权声明
本文档中的信息(包括 URL 及其他 Internet 网站参考资料)可能随时变更,恕不另行通知。使用本文档的全部风险或因此导致的后果均由用户自行承担。
本文档仅供参考,Microsoft 对本文档中的信息不提供任何明示或暗示的保证。
用户必须遵守所有适用的著作权法。在不限制著作权法所保障的权利下,未经 Microsoft Corporation 书面许可,不得将本文档的任何部分复制、存储或引入检索系统,或以任何形式、手段 (电子、机械、影印、录音等等) 或基于任何目,转发本文任何部分。
Microsoft 可能拥有本文档主体的涉及的专利、专利使用、商标、著作权或其他知识产权。除非在Microsoft书面许可协议中明确提到,否则本文档并不向您提供其中的任何专利、商标、版权或其他知识产权。
除非注解,否则这里描述的样例公司、企业、产品、域名称、电子邮件地址、徽标、人员、地点和事件纯属虚构,不要有意或推断,将其与真实的公司、企业、产品、域名称、电子邮件地址、徽标、人员、地点或事件相联系。
 2005 Microsoft Corporation.  保留所有权利.
Microsoft, Excel, SharePoint, Visual Basic, Visual C++, Visual C#, Visual J#, Visual Studio, 和 Windows 均为Microsoft Corporation 在美国和/或其他国家的注册商标或商标。
此处提到的实际公司名称和产品名称可能使其所有者的商标
posted @ 2008-09-16 17:36  行进中开火  阅读(1537)  评论(0编辑  收藏  举报