第六篇 Integration Services:初级工作流管理

本篇文章是Integration Services系列的第六篇,详细内容请参考原文



简介
在前几篇文章中,我们关注使用增量加载方式加载数据。在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作流。你将添加一个新SSIS包到已存在的解决方案。
添加SSIS包
SSIS控制流包含任务、容器和优先约束。在SSIS控制流中任务和容器是可执行对象,优先约束用于控制任务和容器何时/是否执行。
为了操作控制流,打开叫做My_First_SSIS_Project解决方案。打开后在解决方案资源管理器右击SSIS包虚拟文件夹,选择新建SSIS包,如图6.1所示:

图6.1 新建SSIS包
当你点击新建SSIS包时一个名叫Package1.dtsx的包就会创建。右击Package1.dtsx选择重命名,如图6.2所示:

图6.2 重名称包名
包进入了重合模式,如图6.3所示。重名称包为Precedence.dtsx

图6.3 键入包名
在你键入包名按回车键后,你会被提醒是否要同时重命名包对象?

图6.4 重命名包对名提醒
解决方案资源管理器下显示的SSIS包代表的是Solution\Project文件夹下叫做Package1.dtsx的文件,以及BIDS中的包对象(实际上单击SSIS包虚拟文件夹下的某个包,在属性中看到的信息就存储在文件夹的信息;双击SSIS包虚拟文件夹下的某个包,在属性中看到的就是BIDS中的信息)。当你看到图6.4的提示,你已经重命名文件夹下的文件;这个提示是询问是否需要重命名BIDS中的包对象。帮自己一个忙,通常点击“是”按钮。如果你选择“否”,你的文件和包对象将会不同名,这可能容易混淆。
添加一个脚本任务
缺少优先约束也是可行的,我们将在第一个演示中看到。首先让我们从控制流工具箱添加一个脚本任务到控制流。

图6.5 添加一个脚本任务到控制流
脚本任务可以说是SSIS中最强大的控制流任务。你可以使用它来创建其他SSIS任务的大部分功能。你也可以使用脚本任务添加新功能到的SSIS控制流。
右击脚本任务选择编辑,打开脚本任务编辑器:

图6.6 脚本任务编辑器
在这篇文章我们不会彻底探讨脚本任务的功能,但我们以它来开始。第一个你要检查的属性是ScriptLanguage.你可以选择Visual Basic或C#作为脚本任务中的编辑语言。你可以通过右侧的下拉菜单更改脚本任务的默认语言。我比较喜欢使用Visual Basic

图6.7 选择脚本语言
点击常规页,将Name属性更改为“Script Task 1”

图6.8 更改Name属性
回到脚本页,点击ReadOnlyVariables属性,文本框的右侧将出现一串省略号

图6.9 修改ReadOnlyVariables属性
点击省略号显示选择变量列表。我不喜欢列表显示的方式,我希望复选框和变量名称离得近些。我可以通过双击列表顶部复选框与名称的分隔栏来调整列宽。选择“System::TaskName”变量:

图6.10 选择变量
一旦你点击确定,脚本任务的ReadOnlyVariables属性如图6.11所示

图6.11 修改后的ReadOnlyVariables属性
为了我们的目的,单击“编辑脚本”按钮打开ssisscript如图12所示:

图6.12 ssisscript-Integration Services脚本任务
滚动鼠标直到你看到Public Sub Main().将下面代码添加到子程序:

        Dim sTaskName As String = Dts.Variables("TaskName").Value.ToString
        MsgBox(sTaskName & " completed.")

你的代码看起来应该和图6.13相似:


图6.13 添加代码到Public Sub Main()
这段代码用来做什么呢?第一条语句在VB中创建一个字符串类型的sTaskName变量。sTaskName当它创建时会分配一个值。这个值是由脚本任务的ReadOnlyVariables属性中的"“System::TaskName"变量分配。我们通过访问Dts命名空间的变量集合得到SSIS变量值,这就是“Dts.Variables”部分。接着是SSIS变量的名称——TaskName——用双引号引用,这就是("TaskName")部分。
我们接下来要获取值的属性,它是一个对象。因为它是一个对象,我们必须将属性转换成字符串以将它分配给字符串变量。我们通过ToString方法实现。
这就是如何将SSIS变量的值转到脚本任务变量(VB语言)。
下一行显示一个弹出消息框包含的任务的名字(sTaskName变量的值+" completed."字符串)。
直接点击右上角的红"X"关闭脚本任务代码编辑器。脚本会自动保存。点击确定按钮完成脚本任务配置。
我们准备测试一下。按下F5在调试器下启动SSIS包。你应该看到类似图10.14消息对话框:

图6.14 消息对话框
点击停止按钮停止调试
添加第二个脚本任务
右击Script Task 1选择复制,然后在控制流的空白处右击选择粘贴。一个新的脚本任务添加到控制流,名称是"Script Task 1 1",重命名新脚本任务为"Script Task 2"

图6.15 添加新脚本任务
在SSIS调试器下重新执行SSIS包。应该显示两个消息对话框(更可能是一个叠加在另一个上):

图6.16 执行SSIS包
因为脚本任务的名称(System::TaskName变量)显示在消息对话框,我们可以操作更多的复制和粘贴。停止调试。
Use Cases 0 and 1
前面的示例就是一个"use case"例子。这种use case演示了没有优先约束时会发生什么。我把它称作"use case 0".对于use case 1,让我们在Script Task 1和Script Task 2之间添加一个优先约束。为了完成这个,首先点击Script Task 1,在其下方会出现一个绿箭头的优先约束,点击优先约束并将它拉到Script Task 2.很多人试图刚好抵达下一个任务的边缘,不要这样!直接将优先约束拉到下一个任务的中间。

