IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

在 IBM InfoSphere Warehouse 9.7 中使用虚拟数据集合并业务场景和改善性能

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论

样例代码

英文原文

英文原文


级别: 中级

Adrian Mitrea, 软件工程师, IBM

2009 年 11 月 05 日

虚拟数据集是 IBM InfoSphere™ Warehouse 9.7 中的新 Cubing Services 特性之一。虚拟数据集通过一种方式将不同的数据集合并起来,从而实现通过一个查询就可以获得来自多个数据集的综合结果。虚拟数据集通过高效的数据分区最佳地利用缓存,使得数据集服务器查询的响应时间显著减少(有时响应时间甚至能优化 100 多倍)。虚拟数据集还提供了另一个解决方案,它通过将多个地区级数据集合并到国家级数据集中来获得综合结果。虚拟数据集还可以将销售数据与货币兑换率结合起来,从而提供业务的全局性视图。本文讲解如何创建虚拟数据集,以及如何在 InfoSphere Warehouse Cubing Services 9.7 中使用它们。

简介

虚拟数据集(virtual cube)是根据两个现有的数据集(cube)定义的逻辑数据集:两个真实的数据集、两个虚拟的数据集或真实和虚拟数据集各一个。如果需要合并两个以上的数据集,那么可以成对地合并它们,得到的数据集又可以与另一个数据集合并,如图 1 所示。合并以维度名为基础。将合并两个数据集中名称相同的维度(dimension)。如果一个数据集中的维度名不能在另一个数据集中找到,那么该维度将被添加到虚拟数据集中。可以使用虚拟数据集合并两个共享一个或多个维度的数据集。如果特定维度名出现在两个数据集中,就认为这两个数据集共享该维度。例如,如果两个数据集中都有一个名为 [Time] 的维度,那么就认为这两个数据集在虚拟数据集环境中共享维度 [Time]。合并的两个数据集可以属于不同的数据集模型,所以它们的内部结构可能完全不同。最重要的条件是它们至少要共享一个维度。虚拟数据集和及其子数据集必须位于相同的数据库中,并且仅能使用同一个数据集服务器中的数据集定义虚拟数据集。

例如,图 1 展示了组成虚拟数据集的多个数据集。带有星号 (*) 的是虚拟数据集。在这个图中,Store Sales 和 Web Sales 数据集的维度几乎相同,因此合并它们构成 Total Sales 虚拟数据集。Total Sales 虚拟数据集和 Inventory 数据集共享相同的维度 Time,因此合并它们构成 Inventory Sales 虚拟数据集。注意,可以合并虚拟数据集 Total Sales 以构成另一个虚拟数据集 Inventory Sales。在这个例子中,Inventory Sales 非常有用,因为它合并的数据集是两个独立的业务问题的一部分:Inventory 数据集用于跟踪库存,而 Sales 数据集用于跟踪销售额。


图 1. 组成虚拟数据集的数据集
Store Sales 和 Web Sales 数据集合并成 Total Sales* 虚拟数据集;Inventory 和 Total Sales* 数据集合并成 Inventory Sales* 数据集

当对某个虚拟数据集执行查询时,查询将被发送到子数据集,子数据集将生成两个中间结果,这两个结果又将根据虚拟数据集的合并运算符进行合并。合并运算符包括 SUM、MINUS、PRODUCT、DIVIDE、MAX、MIN 和 NOP(从虚拟数据集定义的第一个数据集返回数据)。

例如:

  • 当使用 SUM 运算符合并 [CubeA] 和 [CubeB] 以组成 [Virtual Cube] 时,则有 select from [Virtual Cube] = select from [CubeA] + select from [CubeB]。

  • 当使用 MAX 运算符合并 [CubeA] 和 [CubeB] 以组成 [Virtual Cube] 时,则有 select from [Virtual Cube] = MAX (select from [CubeA], select from [CubeB])。

探索虚拟数据集场景

为了帮助您了解虚拟数据集是否对您的应用程序有帮助,我们在这个小节中详细介绍几个场景。

低延迟改进场景:基于时间的分区数据

