Project REAL分析服务技术探讨
来源: 数据库 SQL Server | 作者: landluo | 发布: 2009-7-08 10:09
附录A:自动的分割表创建
Project REAL设计应用了大量的分割。产品系统中有超过220个极大的分割表。范例数据使用了125个以上的分割表,每个表中都只有几万条数据。完整的产品系统在每个分割表中大概会有1.8亿-2.0亿条记录。因为如此多的分割表,每当我们生成一个新的模式时,我们都需要创建一个新的分割表。
因此,就如同谚语所说,“当过程变的基本一致的时候,程序员就需要编写程序了”。
这个附录详细描述了一个SQL Server 2005 Integration Services中的BuildASPartition程序包,这个程序包是为在SQL Server 2005分析服务数据库中自动构建分析服务度量组分割表中而创建的。这个程序包能够同步关系型分割表模式和分析服务(Analysis Services )度量组分割表模式。它循环不断的检查关系型数据库,查找每周生成的实际分割表(通过使用一个表名称转换)。如果找到一个关系型表,它会检查在分析服务度量组中是否存在这个分割表(使用同样的表名称转换)。如果不存在,它会构建一个XMLA脚本,并执行这个脚本,最后生成一个分割表。
图26描述了这个程序包的结构。

图27描述了它们的变量以及默认值

图27:BuildASPartition程序包中的变量列表
下表列举了每个变量并解释了如何使用。
变量
角色
Mask
一个用来标识实际表分割表的TSQL LIKE片断。按周的分割表可以的值可以是‘vTbl_Fact_%_WE_%’。
注意:LIKE子句中的%符合是一个代表任意字符的通配符,例如:
vTbl_Fact_Store_Sales_WE_2004_11_27
vTbl_Fact_Store_Inventory_WE_2004_07_10
vTbl_Fact_DC_Inventory_WE_2005_01_08
Table
包含一个表记录,作为“ForEach Partition”任务中 Loop的循环变量,遍历一个包含表的行集。
Tables
一个行集,包含了RDBMS连接的数据库中匹配了Mask变量的数据表。
XMLA_Script
一个由Partition Already Present?任务生成的XML脚本
IsNotPresent
一个由Partition Already Present?任务设置的布尔值。如果分割表已经存在,这个值是True,然后执行DDL任务;如果是False,则ForEach Partition检查另外一个表,重复这个过程。
程序包包含以下四个任务。
◆Get Partition List (一个Execute SQL任务)
这个任务将使用一个Mask变量,将它作为Transact-SQL LIKE 模式匹配,去查询在RDBMS数据库连接中定义的视图。执行的输出结果(行集)将绑定到Tables变量上。图28表示了如何在程序包编辑器中配置Get Partition List任务。

图28:Get Partition List任务属性
◆ForEach Partition (一个For Each Loop 任务)
这个任务将遍历所有的表,每遍历到行集中一个新的元素时,它将把表的名称赋给Table变量。图29表示如何在程序包编辑器中配置ForEach任务。

图29:ForEach任务属性
共20页: 18 下一页
【内容导航】
原文:Project REAL分析服务技术探讨(18)
