SQL 11 (代号 Denali) 入门 - 第五部分 (CTP 3 中的 SSIS 功能)






4.60/5 (7投票s)
本文将从 SSIS 的角度探讨 Denali CTP3 为我们提供的新功能。
- 下载 DQSCleansing - 33.25 KB
- 下载 ExpressionTask - 44.46 KB
- 下载 MultipleRowFormatExample - 74.32 KB
- 下载 NewFunctions - 16.44 KB
- 下载 SharedConnectionManager - 24.92 KB
SQL 11 (代号 Denali) 入门 - 第五部分 (CTP 3 中的 SSIS 功能)
目录
引言
在 Denali CTP 1 于 2010 年 11 月 8 日发布后,下一个重要版本是在 2011 年 7 月 12 日推出的 **Denali CTP 3**。CTP3 提供 32 位和 64 位版本。一如既往,Denali 为 SQL 用户带来了许多新功能,无论是开发人员、管理员还是商业智能 (BI) 专业人士。在本系列中,我们将探讨此 CTP 中包含的一些 **SSIS 的新功能**。
背景
在过去几年中,Microsoft 在开发人员工具箱中引入了许多技术。随着 SQL Server 2005(代号 **Yukon**)的问世,SQL Server 的术语发生了巨大变化,在其后续版本,如 SQL Server 2008(代号 **Katmai**)和 SQL 11(代号 **Denali**)中,也保持了引入新功能、增强功能和改进的步伐。在本文中,我们将从 SSIS 的角度探讨 Denali CTP 3 已经为我们提供的一些新功能。此前我们已经看到了 Denali CTP1 中所做的增强。后续文章将重点介绍其他领域的增强功能。
您可以通过以下方式阅读我关于 Denali 的其他文章:
- SQL 11 (代号 Denali) 入门 - 第一部分 (CTP 1 中的 SSMS 功能)
- SQL 11 (代号 Denali) 入门 - 第二部分 (CTP 1 中的 T-Sql 功能)
- SQL 11 (代号 Denali) 入门 - 第三部分 (CTP 1 中的 SSIS 功能)
- SQL 11 (代号 Denali) 入门 - 第四部分 (CTP 1 中的独立数据库)
SSIS 新功能
我们在工具箱中新增了一个名为**表达式任务**的任务组件。它的作用是在运行时将 SSIS 表达式的结果分配给变量。
让我们来看一个实际的例子。我们将创建一个表达式来计算一个人的年龄。
打开 BIDS,在“控制流”面板的工具箱中,我们会找到“表达式任务”。
现在让我们创建一个包级别的变量。首先,右键单击设计器并选择**变量**。
然后在出现的变量窗口中,创建一个名为 **Age**、类型为 **Int32**、作用域为 **Package** 的变量。
>
拖放一个表达式任务。双击它,表达式生成器将打开,我们可以在其中找到已创建的包变量。
在表达式文本框中,让我们输入以下表达式:
@[User::Age] = DATEDIFF("YY", (DT_DBTIMESTAMP)"01/01/1999",GetDate())
然后单击“评估表达式”按钮。
单击“确定”。接下来,拖放一个脚本任务组件。
单击“确定”按钮。然后在 **ReadOnlyVariable** 属性中,输入我们创建的变量。
接下来,单击“编辑脚本”按钮并添加以下代码:
public void Main() { string displayMessage = "Your age is {0}"; MessageBox.Show(string.Format(displayMessage,Dts.Variables[0].Value.ToString())); Dts.TaskResult = (int)ScriptResults.Success; }
运行应用程序,我们将看到结果。
**注意:**在创建表达式时,我们应该注意不要包含任何空格;否则,它将显示错误,如下所示:
作为转换组件的一部分,又新增了一个新组件。它是数据质量服务 (DQS) 清洁转换组件。它帮助我们根据我们构建的知识库来清洁数据。本文将不侧重于 DQS,因为它是一个独立的主题,并将很快发布。在这里,我们将专注于创建我们自己的知识库,然后基于该知识库验证记录。
我们需要创建我们自己的知识库。
我们的目标是,我们的知识库将包含国家/地区域值,并且规则是国家/地区长度应大于或等于 5 且不应缩写。此外,如果用户记录的值为“England”,它将被更正为“United Kingdom”。
为此,让我们遵循以下步骤:
连接到 DQS 服务器。
正确连接后,接下来单击“**知识库管理**”类别下的“**新建知识库**”按钮。
完成后,我们现在可以创建新的知识库。
让我们输入一个域名称,提供一些描述,然后单击创建按钮。接下来创建域。
单击“**创建域**”按钮后,我们将看到“**创建域**”弹出窗口。我们需要输入一个域名称,其余保持不变。单击“确定”按钮。
在右侧,我们可以看到有关为相关域设置数据质量规则的选项。
接下来,我们应该创建一些将应用的规则。为此,让我们单击“**域规则**”选项卡。
接下来,我们需要单击“**添加新域规则**”按钮来创建新的域规则。单击后,我们将看到以下屏幕:
输入名称、描述,然后从“构建规则”下拉列表中选择“长度大于或等于”,并将值设置为 5,如下所示:
此外,我们还希望应用规则,即任何国家/地区名称都不应被缩写。为此,让我们单击“**向选定的子句添加新条件**”按钮。
从下拉列表中,让我们选择“值不包含”,并将值设置为“.”(点)。
之后,单击“**应用所有规则**”按钮。
单击“是”,我们将收到成功消息,表明域规则已成功应用。
设置好域规则后,下一步将是添加域值。所以让我们访问“**域值**”选项卡并单击“**添加新域值**”按钮。
现在让我们添加一些域值。请注意,如果有人输入“England”的值,输出将被更正为“United Kingdom”。
完成后,单击“**完成**”按钮。
作为最后一步,我们需要单击“**发布**”按钮,KB(知识库)将公开可用。
我们可以看到“OurTestDomain”已被创建。
有关 DQS 知识库和域的更多信息,您可以参考这篇文章。
这样,我们的知识库就准备好了。接下来我们需要准备我们的源数据。在本例中,我们将使用 **Excel** 作为数据源。Excel 数据源如下:
打开 BIDS 并将数据流任务拖放到“控制流”设计器上。在数据流设计器中,首先创建一个**Excel 源**,并提供适当的文件名和路径以及所需的配置。接下来,让我们拖放一个 DQS 清洁组件。
双击它以打开 DQS 清洁转换编辑器。
我们需要提供连接管理器。所以单击“**新建**”按钮,连接管理器窗口就会打开。
指定服务器名称,然后单击“测试连接”以获得成功消息。
接下来,我们需要指定数据质量知识库。我们将选择我们刚刚创建的“**OurTestDomain**”。可用的域将在此列出。
接下来,让我们访问“映射”列。
选中“Country Input”列旁边的复选框。
从“域”下拉列表中,选择“Country”。为“Corrected”和“Status”输出别名命名。单击“确定”。添加“行采样”和“数据查看器”。
运行包。数据查看器中的输出如下:
前 4 行很容易理解,因为它已按照我们在规则中定义的方式执行。Country 长度必须 >= 5,因此 USA Country 状态为“无效”。它不能包含任何 (.),因此 U.K. 是无效的。名称 England 必须更改为 United Kingdom,这已得到反映。由于梵蒂冈城没有输入,因此 Country 状态为“未知”。这是一个成功。
**注意:**此操作是异步的,如下面的图像所示:
加载行格式可变的文件的内容一直都不是一个顺畅的方法。考虑以下示例:
在此示例中,我们可以看出文本文件包含一些父子内容。标题包含有关经理的信息,而详细部分包含在经理手下工作的员工的信息。
在 Denali CTP 3 之前的 SSIS 方法中,在“平面文件源”组件中,我们可以像这样预览内容:
正如我们可以发现的那样,记录集已经混乱,如红色突出显示的。在 Denali CTP 3 之前的 SSIS 方法中处理这种情况的一种方法是将源更改为如下:
然后,“平面文件源”组件的预览将如下所示:
假设现在我们想将数据分为“经理记录”和“经理员工记录”,我们可以通过添加“条件拆分”组件并指定以下条件来继续:
然后像这样添加“行采样”,我们可以得到如下记录:
但 Denali CTP 3 的情况有所不同。当我们加载这样的文件时,预览如下:
使用相同的设计运行包,会产生以下结果:
在 Denali CTP 3 之前的 SSIS 方法中,表示成功/失败的方式如下:
但在 Denali CTP 3 中,它已更改为:
另一个小功能是,我们现在可以像下面这样按名称对包进行排序:
排序包名称之前
排序包名称之后
在早期版本中,无法在包之间共享连接。例如,在 Package1 中,我们正在使用一个平面文件源组件。
可以看到,在 Package1.dtsx 中我们有一个名为 **TxtFileConnManager** 的连接管理器。现在让我们创建另一个名为 Package2.dtsx 的包。
可以看到,没有选项可以重用现有连接。我们需要创建一个新连接。
但在 Denali CTP 3 中,我们有了**连接管理器**,通过它可以共享连接。
单击“连接管理器”,将打开 SSIS 连接管理器窗口。
选择 FLATFILE 并单击“添加”按钮,然后为连接管理器命名。
点击“确定”。
可以看到,我们新的连接管理器已添加。由于它是共享的,因此我们可以在任何包中访问它。让我们打开 Package1.dtsx,我们会在下方找到连接管理器。
Package2.dtsx 也同样适用。
VII. 新的表达式语言函数 (Left, Token, TokenCount)
在表达式语言中,我们有三个新函数:Left、Token 和 TokenCount。
让我们逐一分析这些函数:
**Left:**返回具有指定字符数的字符串的左侧部分。此函数在 T-SQL 中已存在很长时间。同样,它的对应函数 Right 在 SSIS 中也已存在很长时间。
因此,如果在表达式任务中运行以下代码,我们将得到以下输出:
@[User::Result1] = LEFT("Test for Left function", 4) //output : Test
在本例中,Left 函数从提供的字符串中剥离了前 4 个字符。
**Token:**返回字符串中指定标记的出现。
因此,如果在表达式任务中运行以下代码,我们将得到以下输出:
@[User::Result1] = TOKEN("Test for Token Function"," ",2) //output : for
因为 for 出现在第二个位置。
**TokenCount:**返回字符串中的标记数。
因此,如果在表达式任务中运行以下代码,我们将得到以下输出:
@[User::Result2] = TOKENCOUNT("Test for TokenCount function"," ") //output : 4
因为有 4 个标记。
我们甚至可以像下面这样组合 Token 和 TokenCount:
@[User::Result1] = TOKEN("Test for Token Function"," ", TOKENCOUNT("Test for TokenCount function"," ")) //output : Function
因为,TokenCount 函数返回 4,而在第四个位置,我们有“Function”。
现在,在设计器中,我们有一个用于包范围参数的专用选项卡。
在 SSIS 2008 R2 中
在 Denali CTP 3 中
在 Denali CTP1 中,可以通过在解决方案资源管理器中右键单击来查看项目参数。但在 Denali CTP 3 中,它们拥有自己独立的节点。
结论
在本系列中,我们已经看到了 SSIS Denali CTP 3 中的一些很棒的增强功能,例如表达式任务、DQS 清洁组件、加载具有可变行格式的文件、新的表达式语言函数(Left、Token、TokenCount)等。但这还不是全部。还有很多内容有待探索。我将在探索时继续添加这些主题。敬请关注并分享您对本文的看法。