所有销售信息都储存在数据集 [AllSales] 中。每天晚上都会添加事实数据(fact data),这一过程需要重新构建数据缓存和重新刷新物化查询表(MQT)。对于大型的数据集,这需要大量时间。要改善性能,您可以根据时间对 [AllSales] 数据集的数据进行分区,从而生成 [HistoricSales] 和 [CurrentMonthSales] 数据集,然后可以定义一个称为 [VirtualSales] 的虚拟数据集,用于将生成的两个数据集合并起来。[HistoricSales] 数据集用于记录不需要频繁更改的历史销售信息。更小的 [CurrentMonthSales] 数据集用于记录当前月份的每天销售信息。[CurrentMonthSales] 数据集称为增量数据集。

由于以下因素,缓存刷新的性能得到改善:

  • MQT 重新刷新时间减少,因为通常仅需重新刷新基于 [CurrentMonthSales] 的小 MQT。

  • 仅需每月更新基于 [HistoricSales] 的大 MQT。

  • 因为预先缓存了来自 [HistoricSales] 数据集的查询结果,所以整个时间段的销售数据执行的查询性能得到了改善。

  • 由于 [CurrentMonthSales] 数据集更小,所以当前月份或整个时间段的销售数据的查询性能得到了改善。

通过分别定义包含历史数据和当前月份数据的数据库视图,您可以根据时间对数据进行分区。[HistoricSales] 和 [CurrentMonthSales] 的数据集模型分别使用各自的事实视图,而不是数据库表。当当前月份视图的数据聚积到一定程度并且外溢到历史视图中时,应该每月重新创建视图。这种场景中的性能改进直接和 [CurrentMonthSales] 数据集与 [HistoricSales] 数据集的相对大小有关。为了获得最佳的性能,历史数据集应该尽可能大,而不断增加的 CurrentMonth 应该尽可能小。

在一个测试场景中,当前月份数据集的事实表有 3 百万行,而历史数据集的事实表有 9 亿行。在每个用户的查询测试中,针对包含所有数据的大数据集 [AllSales] 的查询速度要比针对虚拟数据集 [VirtualSales] 的查询速度慢 100 倍。要让增量数据集和历史数据集的大小大致相同,可以将增量数据集设置为每周(或 2 周等,取决于数据量)进行更新,以包含更少的销售数据。

下面的例子基于包含在 9.7 发行版中的 GOSALES 数据库。为了便于展示,仅以年为单位计算时间分区。在这里,创建了两个数据集 [CSSalesMarketing_Recent] 和 [CSSalesMarketing_Historic],并且创建了一个合并了这两个数据集的虚拟数据集 [CSSalesMarketing]。使用根据年对数据进行分区的视图代替 [CSSalesMarketing_Recent] 的事实表,如清单 1 所示。


清单 1. 创建最近的事实视图
				
create view GOSALESDW.fact_recent as select ORDER_DAY_KEY, ORGANIZATION_KEY, 
EMPLOYEE_KEY, RETAILER_KEY, RETAILER_SITE_KEY, PRODUCT_KEY, PROMOTION_KEY, 
ORDER_METHOD_KEY, SALES_ORDER_KEY, SHIP_DAY_KEY, CLOSE_DAY_KEY, QUANTITY, 
UNIT_COST, UNIT_PRICE, UNIT_SALE_PRICE, GROSS_MARGIN, SALE_TOTAL, GROSS_PROFIT 
from gosalesdw.sls_sales_fact fact, gosalesdw.go_time_dim time 
where fact.ORDER_DAY_KEY = time.DAY_KEY and time.CURRENT_YEAR = 2007;
            

清单 2 显示了如何创建历史事实视图


清单 2. 创建历史事实视图
				
create view GOSALESDW.fact_historic as select ORDER_DAY_KEY, ORGANIZATION_KEY, 
EMPLOYEE_KEY, RETAILER_KEY, RETAILER_SITE_KEY, PRODUCT_KEY, PROMOTION_KEY, 
ORDER_METHOD_KEY, SALES_ORDER_KEY, SHIP_DAY_KEY, CLOSE_DAY_KEY, QUANTITY, 
UNIT_COST, UNIT_PRICE, UNIT_SALE_PRICE, GROSS_MARGIN, SALE_TOTAL, GROSS_PROFIT 
from gosalesdw.sls_sales_fact fact, gosalesdw.go_time_dim time 
where fact.ORDER_DAY_KEY = time.DAY_KEY and time.CURRENT_YEAR < 2007;
    

