面向列存储数据仓库的多维olap查询处理方法

文档序号:6368208阅读:211来源:国知局
专利名称:面向列存储数据仓库的多维olap查询处理方法
技术领域
本发明涉及一种0LAP(联机分析处理)查询处理方法,尤其涉及一种面向列存储数据仓库,基于星型连接模型的多维OLAP查询处理方法,属于数据库管理技术领域。
背景技术
联机分析处理(On-Line Analytical Processing,简写为0LAP)的设计目标是满足决策支持或者多维环境下特定的查询和报表需求。数据仓库和OLAP是企业级决策处理的重要支撑技术。但是,海量数据上的OLAP性能难以满足日益增长的实时高性能分析处理的需求。 其性能的瓶颈主要体现在两个方面一是较低的硬盘I/o性能,二是查询处理技术不够优化。提高硬盘I/o性能的主流技术是列存储。列存储可以实现对数据按列存储和访问。目前,列存储数据库采用的查询处理技术主要有两类,一类是列数据查询处理技术,另一类是通过数据在内存的缓存将列存储数据动态转换为行存储数据,然后使用传统的行存储查询处理技术。列数据查询处理技术将关系代数细化为列代数,将关系操作分解为若干有序的列操作。列数据查询处理技术需要产生大量的物化连接索引和额外的列间连接操作代价,在OLAP查询中需要对事实表外键列进行两次扫描以完成过滤和分组操作,增加了额外的I/O访问开销。当前广泛采用的动态列/行转换查询处理技术,通过将数据按列访问提高投影操作的I/o效率,但在查询处理层次上仍然采用行存储的流水线(pipeline)查询处理技术。该流水线查询处理技术要对查询处理所需的连接数据进行先物化,当选择率较低时,大量物化数据最终被抛弃,消耗了额外的内存带宽资源,降低了内存处理性能。并行OLAP的主要应用场景是内存数据库。在行存储数据库中,具有代表性的技术是采用物化连接的方法将多个表物化为一个非规范化连接表,然后基于水平分片模式对可分布式聚集函数进行并行处理并合并聚集结果集。这种技术简化了查询处理的复杂度并提高了并行加速比,但需要付出较大的空间代价。在列存储模型上,具有代表性的技术是将执行代价大的列间连接操作进行逻辑水平分片后再并行连接,然后将并行连接结果合并后再参与其后的列操作。该技术实现过程简单,但串行处理的负载比例较高,整体并行处理资源未能得到充分的发挥。对于磁盘数据库的应用场景,并行OLAP的处理性能受磁盘并行访问I/O性能的制约,较少采用基于水平分片模式的并行处理技术,而是采用共享磁盘扫描模式的并发查询处理技术。该并发查询处理技术的核心是最小化OLAP的内存处理时间,使一个I/O延迟内能够处理尽可能多的并发查询任务。传统的哈希连接在并发查询处理负载下产生大量的哈希表,这些哈希表将耗尽系统的内存资源,从而导致哈希连接的性能变差。OLAP查询的选择率相对较高,因此并发查询处理面临更大的性能瓶颈,在实践中难以获得理想的性能。

