通过有选择地使用属性或关键字值优化查询生成的方法和装置的制作方法

文档序号:6418845阅读:291来源:国知局
专利名称:通过有选择地使用属性或关键字值优化查询生成的方法和装置的制作方法
化查询生成的方法和装置本发明涉及查询数据库中的数据,更具体说,涉及选择适当查询参数来高效执行查询的方法。
数据库通常在一个或者多个表示某些性质的实例数据的事实表中存储数据,以及用维数表定义事实表中的数据的属性。如

图1所示,事实表具有每一个表示与所涉及的实例相关的一个特定维数的一个元素的列和一个或者多个包含与特定实例有关的数据的度量列。该度量常常是数值,它们在事实数据中的记录被分组归集时可以以某种方式合计。例如,这些项可以求和或求平均。然而,也可以不是这样,事实表中的某些度量列中的“度量数据”可以只是任意字符串或不能合计的其它类型的值。本发明操作任何类型的事实表,只要它涉及一个或者多个具有属性的维数。
维数表示在一个类中的实体的有界集合,每类具有一个或者多个属性,这些属性可以以普通方式分类。维数通常在一个维数表中表示,表中有一列或者多列,唯一标识在该维数中的每一实体,称为关键字值。关键字值常常是给予在该维数中的实体的任意标识符,用于唯一标识它们。该表中的其它列,可能包括一个关键字列,提供每一实体的不同属性。可以使用这些属性值在不同级上分组在该维数表中的实体,以及根据数据的属性从事实表中抽取或合计它们。
为空间效率,和为避免可能引起数据库中不一致的冗余,只在事实数据表中存储每一维数的关键字值。应该注意,如果更有效的话,可以把与所讨论的维数中的关键字值具有一对一的对应表的内部表示存储在事实表中。用户永远看不到这些。在这种场合,为了本讨论的目的可认为内部表示是关键字值。
在本专利申请中的查询例子以SQL语言给出,因为它显然是今天使用的最普遍的查询语言。然而,显然,可以以其它查询语言同样有效地实现这里说明的本发明。
如果使用由用户请求的属性值对数据库中的数据进行查询,则必需在该查询中包括维数表,如下例SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM fact,dim1,dim2,dim3WHEREdim1.key1=fact.key1 ANDdim2.key2=fact.key2 ANDdim3.key3=fact.key3 ANDdim1.attr1 in(attrval11,attrval12,…,attrval1N) ANDdim2.attr2 in(attrval21,attrval22,…,attrval2P) ANDdim3.attr3 in(attrval31,attrval32,…,attrval3Q);在这一类型查询中,查询中指定的表在每一表中的任何公共字段上连接在一起。在上面的例子中,key1字段对于dim1表和事实表两者是公共的。key2字段对于dim2表和事实表两者是公共的。key3字段对于dim3表和事实实两者是公共的。
使用这样的连接,在输出表中为两个连接的表中的项的所有组合建立一个项,这里,在每一表中的连接字段是相同的。被连接的字段只在输出的连接表中出现一次。例如,连接图2A和2B中所示的两个表产生图2C中所示的输出表。
然而,如果在每一维数中选择的属性值的初始映射是对在该维数中的关键字值进行的话,则不必在查询中连接维数表和事实表,因为所有必需的信息在事实表中。例如,该查询可能读作SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM factWHEREfact.key1 in(val11,val12,…,val1N) ANDfact.key2 in(val21,val22,…,val2P) ANDfact.key3 in(val31,val32,…,val3Q);这常常比等价的属性逻辑查询有效得多,这取决于数据库如何处理该查询,因为维数表不需要被包含在该查询中。此外,数据库引擎由于各种优化,处理关键字值能够比处理属性更加有效。
可以例如通过用每一维数中的关键字值索引事实表来优化数据库。然后通过扫描在该索引中各关键的所有条目可以很快地找到合适的事实数据,使其包含在结果数据集中,因为与某特定关键字关联的索引是连续排列的。
如果数据库使用了这种基于优化模式的索引的话,则即使当对关键字值查询时,下述类型的查询在使用上常常更具优点,SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM fact,dim1,dim2,dim3WHEREdim1.key1=fact.key1 ANDdim2.key2=fact.key2 ANDdim3.key3=fact.key3 ANDfact.key1 in(val11,val12,…,val1N)ANDfact.key2 in(val21,val22,…,val2P)ANDfact.key3 in(val31,val32,val3Q);不管当今的数据库查询工具使用什么查询逻辑,它们所有都使用从请求到合适的SQL查询的同样变换,而不管通过使用选择的查询逻辑将要查询的条目的数目。例如在某些场合,所取的选择,特别在较高级的维数中,从某个维数表中产生很大数目匹配选择标准的记录。例如,有人可能询问市场上所有信托基金的所有股票基金。事实上,可能有数百个维数条目匹配该选择标准。如果数据库查询工具自动建立把选择的维数属性条目转换为在该基金维数中的关键字值的话,则将检索这些维数以发现匹配选择标准的关键字值。然后使用一个“IN”表把所涉及的条目加到该查询上,如同上面所示。当关键字值的数目非常大时会产生一个问题。大多数数据库系统对在单一“IN”表中的值数目有限制,因此查询工具必须把该查询分成多个查询,在数据库中检索。此外,即使未索引维数,与使用少数查询属性值和在该查询中引入维数来执行查询相比,只使用事实表来执行具有相当大的数目关键字值的查询事实上可能需要更长时间。例如,对于一个数据库引擎来说查阅相关维数表的一个属性值和检验它是否匹配与查看一个关键字值是否匹配几乎一样快。如果在该等价查询中的关键字值要比属性值的数目显著多的话,则在相关维数中查阅这些属性值要比检验所有关键字值查看它们中的一个是否匹配几乎肯定更快。
可以看到,需要一种查询工具,它可以根据所查询的实际属性在可选择的查询结构之间选择。
本发明提供一种从包括来自一个或者多个维数中的属性的数据请求产生查询的方法,其中,确定这些属性的相应的关键字值,然后根据执行该查询所必需的关键字值和属性的数目作出决定在查询中是使用属性逻辑还是使用关键字值逻辑。
图1举例表示3个类关系表和一个事实表。
图2A和2B举例表示两个表。
图2C表示图2A和2B所示两个表的连接。
图3表示根据本发明的第一实施例的系统的部件。
图4是表示根据本发明的第一实施例的选择算法的流程图。
现在参考图3-4说明本发明的一个特定的实施例。
如图3所示,在应用程序服务器2上作为一个对象提供查询发生器20。该查询发生器接受外部请求,并从其产生SQL查询。然后把SQL查询发送到数据库引擎4,它从数据库6中检索请求的数据。然后把返回的数据从数据库引擎回送到应用程序服务器,要么返回到请求者,要么处理后送到某个地方,例如到显示服务器10。
应用程序服务器还存储在有关要被检索的事实数据的数据库中的维数的复制品12。当查询发生器接收到包含一个或者多个属性的请求时,该查询发生器检索所有维数条目,识别所有需要的关键字值。这也可以使用对数据库服务器的查询而实现,但是效率很低。
然后查询发生器20确定,如何使用下面的逻辑产生该查询,所述逻辑在图4中作为流程图表示。
对于每一维数,如果关键字值的数目小于某个实验确定的阈值的话,则认为简单比较该关键字值和在事实表中的值来获得该查询的结果很可能更有效。对于申请人对其实施本实施例的系统,这一阈值的理想值被发现是30。在这一场合产生的查询不包括维数而只在事实数据上进行(称为相对于这一维数的“无”(“without”)查询,因为维数不需要)。例如,可以产生下面的查询。SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM factWHEREfact.key1 in(val11,val12,…,val1N)AND
然而,如果关键字的数目超过某个预定阈值,则产生的查询将依赖于事实表是否有对该维数的索引而变化。
如上所述,如果该维数被索引,则来自该维数的一个关键字值可以被很快地映射到事实表中包含该关键字值的适合的条目。
如果该维数关键字被索引,则执行比较,查看将在该查询中出现的关键字值的数目是否超过属性值的数目乘以某个预定常数A,A同样由实验确定。对于由申请人对其实施本实施例的系统,这一阈值的理想值发现是30,但应该注意,该值与上面讨论的阈值无关。
如果关键字值的数目超过该值,则认为属性逻辑可能更有效,并且产生一个属性查询。例如,可能产生一个包括下述术语的“带连接”的查询。术语“带连接”(with join)指的是这一事实,即在事实表和所讨论的维数表之间执行连接,其已参考图2A-2C讨论。应该注意,所有基于属性的查询是相对于该维数的“带连接”的查询,因为属性值不借助于维数表不可能被确定。SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM fact,dim1WHEREdim1.key1=fact.key1 ANDdim1.attrl in(attrval11,attrval12,…,attrval1N);然而,如果关键字值的数目不超过属性值数目乘以常数A的话,则使用数据库引擎优化的索引产生一个基于关键字值的、在其内包括该维数的“带连接”的查询。该查询可以包括下面的语句SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM fact,dim1WHEREdim1.key1=fact.key1 ANDfact.key1 in(val11,val12,…,val1N)AND…;如果所讨论的维数未索引,则使用关键字值的优点很少,如果毕竟还有什么优点的话。例如,对一个数据库引擎来说,在相关维数表中查阅一个属性值看其是否匹配,和看一个关键字值是否匹配几乎一样快。因此,在这种场合,把关键字值的数目和属性值的数目作一简单比较,而不去长时间建立一个实验系数。然而,取决于数据库引擎,如果合适的话可以使用这样一个系数。
如果关键字值的数目大于在该维数查询中将使用的属性值的数目的话,则在该查询中为该维数使用一个“带连接”的属性查询。否则,为该维数使用一个“无连接”的关键字查询,因为在检索中包含维数没有优点,因为它未作索引。
这一选择算法为每一维数重复,然后适当产生查询并传送到数据库查询引擎。
当然,取决于在每一维数中的查询的不同性质,在每一维数中可以进行不同连接。可以在查询中包括某些维数,而不包括其它维数。此外,某些维数可以包括属性逻辑,而其它维数不包括。例如,可以产生下面完整的查询,在该查询中包括第一维数和第三维数,前者使用关键字值逻辑,而后者使用属性值逻辑。SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.2FROM fact,dim1,dim3WHEREdim1.key1=fact.key1 ANDdim3.key3=fact.key3 ANDdim1.key1 in(val11,val12,…,val1N)AND…;fact.key2 in(val21,val22,…,val2P)AND…;dim2.attr3 in(attrval31,attrval32,…,attrval3Q);某些请求比迄今叙述的更加复杂。例如,当用户从一个维数中进行多个单独的选择(“保持”)时出现“多重保持”请求。在这一场合产生的查询需要在WHERE子句中使用“或”逻辑来模拟这一情况。例如,假定当用户从维数dim1中选择时进行多重“保持”。第一保持包括属性attr1和attr2,而第二保持包括属性attr3和attr4。所产生的查询应为SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.m2,fact.m3FROM fact,dim1 WHERE dim1.key1= fact.key1 AND((dim1.attr1 in(attrval11,…attrval1N)ANDdim1.attr2 in(attrval21,…attrval2N)OR
(dim1.attr3 in(attrval31, … attrval3N)ANDdim1.attr4 in(attrval41,…attrval4N))AND fact.key2 in(val21,val22,…,val2N)AND fact.key3 in(val31,val32,…,val3N)根据本实施例,通过这种类型的查询,在基于属性的查询中参考的每一属性在上面的算法中作为一个属性计数。使用关键字值的等效查询具有和前面说明的同样的格式,具有一个简单的“IN”表,因此对建立关键字值的数目不增加复杂性。
当用户选择包括一个“基”计算的度量(亦即类似份额的“某种东西”)时,会出现更复杂的情况。这通常从给定维数中调用“幕后”的附加选择。关键字逻辑通过在该维数的关键字表中的附加的关键字值解决这一情况。属性逻辑需要在涉及多重“保持”的语义之上执行附加的“或”运算。我们假定(在从上述例子的多重“保持”之上)用户选择一个“基”计算,它调用维数dim1中的附加选择,比方说从属性attr5。该查询看起来如下SELECT fact.key1,fact.key2,fact.key3,fact.ml,fact.m2,fact.m3FROM fact,dim1WHEREdim1.key1=fact.key1AND( ((diml.attr1 in(attrval11,…attrval1N)ANDdim1.attr2 in(attrval21,…attrval2N))OR(dim1.attr3 in(attrval31,…attrval3N) ANDdim1.attr4 in(attrval41,…attrval4N)))ORdim1.attr5 in(attrval51,…,attrval5N))AND fact.key2 in(val21,val22,…,val2N)这种情况以和“多重保持”情况类似方式处理。
应该注意,可以与属性逻辑选项一起使用星形连接选项,某些维数根据一个索引的维数使用星形连接,某些维数使用标准的属性逻辑。假定为维数dim1使用一个简单的属性逻辑的例子,则查询看起来如下SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.m2,fact.m3FROM fact,dim1,dim2,dim3WHEREdim1.key1=fact.key1AND dim2.key2=fact.key2AND dim3.key3=fact.key3ABD(dim1.attr1 in(attrval11,..attrval1N)AND dim1.attr2 in(attrval21,..attrval2N)AND dim1.attrN in(attrvalN1,…attrvalNN))AND dim2.key2 in(val21,val22,…,val2N)AND dim3.key3 in(val31,val32,…,val3N)在这一实施例的系统中,用户轮廓文件允许建立返回到用户的数据的子集。用户将只访问他具有特权看的那些记录。数据库(base)使用一个过滤机构来实现这一点。从属性逻辑的观点看,用户轮廓文件是一组维数选择,它们确定用户可以访问的数据的子集。假定为维数dim1的用户轮廓文件定义用户只可以访问属性attrK的值在给定值表中的那些记录,则由属性逻辑产生的查询可以看起来如下SELECT fact.key1,fact.key2,fact.key3,fact.m1,fact.m2,fact.m3FROM fact,dim1WHERE dim1.key1=fact.key1AND (dim1.attr1 in(attrval11,..attrval1N)AND dim1.attr2 in(attrval21,..attrval2N)AND dim1.attrK in(attrvalK1,…attrvalKN))AND fact.key2 in(val21,val22,…,val2N)AND fact.key3 in(val31,val32,…,val3N)所提到的每一属性值作为在本发明的该实施例的算法中的单一属性值对待。
属性逻辑不受划分的事实集影响。在物理划分的场合,使用一个聚集表定义每一划分。通常,使用所述逻辑对每一划分发布查询。
尽管图示和说明了本发明的优选实施例,但是本技术领域具有普通技能的人理解,可以进行改变和修改而不离开本发明的更广阔的范围。在下面的权利要求中叙述本发明的各种特征。
权利要求
1.一种产生用于从数据库中获取数据的查询的方法,所述数据库包括事实表和至少一个维数表;每一维数表提供表示一个维数的数据,所述数据包括一组实体的一组属性中的属性值,每一实体由一个关键字值标识;所述事实表包括数据项,每一数据项与来自每一所述维数的一个实体相关;所述查询基于指定来自一个或者多个所述维数中的一个或者多个所述属性值的数据请求;对于每一维数,所述方法包括步骤在所述维数中建立,与在所述维数中的所述属性值相关的所有关键字值;作为在所述维数中的所述关键字值的数目和所述属性值的数目的函数选择是对在该维数中的关键字值还是属性值进行查询;以及如果选择属性值查询的话,则使用属性值产生相应于该维数的所述查询的部分;如果选择关键字值查询的话,则使用关键字值产生相应于该维数的所述查询的部分。
2.根据权利要求1的方法,其中,所述选择对关键字值还是对属性值查询的步骤包括比较所述关键字值的数目与一个阈值,和如果关键字值的数目小于一个预定值,则对事实数据表使用关键字值查询实现相应于该维数的查询的部分的步骤。
3.根据权利要求2的方法,其中,如果在所述维数中的关键字值数目大于所述预定阈值,则使用属性值实现相应于该维数的查询的部分,如果为实现所述查询必需的关键字值对属性值的比低于某个比值的话;或使用关键字值实现相应于该维数的查询的部分,如果所述比高于所述比值的话。
4.根据权利要求3的方法,其中,所述比值根据该维数是否索引而变化。
5.根据权利要求3的方法,其中,如果使用关键字值实现所述查询的所述部分,则只使用事实数据表实现所述查询的所述部分,如果所述维数未索引的话;或通过连接事实数据表与相应维数表并相对于在所述连接的维数表中的维数关键字查询来实现所述查询,如果所述维数进行了索引的话。
6.产生从数据库中获取数据的查询的装置,所述数据库包括事实表和至少一个维数表;每一维数表提供表示一个维数的数据,所述数据包括一组实体的一组属性中的属性值,每一实体由一个关键字值标识所述事实表包括数据项,每一数据项与来自每一所述维数的一个实体相关,所述查询基于指定从一个或者多个所述维数中的一个或者多个所述属性值的数据请求,所述装置包括为在每一维数中建立所有关键字值的设备,所述关键字值与在所述维数中的所述属性值相关;作为所述维数中的所述关键字值的数目和所述属性值的数目的函数选择对在该维数中的关键字值还是属性值进行查询的设备;用于在选择属性值查询时使用属性值产生相应于该维数的所述查询的部分的设备;用于在选择关键字值查询时则使用关键字值产生相应于该维数的所述查询的部分的设备。
全文摘要
提供一种连接数据库(6)中两组或多组数据的方法,其中,设计事实数据中的某个维数(12)为被强迫维数,以及对于每一被强迫维数,当且仅当至少一项存在于事实数据中,其具有与除被强迫维数外的维数中同样的关键字值组时,在事实数据中产生一组项,每一项具有除被强迫维数外的所有维数中同样的关键字值,并且每一项具有为该维数的事实数据中存在的值组中的不同成员。
文档编号G06F12/00GK1292125SQ99803525
公开日2001年4月18日 申请日期1999年11月3日 优先权日1998年11月3日
发明者皮奥特·杰斯克·克里琴雅克 申请人:白金技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1