选为视图列的列是在被分区的原始事实表 gosalesdw.sls_sales_fact 中定义的所有列。最近数据集和历史数据集的数据集模型非常简单,并且为了便于展示,它们仅包含一个维度 [Time],以及分别包含一个测度(measure):Sale Total (Recent) 和 Sale Total (Historic)。虚拟数据集将这两个测度重命名为 Sale Total,并且使用加法合并运算符将历史数据集和最近数据集合并起来。

图 2、3 和 4 演示了通过 Microsoft® Excel 使用 [Time] 维度和 Sale Total 测度。虚拟数据集的总计等于 [CSSalesMarketing_Recent] 的总计加上 [CSSalesMarketing_Historic] 的总计。此外,[CSSalesMarketing_Recent] 仅包含 2007 年的值,而 [CSSalesMarketing_Historic] 仅包含 2007 年之前的值。

表 1 和图 2 显示了在选择 Time 和 Sale Total (Recent) 时,来自 Pivot Table Field List 的 [CSSalesMarketing_Recent] 数据。


表 1. 针对 [CSSalesMarketing_Recent] 的数据
Sale total (recent)2007Grand total
Total1,117,336,274.071,117,336,274.07

图 2. [CSSalesMarketing_Recent] 仅包含 2007 年的数据
显示表 1 的数据的屏幕截图

表 2 和图 3 显示了在选择 Time、Year 和 Sale Total (Historic) 时,来自 Pivot Table Field List 的 [CSSalesMarketing_Historic] 数据。


表 2. 针对 [CSSalesMarketing_Historic] 的数据
Sales total (historic)200420052006Grand total
Totals914,352,803.721,159,195,590.161,495,891,100.903,569,439,494.78

图 3. [CSSalesMarketing_Historic] 仅包含历史数据
显示表 2 的数据的屏幕截图

表 3 和图 4 显示了在选中 Time、All、Year 和 Sale Total 时,来自 Pivot Table Field List 的合并数据集数据。


表 3. 销售合并
Sales2004200520062007Totals
Historic914,352,803.721,159,195,590.161,495,891,100.903,569,439,494.78
Recent1,117,336,274.071,117,336,274.07
Grand total4,686,775,768.85

图 4. [CSSalesMarketing] 包含历史数据和最近数据
显示表 3 的数据的屏幕截图

下载 GSDB_TimePartitionExample 获得时间分区场景的数据集和虚拟数据集的例子,以帮助您探索虚拟数据集。

全局业务视图:货币转换场景

公司的所有销售信息都储存在一个称为 [GlobalSales] 的数据集中,并且有必要将一部分以美元为单位的销售数据转换成其他货币单位。如果 [GlobalSales] 包含了销售和兑换率信息,那么它就包含大量冗余数据,并且很难维护。为了解决这个问题,您可以创建一个称为 [CurrencyExchange] 的数据集来储存兑换率,并保持虚拟数据集 [Global Sales] 不变。您可以用一个虚拟数据集 [SalesConversion] 来处理销售数据的货币转换。数据集 [GlobalSales] 和 [CurrencyExchange] 共享一些维度(比如 Time),但它们通常具有不同的结构。

虚拟数据集 [SalesConversion] 需要定义一个用于处理实际货币转换的计算成员。因为实际的货币转换并不是每天都发生的,而是在预定的日期或特定时间间隔(比如每周或每月)发生,因此可以在这个场景中使用 ClosingPeriod 和 OpeningPeriod 函数。例如,清单 3 为货币转换定义 了计算成员,并且假设转换发生在每月的月底。


清单 3. 货币转换的计算成员
				
Calculated member name: Conversion2
Calculation: closingperiod([Time].[Month], [Time].currentmember), 
		[SalesConversion].[Measures].[CONVERSION_TO_LOCAL])
		
Calculated member name: UnitSalesLocal
Calculation:[ Virtual Cube].[Measures].[Conversion2] * 
		[SalesConversion].[Measures].[Unit sale price]
    

注意,虚拟计算成员相互利用。

合并不同的数据集:库存和销售场景

有时合并那些并没有共享很多维度的数据集非常有用,为了运行特定查询,合并这些数据集是有意义的。例如,合并了数据集 [Inventory] 和 [Sales] 的虚拟数据集 [Inv Sales] 包含这两个数据集的一些相同维度,包括 [Time] 和 [Product],以及另外一些不同的维度。这两个数据集是针对两个不同业务问题的解决方案:跟踪销售的关键性能指标和分析库存级别。

