一种基于分组向量的哈希多表连接实现方法技术

技术编号:22166651 阅读:39 留言:0更新日期:2019-09-21 10:28
本发明专利技术涉及一种基于分组向量的哈希多表连接实现方法,其包括以下步骤:1)对SQL查询命令进行改写,将一个完整的OLAP查询命令划分为选择‑投影‑分组‑连接操作和聚集操作两个子任务;2)选择‑投影‑分组‑连接操作子任务用于创建生成SQL命令中GROUP‑BY语句对应的分组向量元数据,并创建向量索引作为选择‑投影‑分组‑连接操作子任务的输出结果;3)聚集操作子任务执行基于向量索引的聚集计算,并将聚集计算结果存储在与分组向量等长的分组向量聚集器对应的单元中;4)将分组向量聚集器中的聚集计算结果与连接操作子任务创建的分组向量元数据合并,作为SQL查询命令的结果集输出。本发明专利技术可以广泛应用于OLAP数据查询领域。

An Implementation Method of Hash Multi-table Connection Based on Grouping Vector

【技术实现步骤摘要】
一种基于分组向量的哈希多表连接实现方法
本专利技术涉及一种基于分组向量的哈希多表连接实现方法,特别是关于一种面向OLAP应用中数据分布特征而优化设计的多表连接方法。
技术介绍
分析型SQL查询中主要包括选择、投影、连接、分组、聚集操作,在OLAP应用中,查询通常表示为在维表上按给定的选择条件投影出GROUP-BY属性,与事实表外键连接后对事实表度量列的指定属性执行分组聚集计算。传统关系数据库的查询树中选择和投影操作被下推到底层表节点,然后按查询树路径依次执行连接操作,迭代生成连接结果记录,并对连接结果记录进行哈希分组聚集计算。例如下面SQL查询命令执行过程如图1所示:selectsum(lo_revenue),C_nation,S_nationfromlineorder,customer,supplierwherel_CK=C_custkeyandl_SK=S_suppkeyandC_region=’AMERICA’andS_region=’ASIA’groupbyC_nation,S_nation;SQL命令中的where子句在customer和supplier表中选择出满足条件的记录并投影出GROUP-BY属性和相应的连接属性,然后创建相应的哈希表用于连接操作。SQL命令中事实表投影出相应的属性并依次与customer表和supplier表执行连接操作,生成带有GROUP-BY分组属性和聚集属性的连接记录,最后通过哈希分组操作进行聚集计算。传统的迭代流水查询处理模型在OLAP查询处理时存在的主要缺点如下:1.事实表记录依次执行与customer表产生的哈希表的连接操作,满足第一个连接条件的记录再与supplier表产生的哈希表连接,满足全部连接条件的记录才参与最终的哈希分组聚集计算。在连接阶段只有事实表外键属性参与计算,分组和度量属性在查询树之间传输但在不满足连接条件时记录被抛弃产生无效的数据传输代价。连接表的数量越多、选择率越低则所产生的无效数据传输代价越大。2.在哈希分组聚集计算阶段,由于维表与事实表记录之间的一对多关系,GROUP-BY属性上的哈希分组产生大量重复的哈希计算代价,当GROUP-BY属性为较长的字符型数据时哈希计算代价较高。3.在异构存储与计算平台,维表、事实表外键列、事实表度量列由于数据量存在较大的差异可能存储在不同的平台上,基于查询树的流水处理模型需要访问三个不同数据集的数据才能完成完整的查询处理任务,异构平台之间的数据通道传输延迟增加了流水处理各阶段之间的处理延迟。
技术实现思路
针对上述问题,本专利技术的目的是提供一种基于分组向量的哈希多表连接实现方法,通过基于向量索引的后物化技术将连接与聚集计算划分为两个独立的计算阶段,在聚集计算阶段采用最优的、基于GROUP-BY属性的分组向量聚集计算技术,在连接阶段创建支持分组向量聚集计算的向量索引,通过向量索引实现基于大粒度连接和聚集计算负载之间的异步流水处理。为实现上述目的,本专利技术采取以下技术方案:一种基于分组向量的哈希多表连接实现方法,其包括以下步骤:1)对SQL查询命令进行改写,将一个完整的SQL查询命令划分为选择-投影-分组-连接操作和聚集操作两个子任务;2)选择-投影-分组-连接操作子任务用于创建生成SQL查询命令中GROUP-BY语句对应的分组向量,并创建向量索引作为选择-投影-分组-连接操作子任务的输出结果;3)聚集操作子任务执行基于向量索引的聚集计算,并将聚集计算结果存储在与分组向量等长的分组向量聚集器对应的单元中;4)将分组向量聚集器中的聚集计算结果与步骤2)创建的分组向量合并,作为SQL查询命令的结果集输出。进一步的,所述步骤1)中,所述选择-投影-分组-连接操作子任务中,选择、投影、分组操作作用在维表上,用于创建连接操作的维表哈希表;连接操作执行事实表外键列与所述维表哈希表之间的多表连接操作,并生成向量索引作为连接操作的输出结果;所述聚集操作子任务执行事实表度量列上基于所述向量索引的聚集计算任务,得到聚集计算结果。进一步的,所述步骤2)中,所述向量索引是一个与分组聚集计算表等长的向量数据结构,所述向量索引中空值单元表示该单元对应的表中的记录不参与分组聚集计算,非空单元则表示该单元对应的表中的记录参与分组聚集计算;所述向量索引的单元值参照所述分组向量,所述分组向量对应GROUP-BY语句产生的分组属性集合,所述分组属性集合中的每个分组属性成员对应一个分组向量单元,分组属性成员ID设置为所述分组向量的下标地址,所述向量索引的非空单元中记录对应的分组向量单元地址,通过所述向量索引的单元值直接映射到分组向量对应的单元进行聚集计算。进一步的,所述步骤2)中,创建所述向量索引的连接操作包括三种实现方法:哈希预分组连接方法、基于多维分组映射的连接方法以及基于稀疏多维数组压缩的连接方法。进一步的,所述哈希预分组连接方法包括以下步骤:执行哈希多表连接操作后,为生成的连接记录的GROUP-BY分组属性创建哈希表,并执行哈希分组操作;创建一个全局序列生成器,从0开始以步长为1递增,为向量索引分配唯一的分组向量ID;对每一个生成的连接记录的GROUP-BY分组属性进行哈希探测,并根据哈希探测结果创建向量索引,具体的:如果哈希表中未探测到相同的GROUP-BY分组属性值,则创建哈希记录,从全局序列生成器中获得当前序列生成器值作为当前分组属性值的ID,然后序列生成器值增加1,并将分组属性值写入当前分组属性值ID对应的分组向量相应的单元中,同时将该分组属性值ID写入向量索引中对应位置的单元中,或者将记录位置ID和分组属性值ID追加到压缩向量索引中;如果哈希表中探测到相同的GROUP-BY分组属性值时,则将该哈希记录的分组属性值ID存储于向量索引对应的单元,或者将记录位置ID和分组属性值ID追加到压缩向量索引中;其中,在获得序列生成器当前值时利用latch对序列值加锁,序列生成器值增加1后释放latch锁。进一步的,所述基于多维分组映射的连接方法,包括以下步骤:对维表进行选择、投影、分组操作后,对投影出来的分组属性值进行动态字典表压缩,将分组属性映射为一个字典向量,字典向量下标作为该维表上的分组属性ID,当维表上有多个分组属性时,每一个分组属性组合值映射为一个向量单元,得到存储有维记录主键值和分组ID的维表哈希表;执行事实表外键列与维表哈希表之间的多表连接操作,得到多个维表分组ID组合值,将多个维表分组ID映射为一个多维数组,每个维表分组ID代表多维数组一个维上的下标,多表连接结果对应一个多维数组地址;将多维数组进一步映射为一维向量,多维数组地址转换为一维向量下标,得到向量索引,将连接结果记录在所述向量索引中。进一步的,所述基于稀疏多维数组压缩的连接方法,包括以下步骤:对维表进行选择、投影、分组操作后,对投影出来的分组属性值进行动态字典表压缩,将分组属性映射为一个字典向量,字典向量下标作为该维表上的分组属性ID,当维表上有多个分组属性时,每一个分组属性组合值映射为一个向量单元,得到存储有维记录主键值和分组ID的维表哈希表;执行事实表外键列与维表哈希表之间的多表连接操作,得到多个维表分组ID组合值,将多个维表分组ID映射为一个多维数组,每本文档来自技高网
...