发明内容
本发明所要解决的技术问题在于提供一种面向列存储数据仓库,基于星型连接模型的多维OLAP查询处理方法。该方法可以提高列存储的I/O性能,实现基于一趟列扫描基础上的OLAP查询处理。为解决上述的技术问题,本发明采用下述的技术方案一种面向列存储数据仓库的多维OLAP查询处理方法,将OLAP查询分解为位图过滤操作、分组操作和聚集操作,事实表和维表采用列存储模型进行存储,其特征在于在位图过滤操作中,首先将谓词在维表上执行并生成谓词向量位图。在查询处理时,顺序扫描连接操作对应的多个事实表外键属性列,通过代理键地址映射将连接操作转换为对位图的直接按位置访问操作,并抽取相应维表谓词向量中相应位进行与操作来判断该事实表记录是否满足连接过滤条件;在分组操作中,将满足过滤条件的事实表记录按SQL命令中的分组属性预生成分 组单元并分配递增的ID,并在事实表过滤分组向量中将该记录位置对应的向量值设置为当前分组ID ;在聚集操作中,通过对事实表度量属性的一趟列扫描实现按事实表过滤分组向量进行分组聚集计算。其中较优地,将维属性列加载到内存形成内存维属性数组,所述主键对应所述内存维属性数组的下标;事实表记录的外键属性值映射为对应维表中内存维属性数组的下标;所述事实表和所述维表通过外键与主键的对应关系完成多表连接操作。其中较优地,当内存不能容纳全部维表时,将查询处理中需要访问的维表分组属性列加载入内存形成内存维向量,在维表上进行谓词操作,将谓词操作结果存储在一个与维表等长的位图中,作为谓词向量来记录每一个维表记录对谓词操作结果的满足状态。其中较优地,预创建分组聚集哈希表和事实表过滤分组向量,所述分组聚集哈希表以查询中的分组属性和附加ID为对象进行预创建,所述事实表过滤分组向量为与事实表等长的数值型向量。其中较优地,顺序扫描事实表中具有维表连接关系的外键属性组,读取每一条外键属性组记录,将事实表外键属性值直接映射为谓词向量下标并取出谓词向量中该位所记录的位数据进行与操作;如果位运算结果为假,则继续读取下一条外键属性组记录;如果位运算结果为真,则将各个外键的值映射为维表分组属性向量的下标。其中较优地,抽取分组维属性向量中指定的数据项后进行哈希分组;如果当前哈希键值已存在,则取出该哈希分组ID并记入事实表过滤分组向量中与当前事实表记录相对应的位置中;如果当前哈希键值不存在,则在分组哈希表中创建一个新的哈希分组,并分配递增的ID,同时将该哈希分组ID记录在事实表连接向量中与当前事实表记录相应的位置上。其中较优地,在事实表外键属性组扫描完毕后,得到事实表过滤分组向量和预设的分组聚集哈希表,按最大ID值创建聚集函数的数组作为分组聚集累加器。其中较优地,当在所述事实表过滤分组向量中扫描到一个非零数据项时,按向量下标位置访问磁盘列存储的度量属性,并将度量属性值送入所述事实表过滤分组向量中哈希分组ID值对应的分组聚集累加器数组下标的单元中进行聚集计算。其中较优地,在所有的度量属性列完成聚集计算后,将分组聚集哈希表与各分组聚集累加器按ID和数组下标顺序进行合并,生成最终的OLAP聚集结果。其中较优地,如果查询处理过程中包含多个聚集函数,依次通过扫描事实表过滤分组向量的方式处理每个聚集函数。本发明具有如下的有益效果(I)无须借助于索引实现高性能OLAP查询处理;(2)通过代理键的地址映射实现事实表按外键属性直接定位到维表中相匹配的记录项,降低了连接算法的复杂度,提高了星型多表连接操作的性能和效率; (3)只需要对事实表进行一趟列扫描即可完成全部的OLAP处理任务,避免了多趟列扫描的代价;(4)能够支持各类聚集函数的并行处理。