通过合并这两个数据集,您可以提取资源管理效率等信息。虚拟数据集包含所有可用维度的集合。使用相同维度的查询将同时在每个子数据集中执行,得到的结果根据虚拟数据集的合并运算符进行合并。

例如,您可以使用库存周转率公式计算资源管理效率,如清单 4 所示。


清单 4. 库存周转计算
				
Inv Turnover Ratio = [Inv Sales].[Measures].[Cost of Goods Sold] / 
	[Inventory].[Measures].[Average Inventory] 
	
where
	
[Inv Sales].[Measures].[Cost of Goods Sold] = 
	[Inventory].[Measures].[Cost of Goods] * 
	[Sales].[Measures].[Quantity Sold]. 
    

表 4 中的示例数据库的数字是随机生成的,因此它们不一定表示现实可行的值。


表 4. 从 [Sales] 和 [Inventory] 数据集获得 2000 年 1 月份的库存周转率
商品类别产品成本 (Inventory)数量 (Total sales)已售商品成本 (Inv_sales)平均库存 (Inventory)库存周转率 (Inv_sales)
Home$483.764,816$2,329,812.24$1,162,019.662.0
Jewelry$366.362,963$1,085,509.86$569,437.791.9
Shoes$4,882.4846,736$228,187,351.60$103,371,760.702.2
Sports$654.724,316$2,825,771.52$1,422,073.662.0


合并多个销售数据集:网络销售和实体店销售场景

如果需要在不同的数据集中跟踪销售绩效数据,那么通过使用虚拟数据集合并各个数据集可以获得总体视图。例如,如果您有一个称为 [Web Sales] 的数据集正在跟踪 Internet 上的销售绩效,并且有一个称为 [Store Sales] 的数据集正在跟踪实体店的销售绩效,那么您可以使用称为 [Total Sales] 的虚拟数据集获取业务绩效的总体视图。

在这个例子中,[Web Sales] 和 [Store Sales] 数据集都具有相同的维度(比如 [Product] 和 [Date]),但它们具有不同的结构。[Store Sales] 数据集有一个额外的维度 [Store],如图 5 的 Pivot Table Field List 所示。类似地,[Web Sales] 有一个 [Store Sales] 没有的维度 [Websites]。为了便于展示,虚拟数据集 [Total Sales] 将两个数据集的 [Date] 维度重命名为 [Date (Total Sales)],并将这两个数据集的 [Items] 维度重命名为 [Items (Total Sales)]。这个操作不是必要的,因为 [Date] 和 [Items] 维度在两个数据集中是同名的。

[Total Sales] 还重命名来自这两个数据集的两个维度,以确保它们具有相同的名称。[Gross Profit (Store Sales)] 和 [Gross Profit (Web Sales)] 都被重命名为 [Gross Profit (Total Sales)]。[Web Sales] 和 [Store Sales] 数据集使用加号 (+) 合并运算符进行合并,从而导致向 [Total Sales] 虚拟数据集发出查询时,得到分别查询 [Web Sales] 和 [Total Sales] 的结果之和。例如,图 6 显示了选择 Date (Total Sales)、Items (Total Sales) 和 Gross Profit (Total Sales) 的 PivotTable Field List。Gross Profit (Total Sales) 等于 $6,425,085,101.50,如图 5 所示。


图 5. [Total Sales] 合并了 [Web Sales] 和 [Store Sales]
显示 PivotTable Field List 和 Gross Profit (Total Sales) 成员的屏幕截图




回页首


合并数据集

这个小节描述如何使用在运行时发生的合并进程合并两个数据集。当数据集服务器启动时,仅当所有子数据集被实例化之后才实例化虚拟数据集。如果组成虚拟数据集的两个数据集包含同名的维度,那么将选择合并这些维度。如果一个数据集中的维度不存在另一个数据集中,那么该维度将直接添加到虚拟数据集中,而不进行合并。表 5 显示了一个合并数据集维度的例子。


表 5. 合并数据集维度以构成虚拟数据集
Sales +Inventory >Inventory Sales
ProductProductProduct合并同名维度
TimeTimeTime合并同名维度
InventoryInventory添加没有匹配对象的维度
Store隐藏不需要的维度

