填充数据仓库和数据集市--ssis
数据仓库和数据集市中的数据通常会频繁更新,因此数据加载量通常会很大。
Integration Services 包含一个可直接将数据从平面文件大容量加载到 SQL Server 表和视图中的任务,还包含一个目标组件,该组件可以在数据转换过程的最后一步将数据大容量加载到 SQL Server 数据库中。
SSIS 包可配置为可重新启动。这意味着可以从某个预先确定的检查点(包中的某个任务或容器)重新运行包。重新启动包这一功能可节省很多时间,尤其是包需要处理来自一大批源的数据时。
可以用 SSIS 包加载数据库中的维度表和事实数据表。如果维度表的源数据存储在多个数据源中,包可以将该数据合并到一个数据集中,并在单个进程中加载维度表,而不是为每个数据源使用单独的进程。
更新数据仓库和数据集市中的数据可能很复杂,因为这两种类型的数据存储区通常都包含可能难以通过数据转换过程管理的渐变维度。由于能够动态创建用于插入和更新记录、更新相关记录以及向表添加新列的 SQL 语句,因此,渐变维度向导可自动支持渐变维度。
此外,Integration Services 包中的任务和转换可以处理 Analysis Services 多维数据集和维度。包更新了建立多维数据集所基于的数据库中的表后,您可以使用 Integration Services 任务和转换来自动处理多维数据集和维度。自动处理多维数据集和维度有助于使以下两种环境中的用户始终获得最新的数据:访问多维数据集和维度中信息的用户和访问关系数据库中数据的用户。
Integration Services 还可以在数据加载到其目标之前计算函数。如果数据仓库和数据集市存储了聚合信息,那么 SSIS 包可以计算 SUM、AVERAGE 和 COUNT 之类的函数。SSIS 转换还可以透视关系数据,并将其转换为不太规范的格式,以便更好地与数据仓库中的表结构相兼容。
包是一个有组织的集合,其中可包括连接、控制流元素、数据流元素、事件处理程序、变量和配置,您可使用 SQL Server 2005 Integration Services (SSIS) 提供的图形设计工具或以编程生成方式将这些对象组合到包中。然后,您可将完成的包保存到 SQL Server 2005、SSIS 包存储区或文件系统中。包是可被检索、执行和保存的工作单元。
首次创建包后,包是一个空对象,不能实现任何功能。若要向包添加功能,可向包添加一个控制流,还可选择添加一个或多个数据流。
以下关系图显示了一个简单包,其中包含一个带有数据流任务的控制流,而数据流任务中又包含数据流。
创建基本包后,可添加高级功能(如日志记录和变量)来扩展包功能。有关详细信息,请参阅“扩展包功能的对象”部分。
然后,可对完成的包进行配置,通过设置包级属性来实现安全性、从检查点重新启动包或将事务合并到包工作流中等功能。有关详细信息,请参阅“支持扩展功能的属性”部分。
Foreach 循环容器定义包中的重复控制流。循环的实现与编程语言中的 Foreach 循环结构类似。在包中,通过使用 Foreach 枚举器启用循环。Foreach 循环容器将重复指定枚举器的每个成员的控制流。
SQL Server 2005 Integration Services (SSIS) 提供了下列枚举器类型:
· Foreach ADO 枚举器,用于枚举表中的行。例如,可以获取 ADO 记录集中的行。
· Foreach ADO.NET 架构行集枚举器,用于枚举有关数据源的架构信息。例如,可枚举并获取一组 AdventureWorks SQL Server 数据库中的表。
· Foreach 文件枚举器,用于枚举文件夹中的文件。该枚举器可遍历子文件夹。例如,可读取 Windows 文件夹中所有具有 *.log 文件扩展名的文件。
· Foreach 源变量枚举器,用于枚举指定变量包含的可枚举对象。例如,变量包含运行时枚举的查询的结果。
· Foreach 项枚举器,用于枚举集合项。例如,可枚举 Excel 电子表格中的行和列。
· Foreach Nodelist 枚举器,用于枚举 XML Path 语言 (XPath) 表达式的结果集。例如,此表达式可枚举并获取古代的所有作者:/authors/author[@period='classical']。
· Foreach SMO 枚举器,用于枚举 SQL Server 管理对象 (SMO) 对象。例如,可枚举并获取 SQL Server 数据库中的视图列表。
以下关系图显示了一个具有文件系统任务的 Foreach 循环容器。该 Foreach 循环使用了 Foreach 文件枚举器,并将文件系统任务配置为复制文件。如果枚举器指定的文件夹包含四个文件,则循环将重复四次,复制四个文件。
可以使用变量和属性表达式的组合,用枚举器集合值更新包对象的属性。首先,将集合值映射到用户定义变量;然后,对使用该变量的属性执行一个属性表达式。例如,将 Foreach 文件枚举器的集合值映射到名为 MyFile 的变量,然后在发送邮件任务的 Subject 属性的属性表达式中使用该变量。如果运行该包,则每次重复循环时,都会用一个文件名更新 Subject 属性。有关详细信息,请参阅在包中使用属性表达式。
映射到枚举器集合值的变量也可用于表达式和脚本。
Foreach 循环容器可以包含多个任务和容器,但只能使用一种类型的枚举器。如果 Foreach 循环容器包含多个任务,则可将枚举器集合值映射到每个任务的多个属性。
可以设置 Foreach 循环容器的事务属性,从而为包控制流的子集定义事务。通过这种方式,可以在 Foreach 循环级别而不是包级别管理事务。例如,如果 Foreach 循环容器重复了星形架构中的维度表和事实数据表的更新控制流,则可以配置事务以确保成功更新所有事实数据表,或者不更新任何事实数据表。有关详细信息,请参阅在包中合并事务。
For 循环容器定义包中的重复控制流。此循环实现类似于编程语言中的 For 循环结构。循环每次重复时,For 循环容器都计算一个表达式并重复运行其工作流,直到表达式计算结果为 False。
For 循环容器使用下列元素定义循环:
· 为循环计数器赋值的可选初始化表达式。
· 包含用于测试循环应停止还是继续的表达式的求值表达式。
· 递增或递减循环计数器的可选迭代表达式。
下图显示了一个具有发送邮件任务的 For 循环容器。如果初始化表达式为 @Counter = 0
,求值表达式为 @Counter < 4
,迭代表达式为 @Counter = @Counter + 1
,则该循环将重复运行四次并发送四封电子邮件。
表达式必须是有效的 SQL Server 2005 Integration Services 表达式。有关详细信息,请参阅 Integration Services 表达式参考。
若要创建初始化和赋值表达式,可以使用赋值运算符 (=)。此运算符在其他方面不为 Integration Services 表达式语法所支持,只能供 For 循环容器中的初始化和赋值表达式类型使用。使用赋值运算符的任何表达式都必须使用语法 @Var = <expression>
,其中 Var 是运行时变量,<expression> 是遵循 SSIS 表达式语法规则的表达式。表达式可以包含 SSIS 表达式语法支持的变量、文字以及任何运算符和函数。表达式的计算结果的数据类型必须能够转换为变量的数据类型。
一个 For 循环容器只能有一个求值表达式。这意味着 For 循环容器对所有其控制流元素运行相同次数。因为 For 循环容器可以包含其他 For 循环容器,所以可以在包中构建嵌套循环和实现复杂循环。
可以为 For 循环容器设置一个事务属性,为包控制流的子集定义一个事务。采用这种方法,可以更详细地管理事务。例如,如果 For 循环容器多次重复一个更新表中数据的控制流,则可以配置 For 循环及其控制流,让它们使用一个事务来确保数据只有在全部数据都成功更新后才更新。有关详细信息,请参阅在包中合并事务。
序列容器可定义作为包控制流子集的控制流。序列容器将包分组到多个单独的控制流中,每个控制流包含一个或多个在整体包控制流中运行的任务和容器。
使用序列容器有许多好处:
· 禁用任务组,以便将包调试主要放在包控制流的一个子集上执行。
· 通过设置序列容器而不是各个任务的属性来管理一个位置中多个任务的属性。
· 提供一组相关任务和容器所用变量的范围。