下面结合附图和具体实施方式
对本发明作进一步的说明。图I为本发明所提供的⑶DTA-JOIN方法的数据结构和查询处理流程示意图;图2为对非代理键的维表主键进行键值转换的示意图;图3为行访问模式下的⑶DTA-JOIN方法示意图;图4为当查询中包含多个聚集函数时的并行⑶DTA-JOIN方法示意图;图5为采用事实表水平分片模式的并行⑶DTA-JOIN方法示意图;图6为对于不可分布聚集函数,以中位数聚集函数为例的多核并行算法示意图。
具体实施例方式OLAP查询处理的核心是星型连接(star-join),即在事实表与多个维表连接的基础上对连接结果进行分组聚集计算。在此基础上,本发明提供了一种多维OLAP查询处理方法。该方法在列存储数据仓库的基础上实现高性能的内存星型连接处理,通过对事实表进行一趟列扫描即可完成全部的OLAP查询处理任务,尤其适合在多核处理器平台上使用。基于该OLAP查询处理方法的上述特点,本发明人将其简称为⑶DTA-JOIN (CoIumn DirectlyDimensional Tuple Accessing-JOIN)方法。下面对此展开详细具体的说明。图I显示了本发明所提供的⑶DTA-JOIN方法的数据结构和查询处理流程。该方法的核心技术思想在于将标准OLAP查询分解为位图过滤操作、分组操作和聚集操作。在位图过滤操作中,首先将谓词(包括但不限于SQL命令中的where子句)在维表上执行并生成谓词向量位图(bitmap),通过代理键的地址映射将连接操作转换为直接维表记录访问操作,实现按位置进行访问。分组操作用于实现将满足连接过滤条件的事实表记录按SQL命令中的分组(group by)属性预生成分组单元并分配递增的ID。聚集操作通过对事实表度 量属性的一趟列扫描算法实现按位图过滤操作结果的分组单元进行分组聚集计算。此处的分组聚集计算是指先分组,然后按分组进行聚集,包括分组聚集哈希表,分组聚集操作等。这样,OLAP查询处理所需要的临时数据最小化为维表上的谓词向量和事实表上的过滤分组向量,能够保证临时数据的内存驻留性能,确保OLAP查询处理的高性能。在本CDDTA-JOIN方法中,包括事实表和维表在内的数据采用列存储模型进行存储。其中,维表主键为代理键,即自然递增数列1,2,3…。非代理键的维表主键通过动态转换规则在访问时实时映射为代理键。通过内存列存储技术将全部或部分维属性列(谓词属性列和分组属性列)加载到内存形成内存维属性数组,主键对应内存维属性数组的下标。事实表记录的外键属性值直接映射为对应维表中内存维属性数组下标。事实表与维表通过外键与主键之间的对应关系完成多表连接操作(例如星型连接),从而实现事实表按外键属性值直接访问内存维属性数组中指定下标的数据项。上述通过代理键的地址映射实现事实表按外键属性值直接定位到维表中相匹配的记录项的技术方案,降低了连接算法的复杂度,提高了连接算法的性能和效率。当内存充足时,维表被全部加载到内存以向量结构进行存储,向量下标与维表代理键值相对应;当内存不能够容纳全部维表时,将查询处理中需要访问的维表分组属性列加载入内存形成内存维向量,在维表上进行谓词操作,将谓词操作结果存储在一个与维表等长的位图(bitmap)中,作为谓词向量来记录每一个维表记录对谓词操作结果的满足状 态(I表示满足全部谓词操作,O表示不满足)。如果内存容量不足以容纳全部维表记录,则按如下优先级进行维表内存化分组属性一谓词操作属性一全部维属性。维属性在内存列中存储时可以应用数据压缩技术进一步降低内存消耗。分组属性和谓词操作属性可以在查询处理时通过增量的方式加载,并在内存维属性管理中按LRU(Least Recently Used,最近最少使用)策略淘汰访问频率低的维属性列以容纳新的维属性列。所谓谓词向量是指将SQL命令中的谓词操作(包括但不限于SQL命令中的where子句)应用于对应的维表上,并产生一个用于标识每条维表记录是否满足所有谓词条件的位图(bitmap),称之为谓词向量。在顺序扫描事实表记录并进行多表连接时,用访问维表谓词向量代替对维属性数组中数据项的访问和谓词计算,用谓词向量作为维表上的连接过滤判断条件。在查询处理时,每个维表只有谓词向量和查询所访问的维表分组属性需要加载到内存,从而降低对内存空间的需求。下面,以如下查询为例具体说明⑶DTA-JOIN方法的处理过程SELECT c_nation, s_nation, d_year sum(lo_revenue)as revenue, sum(lo_orders)as ordersFROM customer, supplier, date, lineorderWHERE lo_custkey = c_custkeyAND lo_suppkey = s_suppkeyAND lo_orderdate = dateidAND c_region =’ Asia,AND s_region =’ Asia,AND d_year in[1992,1997]GROUP BY c_nation, s_nation, d_year ;首先根据查询的分组聚集属性预创建分组聚集哈希表。为事实表创建过滤分组向量,用于标识满足连接过滤条件的事实表记录位置和其对应的哈希分组聚集单元的ID。分组聚集哈希表以查询中的分组属性和附加的自动累加的ID为对象进行预创建,不包括聚集函数字段。事实表过滤分组向量为与事实表等长的数值型(根据聚集分组最大ID值决定采用数值型数据的宽度)向量,预设值为O。该向量是先过滤后分组形成的,故称为过滤分组向量。顺序扫描事实表中具有维表连接关系的外键属性组,读取每一条外键属性组记录,将事实表外键属性值直接映射为谓词向量下标并取出谓词向量中该位所记录的位数据 进行AND (与)位运算。如果位运算结果为假,则继续读取下一条外键属性组记录;如果位运算结果为真,则将各个外键的值映射为维表分组属性向量的下标。抽取分组维属性向量中指定的数据项后进行哈希分组。如果当前哈希键值已存在,则取出该哈希分组ID并记入事实表过滤分组向量中与当前事实表记录相对应的位置中;如果当前哈希键值不存在,则在分组哈希表中创建一个新的哈希分组,并分配递增的ID,同时将该哈希分组ID记录在事实表连接向量中与当前事实表记录相应的位置上。事实表外键属性组扫描完毕后,得到事实表过滤分组向量和预设的分组聚集哈希表,按最大ID值创建聚集函数的数组作为分组聚集累加器。参照图I所示的实施例,假设维表全部加载为内存维向量,在三个维表上应用对应的谓词得到位图(bitmap)形式的谓词向量。首先从磁盘上扫描三个维表的外键列lo_custkey, lo_suppkey, I o_orderdate,例如当扫描到事实表外键属性组记录(3,1,1)时(图I中较深的颜色表示当前访问记录),同时访问customer, supplier, date维表上的谓词向量中第3,1,1位并进行AND(与)位运算。如果位运算结果为1,则从c_nation,s_nation, d_year维向量中抽取第3,1,1位的属性值“ India”, “Russia”, 1997并计算出对应的哈希键值。在分组聚集哈希表中查找该哈希键值,如果存在则将该哈希分组的ID值记录到事实表过滤分组向量的对应位置;如果不存在相同的哈希键值则创建一个新的哈希分组并分配递增的ID,同时将该ID记录在事实表过滤分组向量的对应位置上。事实表外键属性组扫描结束后生成了分组聚集哈希表和事实表过滤分组向量。接下来扫描事实表过滤分组向量,分别处理查询中的聚集计算。当在事实表过滤分组向量中扫描到一个非零数据项时,按向量下标位置访问磁盘列存储的度量属性(需要数据库支持对磁盘列存储数据的按偏移位置访问),并将度量属性值送入事实表过滤分组向量中与哈希分组ID值相同的分组聚集累加器数组对应下标的单元进行聚集计算(即累力口)并更新结果,如图I中度量值43256累加到revenue数组的第一个单元中,度量值65466累加到revenue数组的第二个单元中。完成对度量属性revenue的处理后,再次扫描事实表过滤分组向量,对度量属性lo_order进行聚集计算。根据分组聚集哈希表中ID的最大值创建聚集计算数组(分组聚集累加器),数组下标对应分组聚集累加器的哈希分组ID。此处的分组聚集累加器是指根据哈希分组器ID的数量为SQL命令中的每一个聚集函数生成一个数组,用于在对事实表度量属性进行一趟列扫描时实现分组聚集计算结果的存储。当扫描连接结果向量时,遇到非零向量数据项时根据其位置访问事实表属性列对应位置的度量值并根据连接结果向量值所对应的ID将度量属性值在分组聚集累加器数组与ID对应的数据单元中进行聚集计算。在所有的度量属性列完成聚集计算后,将分组聚集哈希表与各分组聚集累加器数组按ID和数组下标顺序进行合并,生成最终的OLAP聚集结果(即查询处理结果)。在对度量属性列的访问中,本发明一方面避免了传统的列处理算法中需要对连接属性列进行多次扫描来获得最终连接结果的代价;另一方面通过位图过滤操作获得事实表过滤分组向量后能够对事实表度量属性列实现按位置直接访问。当查询的总选择率(每个维表上的选择率相对较高,但对多个维表的连接操作导致最终选择率较低)较低时,本方法能够极大地减少对事实表度量属性列访问的I/o代价或内存带宽消耗。
上述的分组聚集哈希表是指通过位图过滤操作(谓词向量作为维表上的连接过滤器)和对维表记录按位置访问,完成事实表与多个维表之间的星型连接。在多表连接操作执行前,预生成事实表过滤分组向量和预分组哈希表。事实表过滤分组向量记录了满足连接过滤条件的事实表记录所对应的哈希分组ID。在多表连接操作执行时,每一个满足所有维表谓词向量过滤条件的事实表记录按外键属性值直接访问维表分组属性列数组下标对应的数据项,抽取出分组属性值并与分组哈希表进行匹配。如果在分组聚集哈希表中找到相同的分组项,则将哈希分组的ID值复制到连接结果向量中该事实表记录对应的位置;如果在分组聚集哈希表中未找到相同的分组项,则增加一个新的哈希分组项并分配一个递增的分组ID,同时将该哈希分组ID复制到事实表过滤分组向量中该事实表记录对应的位置。事实表外键属性组扫描完毕后生成了分组聚集哈希表和事实表过滤分组向量。前已述及,非代理键的维表主键通过动态转换规则在访问时实时映射为代理键。图2显示了对非代理键的维表主键进行的键值转换。维表date的主键不是标准的代理键,通用的方法是为维表date增加一个代理键dateid_s代替原始的主键dateid。对事实表中的外键orderdate可以采用两种方式一是直接将原始的外键更新为新的代理键值;二是在事实表中增加一个新的代理外键列,并按原始的外键属性值来更新代理外键orderdate_s列。这种转换过程需要在较小的维表和较大的事实表中都增加一个附加列,并通过表间连接操作完成事实表外键列上的数据更新。列存储保证了附加列的存储和更新具有较高的I/O效率。转换之后的外键属性值代表了与其具有连接关系的维表记录的偏移位置,可以映射为内存维属性向量的下标,并实现通过外键属性值直接访问维属性数据项。在本发明中,对度量属性的聚集处理采用一趟列扫描的方式能够保证列存储数据的顺序访问,具有最佳的I/o性能,但需要保证事实表过滤分组向量驻留内存并需要按聚集函数的数量对多个度量属性列进行扫描。为此,本发明提供了另外一种实现方案,即通过列存储数据库所提供的行访问接口(由数据库将来自多个查询相关列的数据动态转换为行记录)实现行访问模式的⑶DTA-JOIN查询处理。具体说明如下图3显示了行访问模式下的⑶DTA-JOIN查询处理过程。首先按行方式访问查询相关的外键属性组 lo_custkey, lo_suppkey, lo_orderdate, lo_revenue, lo_orders,完成根据维表谓词向量的连接过滤操作。对于满足过滤条件的记录,直接从维表分组属性向量中抽取分组属性值,并与聚集函数表达式的结果组合为查询结果记录,推入到分组聚集哈希表中完成分组聚集计算。行访问模式下的⑶DTA-JOIN查询处理不需要预生成分组聚集哈希表和事实表过滤分组向量,消除了聚集计算时对事实表过滤分组向量的多次扫描,但行访问模式需要数据库将列数据在缓存中转换为行数据,对多个属性的访问导致磁盘中较多的随机访问操作,对低选择率的度量属性也不能做到按位置访问,从而使I/O性能受到一定影响。
另外,当外部存储器采用具有并行I/O能力的存储设备,例如RAID磁盘阵列、SSD固态硬盘等设备时,可以通过并行I/o访问性能支持并行⑶DTA-JOIN查询处理过程。图4显示了当查询处理过程中包含多个聚集函数时的并行⑶DTA-JOIN查询处理过程首先通过对事实表外键属性组的扫描、谓词向量过滤和预哈希分组聚集创建事实表过滤分组向量;接下来,为每一个聚集函数创建一个聚集处理线程,在线程内创建各自的分组聚集累加器数组,通过共享访问事实表过滤分组向量的方式按位置访问度量属性列并进行聚集计算;各聚集处理线程处理完毕后,将每个聚集处理线程独立的分组聚集累加器与预分组聚集哈希表合并为查询聚集结果集。上述面向多聚集函数的多核并行计算对应于聚集计算属性较多或不可分布式聚集计算函数(如中位数、百分位聚集函数、TOP k函数等)的应用场景,即通过多核并行技术为每一个聚集函数分配一个专用的处理线程,实现并行的聚集计算。在OLAP查询处理过程中,如果查询中包含多个可分布式聚集函数时,依次通过扫描事实表的连接结果向量的方式处理每个聚集函数。具体而言,当查询中包含多个可分布式聚集函数时,可以为每一个聚集函数分配一个聚集处理线程,各个聚集处理线程共享访问事实表连接结果向量,并独立地访问聚集函数对应的事实表度量属性列,将分组聚集结果更新到每个聚集函数对应的分组聚集累加器中,以便完成度量列上的聚集计算,并最终合并为全局查询处理结果。当查询处理过程中包含较少的可分布式聚集函数时,通过将事实表水平分片的方式为每一个线程分配一个事实表分片,并行扫描事实表分片,通过本发明所提供的CDDTA-JOIN方法共享访问谓词向量和维表分组属性列,每个事实表分片维护自己私有的分组聚集哈希表,并在各自的事实表分片上独立地完成查询处理任务,最后将各个事实表分片的查询结果子集合并为全局查询结果。当查询处理过程中包含不可分布聚集函数和分组操作时,以中位数聚集函数为例,首先为每一个分组ID分配一个处理线程,在扫描事实表连接结果向量时按哈希分组ID将度量属性上满足过滤条件的数据分配给对应的处理线程,由各个处理线程独立地完成中位数聚集计算,并将中位数结果记录在分组聚集累加器数组对应ID的单元中。图5显示了采用事实表水平分片模式的并行⑶DTA-JOIN查询处理过程。其中,事实表被水平划分为多个物理分片,每个物理分片分配一个查询处理线程;在每个并行的查询处理线程内,执行基于行访问模式的CDDTA-J0IN方法(参考图3所示);谓词向量和分组维属性向量被各个查询处理线程共享访问,每个查询处理线程独立地执行分组聚集计算;最后将、各个查询处理线程的分组聚集结果归并为全局分组聚集结果。面向事实表水平分片的多核并行计算对应于可分布式聚集计算函数(如累加、计数、均值、方差等),即将事实表水平划分为多个分片,每个列存储水平分片完成独立的并行OLAP处理,并由全局OLAP处理线程实现对各个水平分片聚集结果集的归并计算。对于可分布式计算聚集函数,为每个聚集函数分配一个处理线程,各处理线程共享访问连接结果向量并将分组聚集结果更新到每个聚集函数对应的分组聚集累加器中。对于不可分布式计算聚集函数,为每一个聚集函数(一个聚集函数可能对应一个或多个度量属性)的分组分配一个处理线程,每个处理线程并行地执行集中式聚集计算,并将最终的聚集计算结果更新到分组聚集累加器数组相应的单元中。图6显示了对于不可分布聚集函数,以中位数聚集函数为例的多核并行处理过程,具体操作步骤如下首先通过对事实表外键属性组的扫描、谓词向量过滤和预哈希分组聚集创建事实表过滤分组向量;
根据事实表过滤分组向量的分组ID将读取的事实表度量属性划分为多个分组数据集;为每个分组数据集分配一个处理线程;在每个处理线程内独立地执行中位数聚集计算,对分组数据排序后计算中位的结果;各处理线程执行完毕后,将各线程的中位数结果复制到分组聚集哈希表中对应的聚集结果单元,完成全局聚集计算。以上对本发明所提供的面向列存储数据仓库的多维OLAP查询处理方法进行了详细的说明。对本领域的技术人员而言,在不背离本发明实质精神的前提下对它所做的任何显而易见的改动,都将构成对本发明专利权的侵犯,将承担相应的法律责任。
权利要求
1.一种面向列存储数据仓库的多维OLAP查询处理方法,将OLAP查询分解为位图过滤操作、分组操作和聚集操作,事实表和维表采用列存储模型进行存储,其特征在于 在位图过滤操作中,首先将谓词在维表上执行并生成谓词向量位图,通过代理键地址映射将连接操作转换为直接维表记录访问操作,实现按位置进行访问; 在分组操作中,将满足过滤条件的事实表记录按SQL命令中的分组属性预生成分组单元并分配递增的ID ; 在聚集操作中,通过对事实表度量属性的一趟列扫描实现按事实表分组过滤向量的分组项进行分组聚集计算。
2.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 将维属性列加载到内存形成内存维属性数组,所述主键对应所述内存维属性数组的下标; 事实表记录的外键属性值映射为对应维表中内存维属性数组的下标; 所述事实表和所述维表通过外键与主键的对应关系完成多表连接过滤操作。
3.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 当内存不能容纳全部维表时,将查询处理中需要访问的维表分组属性列加载入内存形成内存维向量,在维表上进行谓词操作,将谓词操作结果存储在一个与维表等长的位图中,作为谓词向量来记录每一个维表记录对谓词操作结果的满足状态。
4.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 预创建分组聚集哈希表和事实表过滤分组向量,所述分组聚集哈希表以查询中的分组属性和附加ID为对象进行预创建,所述事实表过滤分组向量为与事实表等长的数值型向量。
5.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 顺序扫描事实表中具有维表连接关系的外键属性组,读取每一条外键属性组记录,将事实表外键属性值直接映射为谓词向量下标并取出谓词向量中该位所记录的位数据进行与操作; 如果位运算结果为假,则继续读取下一条外键属性组记录;如果位运算结果为真,则将各个外键的值映射为维表分组属性向量的下标。
6.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 抽取分组维属性向量中指定的数据项后进行哈希分组;如果当前哈希键值已存在,则取出该哈希分组ID并记入事实表过滤分组向量中与当前事实表记录相对应的位置中;如果当前哈希键值不存在,贝1J在分组哈希表中创建一个新的哈希分组,并分配递增的ID,同时将该哈希分组ID记录在事实表连接向量中与当前事实表记录相应的位置上。
7.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 在事实表外键属性组扫描完毕后,得到事实表过滤分组向量和预设的分组聚集哈希表,按最大ID值创建聚集函数的数组作为分组聚集累加器。
8.如权利要求7所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 当在所述事实表过滤分组向量中扫描到一个非零数据项时,按向量下标位置访问磁盘列存储的度量属性,并将度量属性值送入所述事实表过滤分组向量中哈希分组ID值与分组聚集累加器数组对应下标的单元进行聚集计算。
9.如权利要求8所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 在所有的度量属性列完成聚集计算后,将分组聚集哈希表与各分组聚集累加器按ID和数组下标顺序进行合并,生成最终的OLAP聚集结果。
10.如权利要求I所述的面向列存储数据仓库的多维OLAP查询处理方法,其特征在于 如果查询处理过程中包含多个可分布式聚集函数,依次通过扫描事实表连接结果向量的方式处理每个可分布式聚集函数。
全文摘要
本发明公开了一种面向列存储数据仓库的多维OLAP查询处理方法。它将OLAP查询分解为位图过滤操作、分组操作和聚集操作。在位图过滤操作中,首先将谓词在维表上执行并生成谓词向量位图,通过代理键地址映射将连接操作转换为直接维表记录访问操作,实现按位置进行访问;在分组操作中,将满足过滤条件的事实表记录按SQL命令中的分组属性预生成分组单元并分配递增的ID;在聚集操作中,通过对事实表度量属性的一趟列扫描实现按事实表分组过滤向量的分组项进行分组聚集计算。本发明只需要对事实表进行一趟列扫描即可完成全部的OLAP处理任务,避免了多次扫描的代价。
文档编号G06F17/30GK102663116SQ20121011411
公开日2012年9月12日 申请日期2012年4月17日 优先权日2012年4月11日
发明者张延松, 王珊 申请人:中国人民大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1