有一个虚拟数据集设计选项可以从数据集隐藏维度,隐藏的维度将不出现在虚拟数据集中。在虚拟数据集中隐藏维度仅影响该虚拟数据集。您还可以重命名该虚拟数据集的维度和成员,以合并所需的元素,如本文后面所述。

当选定来自两个数据集的维度以便合并之后,将在为每个维度定义的默认层次结构合并维度。合并进程根据两个维度遍历层次结构的级别(从 0 级别开始),并合并包含相同名称的级别。如果级别的名称不同,仍然合并它们,并且最终得到的级别名称是原始级别名称的集合。如果一个层次结构比另一个长,那么它包含的多余级别将添加到虚拟层次结构中。注意,不能重命名级别。

尤其要注意子数据集的层次结构定义。要确保合并的级别具有相同的语义。否则,级别合并的结果将毫无意义。

在下面的例子中,数据集的等效级别有 State(比如美国的加利福尼亚州)和 Province(比如加拿大的安大略省)。在表 6 中,这两个级别的深度相同,因此合并它们会生成一个 State Province 级别,该级别包含成员 California 和 Ontario。


表 6. 必须在包含相同语义的层次结构上合并相同维度的级别名称
Sales EastSales WestAll sales
CountryCountryCountry
StateProvinceState Province(不匹配的名称被连接起来)
CityCityCity
NeighborhoodNeighborhood

表 7 中,State 和 Province 在不同的级别上,因此不合并它们。相反,Region(比如美国的 Pacific,在加拿大中没有等效对象)将与 Province 合并,但 Region 和 Province 的语义并不相同。

注意,对样例虚拟数据集查询 Neighborhood 级别将仅返回来自包含该级别的数据集的结果,比如 Sales East。因为 Sales West 不存在该级别上,所以返回的值仅来自 Sales East。对同一个虚拟数据集查询层次结构的 City 级别将返回来自两个数据集的结果,因为两个数据集都有一个称为 City 的级别。


表 7. 元素的语义不匹配将得到不良结果
Sales EastSales WestAll sales
CountryCountryCountry
RegionProvinceRegion Province(不匹配的级别导致无意义的结果)
StateState

除了级别合并之外,虚拟数据集还对子数据集的相同维度执行成员合并。成员也不例外,它们同样根据名称进行合并,如图 6 和表 8 所示。


图 6. 合并成员
合并 Cube A 和 Cube B 构成一个虚拟数据集

表 8. 合并成员构成虚拟数据集
Cube ACube BVirtual cube
Store salesStore salesStore sales合并同名的成员
Unit sales EastUnit sales East将不存在匹配对象的成员添加到虚拟数据集
Unit sales WestUnit sales West将不存在匹配对象的成员添加到虚拟数据集

对虚拟数据集查询合并成员将同时在子数据集中执行。虚拟数据集将根据合并运算符合并来自子数据集的结果。如果查询的虚拟成员基于仅存在一个数据集中的成员,那么得到的结果与查询包含该成员的子数据集一样。





回页首


处理虚拟数据集

虚拟数据集是通过 Design Studio 来定义的。使用 Cubing Services Administration Console 来管理虚拟数据集。清单 5 和图 7 显示了虚拟数据集元素如何出现在 Design Studio 中。尤其要注意出现在星号之间的文件夹。


图 7. 虚拟数据集元素的 Design Studio 视图
显示清单 5 所述的文件夹结构的屏幕截图

清单 5. Design Studio 文件夹结构
				
VirtualCubes
    Data Diagrams
    Data Models
        Database Model.dbm
            Database
            SQL Statements
            OLAP Objects
                CSSalesMarketing_Historic
                    FACT
                    Time
                    Cubes
                        *CSSalesMarketing_Historic* (this is a cube)
                            Time
                            Cube Facts (CSSalesMarketing_Historic)
                CSSalesMarketing_Recent
                    FACT
                    Time
                    Cubes
                        *CSSalesMarketing_Recent* (this is a cube)
                            Time
                            Cube Facts (CSSalesMarketing_Recent)
                *CSSalesMarketing* (this is a virtual cube)
                    MDX Calculated Measures
                    *Virtual Dimensions* (only renamed virtual dimensions appear here)
                        Time
                            *MDX Calculated Members*
                            Virtual Members
                    *Virtual Measures*
                        Sale total
                        Sale total
                Shared Dimensions
            GOSALESDW
            MDX
            Schema
    Other Files
    SQL Scripts
    