【技术保护点】
1.一种基于分组向量的哈希多表连接实现方法,其特征在于包括以下步骤:1)对SQL查询命令进行改写,将一个完整的SQL查询命令划分为选择‑投影‑分组‑连接操作和聚集操作两个子任务;2)选择‑投影‑分组‑连接操作子任务用于创建生成SQL查询命令中GROUP‑BY语句对应的分组向量,并创建向量索引作为选择‑投影‑分组‑连接操作子任务的输出结果;3)聚集操作子任务执行基于向量索引的聚集计算,并将聚集计算结果存储在与分组向量等长的分组向量聚集器对应的单元中;4)将分组向量聚集器中的聚集计算结果与步骤2)创建的分组向量合并,作为SQL查询命令的结果集输出。

【技术特征摘要】
1.一种基于分组向量的哈希多表连接实现方法,其特征在于包括以下步骤:1)对SQL查询命令进行改写,将一个完整的SQL查询命令划分为选择-投影-分组-连接操作和聚集操作两个子任务;2)选择-投影-分组-连接操作子任务用于创建生成SQL查询命令中GROUP-BY语句对应的分组向量,并创建向量索引作为选择-投影-分组-连接操作子任务的输出结果;3)聚集操作子任务执行基于向量索引的聚集计算,并将聚集计算结果存储在与分组向量等长的分组向量聚集器对应的单元中;4)将分组向量聚集器中的聚集计算结果与步骤2)创建的分组向量合并,作为SQL查询命令的结果集输出。2.如权利要求1所述的一种基于分组向量的哈希多表连接实现方法,其特征在于:所述步骤1)中,所述选择-投影-分组-连接操作子任务中,选择、投影、分组操作作用在维表上,用于创建连接操作的维表哈希表;连接操作执行事实表外键列与所述维表哈希表之间的多表连接操作,并生成向量索引作为连接操作的输出结果;所述聚集操作子任务执行事实表度量列上基于所述向量索引的聚集计算任务,得到聚集计算结果。3.如权利要求2所述的一种基于分组向量的哈希多表连接实现方法,其特征在于:所述步骤2)中,所述向量索引是一个与分组聚集计算表等长的向量数据结构,所述向量索引中空值单元表示该单元对应的表中的记录不参与分组聚集计算,非空单元则表示该单元对应的表中的记录参与分组聚集计算;所述向量索引的单元值参照所述分组向量,所述分组向量对应GROUP-BY语句产生的分组属性集合,所述分组属性集合中的每个分组属性成员对应一个分组向量单元,分组属性成员ID设置为所述分组向量的下标地址,所述向量索引的非空单元中记录对应的分组向量单元地址,通过所述向量索引的单元值直接映射到分组向量对应的单元进行聚集计算。4.如权利要求3所述的一种基于分组向量的哈希多表连接实现方法,其特征在于:所述步骤2)中,创建所述向量索引的连接操作包括三种实现方法:哈希预分组连接方法、基于多维分组映射的连接方法以及基于稀疏多维数组压缩的连接方法。5.如权利要求4所述的一种基于分组向量的哈希多表连接实现方法,其特征在于:所述哈希预分组连接方法包括以下步骤:执行哈希多表连接操作后,为生成的连接记录的GROUP-BY分组属性创建哈希表,并执行哈希分组操作;创建一个全局序列生成器,从0开始以步长为1递增,为向量索引分配唯一的分组向量ID;对每一个生成的连接记录的GROUP-BY分组属性进行哈希探测,并根据哈希探测结果创建向量索引,具体的:如果哈希表中未探测到相同的GROUP-BY分组属性值,则创建哈希记录,从全局序列生成器中获得当前序列生成器值作为当前分组属性值的ID,然后序列生成器值增加1,并将分组属性值写入当前分组属性值ID对应的分组向量相应的单元中,同时将该分组属性值ID写入向量索引中对应位置的单元中,或者将记录位置ID和分组属性值ID追加到压缩向量索引中;如果哈希表中探测到相同的GROUP-BY分组属性值时,则将该哈希记录的分组属性值ID存储于向量索引对应的单元,或者将记录位置ID和分组属性值ID追加到压缩向量索引中;其中,在获得序列生成器当前值时利用latch对序列值加锁,序列生成器值增加1后释放latch锁。6.如权利要求4所述的一种基于分组向量的哈希多表连接实现方法,其特征在于:所述基于多维分组映射的连接方法,包括以下步骤:对维表进行选择、投影、分组操作后,对投影出来的分组属性值进行动态字典表压缩,将分组属性映射为一个字典向量,字典向量下标作为该维表上的分组属性ID,当维表上有多个分组属性时,每一个分组属性组...

【专利技术属性】
技术研发人员:张延松张宇王珊
申请(专利权)人:中国人民大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1