图6.17 添加优先约束
在SSIS调试器执行包,注意Script Task 1先执行:

图6.18 Script Task 1先执行
点击确定按钮完成Script Task 1.然后,Script Task 2开始执行

图6.19 Script Task 2后执行
注意Script Task 2要在Script Task 1完成后才执行。另外注意:这里的优先约束是默认的"成功"类型。意味着前面的任务(Script Task 1)必须完成并且成功才会执行后面的任务。
这里的语义是很重要的。优先约束起始于Script Task 1终止在Script Task 2。起始任务连接到优先约束的起点——有一个半圆点,它连接到起始任务;终点有一个箭头,它连接到终止任务。
优先约束求值。他们测试一个或多个条件,如果条件为真,约束允许终止任务开始执行。
"单线程"
"Single-threading" is one way to describe doing one thing at a time.使用优先约束是让SSIS控制流"单线程"的方式之一。使用优先约束是控制流中确定工作流的唯一方式。
在SSIS控制流中工作流是否有可能不明确?当然。为了演示,右击Script Task 1和Script Task 2之间的优先约束,然后选择删除。在控制流的空白单击一下然后按F4显示包属性。MaxConcurrentExecutables属性控制着在SSIS控制流有多少可执行文件可以同时执行。默认是设置为-1。默认值允许(CPU内核数+2)个可执行文件同时执行。例如,如果你有一四核服务器SSIS将允许六个并发执行。
将MaxConcurrentExecutables的属性设置成1,如图6.20所示:

图6.20 设置MaxConcurrentExecutables的属性
重新执行SSIS包。现在,每一次只有一个脚本任务执行。该顺序是不确定的,因此不可预测的。
停止调试,将MaxConcurrentExecutables设置回-1并保存SSIS包。
总结
在这篇文章中,我们在解决方案中添加了一个新的SSIS包,建立了我们的第一个脚本任务,它们之间通过一个成功优先约束连接。我们学习从SSIS脚本任务读取SSIS变量的值,以及MaxConcurrentExecutables属性。在下一篇,我们将看到更多SSIS优先约束的特点。

时间: 2024-08-27 22:26:49

第六篇 Integration Services:初级工作流管理的相关文章

第七篇 Integration Services:中级工作流管理

本篇文章是Integration Services系列的第七篇,详细内容请参考原文. 简介在上一篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性.这一篇我们将检查.演示并测试优先约束赋值为"成功"."完成"."失败"时对工作流的影响.约束赋值如果你按照前一篇的步骤操作过,打开My_First_SSIS_Project解决方案下的Precedence.dtsx

第八篇 Integration Services:高级工作流管理

本篇文章是Integration Services系列的第八篇,详细内容请参考原文. 简介在前面两篇文章,我们创建了一个新的SSIS包,学习了SSIS中的脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性.我们检查.演示并测试优先约束赋值为"成功"."完成"."失败"时对工作流的影响.在这一篇,我们继续深入SSIS工作流管理——学习SSIS变量和优先约束表达式.关于变量打开Precedence.dtsx包.点击BI

第十一篇 Integration Services:日志记录

本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SSIS内置日志记录.我们会演示简单和高级日志配置,保存和查看日志配置,生成自定义日志消息.SSIS任务事件打开Precedence.dtsx包.你的控制流面板应该如图11.1所示:图11.1在第九篇和第十篇,我们关注在序列容器1.我们在Script Task 4和序列容器1上创建了OnError事件处

第十五篇 Integration Services:SSIS参数

本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到SSIS 2012.在这一篇,我们将探讨SSIS变量的姊妹:SSIS参数.我们将展示参数配置,通过包参数管理动态属性值,以及在SSIS包执行期间参数是如何配置和使用的.首先在SSDT-BI打开转换过的My_First_SSIS_Project,如图15.1所示:图15.1My_First_SSIS_P

第十三篇 Integration Services:SSIS变量

本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将升级我们的解决方案为SQL Server 2012 Integration Services,演示SSIS变量,变量配置和表达式管理动态值.在前面的练习中我们已经使用过变量,但我们没有深入学习,这一篇,我们将关注SSIS变量.…………一旦安装好,你可以设置主题颜色,工具->选项->环境->常

第十篇 Integration Services:高级事件行为

本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining methods of task execution state management using the MaximumErrorCount and ForceExecutionResult properties.我们还学习了SSIS控制流任务错误.事件处理程序和容器之间的关系.这一篇我们重点关注事件的行为.在

第九篇 Integration Services:控制流任务错误

本篇文章是Integration Services系列的第九篇,详细内容请参考原文. 简介在前面三篇文章,我们创建了一个新的SSIS包,学习了脚本任务和优先约束,并检查包的MaxConcurrentExecutables属性.我们检查.演示并测试优先约束赋值为"成功"."完成"."失败"时对工作流的影响.我们学习了SSIS变量和表达式,并将它们应用到优先约束.这一篇,we introduce fault tolerance by examinin

第十四篇 Integration Services:项目转换

本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业智能工具(SSDT-BI)或Visual Studio 2012将我们的第一个SSIS项目转换为SSIS 2012.为什么你想升级我们的SSIS项目到2012?你可能想使用SSIS 2012中的新特性.你可能还希望利用SSIS 2012目录.要使用目录,你的项目必须遵循项目部署模型,我们也将在这篇文

第一篇 Integration Services:SSIS是什么

本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取.转换和加载(ETL)数据,以任何你能想到的编程方式更改数据.你可以用SSIS做下面操作:->执行ETL(提取.转换.加载)操作->传输数据->复制数据库对象->执行FTP操作->处理文件"我之前从来没用过SSIS…"你确定你从来没有使用过?是否对下面界面感到