通过完成以下步骤创建虚拟数据集:

  1. 使用 Add Virtual Cube 选项向模块添加一个虚拟数据集。

  2. 选择两个用于合并成虚拟数据集的数据集。您可以从可用数据集列表中选择任意两个数据集。

  3. 通过选择 Add Virtual Dimension 重命名子数据集的任意现有维度,以合并维度。

  4. 通过选择 Add Virtual Member 重命名某个维度的成员,以合并成员。

  5. 通过选择 Add MDX Calculated Member 为虚拟数据集定义或添加计算成员。

Design Studio 仅显示通过显式地执行 Add 操作进行更改的虚拟数据集元素。要查看包含所有可用维度、层次结构和成员的虚拟数据集结构的完整视图,您可以使用 Design Studio 的维度浏览器。例如,如果将虚拟数据集添加到模块时,通过合并 [CubeA] 和 [CubeB] 定义了 [VirtualCube],那么 Design Studio 就显示 [VirtualCube]。如果 [CubeA] 的时间维度称为 [Time],而 [CubeB] 的时间维度称为 [Tiempo],那么应该合并这两个维度,因为它们具有相同的语义。为了进行合并,您可以将 [Tiempo] 重命名为 [Time]。您可以通过 Add Dimension 操作将 [CubeB].[Tiempo] 重命名为 [Time]。在 Design Studio 中,您将看到为虚拟数据集定义的一个虚拟维度,它将 [Tiempo] 更改为 [Time]。

如果您不希望两个数据集之一的特定维度出现在虚拟数据集中,那么可以通过一个选项隐藏它。这仅影响虚拟数据集,而不影响包含该维度的数据集。为了隐藏某个维度,将其添加到模块,然后勾选隐藏标志。

在合并两个维度时,可能出现每个维度有一个不同的默认成员的情况。可以通过一个选项在虚拟维度中将特定成员设置为默认成员。为了设置维度的默认成员,需要将该维度添加到模块,然后设置默认成员的属性。如果没有在虚拟维度上显式地设置默认成员,那么默认值就是选择用于构成虚拟数据集的第一个数据集的维度。

仅当来自两个数据集的成员具有相同的名称时才会合并它们。可以通过一个选项重命名成员以达到合并条件。另外,成员可以有自己的合并运算符(如果设置了的话),并且优先级别高于数据集合并运算符。要重命名成员,将其添加到包含它的虚拟维度下的模块中。如果成员没有包含在最终的虚拟数据集中,那么可能它被隐藏了。要隐藏成员,将其添加到包含它的虚拟维度下的模块中,然后单击隐藏标志。

在虚拟维度上下文中,您还可以创建虚拟计算成员。在数据集上定义的计算成员在虚拟数据集中不可用。一些计算在定义它们的数据集上下文中执行,将它们传播到虚拟数据集可能导致意外结果。如果将使用非分布式测度(比如标准偏差)的计算传播到虚拟数据集,将导致不可靠的结果。此外,如果两个数据集包含同名但计算不同的计算成员,那么数据集引擎将不能识别用户希望传播哪个计算。如果有必要的话,则要为虚拟数据集重新定义计算成员。

可以使用 Add Virtual Dimension 为任何添加到模型的定义虚拟计算成员。如果某个虚拟维度的一些成员被重命名,那么将在计算中使用新的成员名。下面关于虚拟计算成员的其他几点说明:

  • 虚拟计算成员仅存在虚拟数据集上下文中,并且不可以在子数据集中使用它们。

  • 虚拟计算成员通过允许设置父计算成员提供了更大的灵活性。某个计算成员的父计算成员的唯一 ID 可以是相同维度的非叶级上的任何成员。




回页首


从 Administration Console 管理虚拟数据集

对于 Administration Console 用户,虚拟数据集在以下几个方面不同于常规的数据集:

  • 属于占位符数据集模型的虚拟数据集称为 VIRTUAL。需要从这里才能删除虚拟数据集。

  • 虚拟数据集不包含缓存刷新调度信息。

  • 在数据集服务器上启动、停止、部署和反部署虚拟数据集的操作与常规数据集相似,但一些依赖项检查不同。

  • 仅当所有直接使用某个数据集或虚拟数据集的虚拟数据集停止或被反部署之后,才能停止或反部署该数据集或虚拟数据集。

  • 仅当虚拟数据集的直接数据集启动或部署之后,才能启动或部署它。




回页首


理解维度安全性

维度安全性是 InfoSphere Warehouse 9.7 中的新特性。本文的 参考资料 列出的一篇文章详细讲解了该特性。对于虚拟数据集,维度安全性继承自它的两个数据集。虚拟数据集上没有专门的安全性设置。您可以在实际的子数据集中设置安全性。

例如,对于一个基于都包含 [Store] 维度的 [Sales West] 和 [Sales East] 数据集的虚拟数据集,[Sales West] 数据集仅允许查看 [California] 的后代,而 [Sales East] 仅允许查看 [Florida] 的后代。虚拟数据集仅允许查看 Florida 和 California 的后代。





回页首


使用 Cube Server 启动虚拟数据集

当 Cubing Services 服务器启动时,将解析使用 Design Studio 定义的元素。这些元素包括虚拟维度、成员和计算成员。如果某个虚拟数据集的维度或成员被重命名,那么只有用户指定的名称是可用的。例如,合并 [CubeA] 和 [CubeB] 构成了 [VirtualCube]。[CubeA] 的时间维度是 [Time],而 [CubeB] 的时间维度是 [Tiempo]。将 [CubeB].[Tiempo] 重命名为 [Time] 将导致 CubeA.[Time] 和 CubeB.[Tiempo] 的合并,因为它们都具有相同的名称 Time。虚拟数据集的时间维度将为 [Time]。下一步是合并子数据集的共享维度的层次结构。在这个例子中,将按照级别(从 0 级别开始)合并 CubeA.[Time] 和 CubeB.[Tiempo] 的层次结构。

合并进程将检查维度成员是否同名,如果是,那么虚拟数据集仅包含合并子成员得到的一个成员。如果成员仅存在一个数据集中,那么将把它添加到虚拟数据集中。例如,[CubeA].[Time] 维度有两个成员 2008 和 2009,而 [CubeB].[Time] 有两个成员 2007 和 2008。合并这两个数据集得到的虚拟数据集将同时包含 2007、2008 和 2009 这 3 个成员。对成员 2007 执行的查询将返回来自数据集 [CubeB] 的结果,对成员 2008 执行的查询将返回来自 [CubeA] 和 [CubeB] 的结果(具体结果取决于合并运算符)。在另一个例子中,如果 [CubeB].[Time] 的成员为 2007 和 2008_1,那么前一个例子中的虚拟数据集的成员为 2007、2008、2008_1 和 2009。通过将 2008_1 重命名为 2008,虚拟数据集将包含成员 2007、2008 和 2009。

关于虚拟数据集的另一个重要注意事项是,在数据集服务器运行并且重新装载数据集时改变两个数据集的结构会发生什么。对于这种情况,将通过停止和启动虚拟数据集来重新构建它。每次启动虚拟数据集时,它都检查两个数据集并执行合并。





回页首


结束语

本文描述了如何创建虚拟数据集,以及合并流程的工作原理。此外,也详细解释了如何使用 Design Studio 和 Administration Console 管理虚拟数据集。本文的例子包含广泛的场景,可以用作实现特定解决方案的起点。这些场景实现了:

  • 使用时间分区改进性能

  • 使用货币转换获得全局性业务视图

  • 库存周转分析

  • 从不同的数据集聚合数据,比如 Web Sales 和 Store Sales

  • 如果两个数据集分别跟踪 East 地区和 West 地区的销售数据,那么进行地理分区





回页首


下载

描述名字大小下载方法
GSDB_TimePartitionExampleGSDB_TimePartitionExample.xml15KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论


关于作者

Adrian Mitrea 的照片

Adrian Mitrea 领导开发团队为 IBM InfoSphere Warehouse Cubing Services 9.7 添加虚拟数据集功能。他在 2003 年作为 IBM 的实习生,毕业时获得罗马尼亚 Technical University of Cluj-Napoca 的计算机科学学位。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款