一种SQL连接操作中谓词下推的方法、终端及介质与流程

文档序号:14990749发布日期:2018-07-20 22:10阅读:267来源:国知局
本发明属于数据库
技术领域
:,具体涉及一种sql连接操作中谓词下推的方法、终端及介质。
背景技术
::数据库,更准确地说是rdbms(关系型数据库管理系统)广泛地应用于各种应用程序,sql是数据库中执行查询最常用的语言。数据库中包括多张表,包含相似值的特定列能存储在多张表中,表之间可以通过这特定列进行相互关联。例如,customertable表存储了customerid列,还存储所有客户和其相关信息(例如,姓名、年龄、性别和生日等),同时,storesalestable表也能存储customerid列,还存储了某一业务的销售信息。通过join查询,您无需返回customerid,即可获取所有销售信息和客户姓名,从而实现高效查询。join是sql查询的关键因素,优化join计算至关重要。目前存在几种join方式,三目前最重要的join算法是:mergejoin、nestedjoin和hashjoin。数据库可以在多个软件层构建。例如,存储层从非易失性存储(例如,hdd)保存或获取数据。优化数据库的方式之一是尽可能在存储层过滤数据,而不是在更高层(例如,引擎层)过滤数据。例如,执行select*fromtabletwherea=10;语句,如果a不是表的键,则会开始全表扫描,每一行的值与10进行比较,如果相等,则保存该行的值,否则跳过。“a=10”被称为“谓词”,它可以在比存储层更高的层进行数据过滤,但如果谓词下推至存储层,数据能被更早过滤,执行相同操作的成本会更少,而且性能会提高。在trafodion中,处理hashjoin的方法是最小值/最大值优化,它收集hash表的min和max,将其下推至存储层,并过滤小于min的值和大于max的值。此方案存在一个明显的局限性,在min和max之间存在某些应该被过滤的值却没有被过滤,因此过滤能力有限,会降低效率。在phoenix中,处理hashjoin的方法是将hash表作为谓词整个下推至regionserver层(phoenix的存储层),但该方法并不适用于regionserver层内存不足且无法存储整张hash表的情况。这种方案使高计算成本的运算符应用至存储层,这会导致缺乏足够资源处理高并发查询。如上所述,最小值/最大值的谓词下推解决方案在提高过滤效率方面能力有限。hash表的谓词下推方案,若hash表较大,但内存不足,会导致缺乏足够资源处理高并发查询。技术实现要素:针对现有技术中的缺陷,本发明提供了一种sql连接操作中谓词下推的方法、终端及介质,本发明与最小值/最大值和完整hash下推相比较,能根据事实表直方图提高数据过滤能力,从而提高存储层的计算效率。第一方面,本发明提供了一种sql连接操作中谓词下推的方法,包括以下步骤:将事实表和维度表进行hashjoin,根据所述维度表生成hash表,根据所述事实表生成事实表直方图;根据所述hash表和所述事实表直方图得到的n个谓词直方图区域,所述n为正整数;将所述n个谓词直方图区域转换为谓词,并将所述谓词下推至数据存储层。优选地,所述hash表中包括若干个键值。优选地,所述根据所述hash表和所述事实表直方图得到的n个谓词直方图区域具体为:对所述hash表中的键值进行hash排序,生成排序列表;根据所述排序列表得到排序列表的m个直方图区域;根据所述事实表直方图计算每个所述直方图区域的行数;按行数的从大到小顺序,从所述m个直方图区域中筛选出行数较大的前n个直方图区域,并将所述n个直方图区域作为n个谓词直方图区域,所述m为大于n的正整数。第二方面,本发明提供了一种终端,包括处理器和与所述处理器连接的存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如第一方面所述的方法。第三方面,本发明提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如第一方面所述的方法。本发明的有益效果为:本发明与最小值/最大值和完整hash下推相比较,能根据事实表直方图提高数据过滤能力,从而提高存储层的计算效率。附图说明为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。图1为本实施例中sql连接操作中谓词下推的方法流程图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。事实表,即事实数据表,每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如现金登记事务所产生的数据,事实数据表通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性维度表的主键,而维度表包含事实记录的特性。事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与维度表中对应项的相关索引字段之外的任何数据。维度表,维度表可以看作是用户来分析数据的窗口,维度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。通常数据库中的数据存在不同的表中,而不同的表有着它们自身的表结构,不同表之间可以是有关联的,大部分实际使用中,不会仅仅只需要一张表的信息。比如需要从一个学校的学生表(维度表)中找出杭州地区的学生,再用这个信息去检索成绩表(事实表)中他们的数学成绩,如果没有多表连接,那只能手动将第一个表的信息查询出来作为第二个表的检索信息去查询最终的结果,可想而知这将会是多么繁琐。实施例一:本实施例提供了一种sql连接操作中谓词下推的方法,如图1所示,包括以下步骤:s1,将事实表和维度表进行hashjoin,根据所述维度表生成hash表,根据所述事实表生成事实表直方图;所述hash表中包括若干个键值。s2,根据所述hash表和所述事实表直方图得到的n个谓词直方图区域,所述n为正整数;具体为,s21,对所述hash表中的键值进行hash排序,生成排序列表;例如,排序列表为(90,91,92,93,94,95,96,97,98,99,100)s22,根据所述排序列表得到排序列表的m个直方图区域;例如,根据排序列表得到了9个直方图区域,分别为90至91的直方图区域、91至92的直方图区域、92至93的直方图区域、93至94的直方图区域、94至95的直方图区域、95至96的直方图区域、96至97的直方图区域、97至98的直方图区域、98至99的直方图区域和99至100的直方图区域。s23,根据所述事实表直方图计算每个所述直方图区域的行数;例如,计算上述每个直方图区域的行数,分别为203、697、112、235、1032、254、322、20和35。s24,按行数的从大到小顺序,从所述m个直方图区域中筛选出行数较大的前n个直方图区域,并将所述n个直方图区域作为n个谓词直方图区域,所述m为大于n的正整数。例如,根据行数的从大到小顺序,从9个直方图区域中筛选出行数较大的前两个直方图区域,即91至92的直方图区域和94至95的直方图区域,并将这两个直方图区域作为谓词直方图区域。s3,将所述n个谓词直方图区域转换为谓词,并将所述谓词下推至数据存储层。例如,根据上述的两个谓词直方图区域转换为谓词[91,92]和[94,95],得到了最可能的排出范围,并将谓词下推至数据存储层。谓词下推如下:not(key>=91andkey<=92)ornot(key>=94andkey<=95)orkeyisnotnull。综上所述,本实施例与最小值/最大值和完整hash下推相比较,能根据事实表直方图提高数据过滤能力,从而提高存储层的计算效率。实施例二:本实施例提供了一种终端,包括处理器和与所述处理器连接的存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如实施例一所述的sql连接操作中谓词下推的方法,如图1所示,包括以下步骤:s1,将事实表和维度表进行hashjoin,根据所述维度表生成hash表,根据所述事实表生成事实表直方图;所述hash表中包括若干个键值。s2,根据所述hash表和所述事实表直方图得到的n个谓词直方图区域,所述n为正整数;具体为,s21,对所述hash表中的键值进行hash排序,生成排序列表;例如,排序列表为(90,91,92,93,94,95,96,97,98,99,100)s22,根据所述排序列表得到排序列表的m个直方图区域;例如,根据排序列表得到了9个直方图区域,分别为90至91的直方图区域、91至92的直方图区域、92至93的直方图区域、93至94的直方图区域、94至95的直方图区域、95至96的直方图区域、96至97的直方图区域、97至98的直方图区域、98至99的直方图区域和99至100的直方图区域。s23,根据所述事实表直方图计算每个所述直方图区域的行数;例如,计算上述每个直方图区域的行数,分别为203、697、112、235、1032、254、322、20和35。s24,按行数的从大到小顺序,从所述m个直方图区域中筛选出行数较大的前n个直方图区域,并将所述n个直方图区域作为n个谓词直方图区域,所述m为大于n的正整数。例如,根据行数的从大到小顺序,从9个直方图区域中筛选出行数较大的前两个直方图区域,即91至92的直方图区域和94至95的直方图区域,并将这两个直方图区域作为谓词直方图区域。s3,将所述n个谓词直方图区域转换为谓词,并将所述谓词下推至数据存储层。例如,根据上述的两个谓词直方图区域转换为谓词[91,92]和[94,95],得到了最可能的排出范围,并将谓词下推至数据存储层。谓词下推如下:not(key>=91andkey<=92)ornot(key>=94andkey<=95)orkeyisnotnull。综上所述,本实施例与最小值/最大值和完整hash下推相比较,能根据事实表直方图提高数据过滤能力,从而提高存储层的计算效率。应当理解,在本实施例中,所称处理器可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。实施例三:本实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行实施例一所述的sql连接操作中谓词下推的方法,如图1所示,包括以下步骤:s1,将事实表和维度表进行hashjoin,根据所述维度表生成hash表,根据所述事实表生成事实表直方图;所述hash表中包括若干个键值。s2,根据所述hash表和所述事实表直方图得到的n个谓词直方图区域,所述n为正整数;具体为,s21,对所述hash表中的键值进行hash排序,生成排序列表;例如,排序列表为(90,91,92,93,94,95,96,97,98,99,100)s22,根据所述排序列表得到排序列表的m个直方图区域;例如,根据排序列表得到了9个直方图区域,分别为90至91的直方图区域、91至92的直方图区域、92至93的直方图区域、93至94的直方图区域、94至95的直方图区域、95至96的直方图区域、96至97的直方图区域、97至98的直方图区域、98至99的直方图区域和99至100的直方图区域。s23,根据所述事实表直方图计算每个所述直方图区域的行数;例如,计算上述每个直方图区域的行数,分别为203、697、112、235、1032、254、322、20和35。s24,按行数的从大到小顺序,从所述m个直方图区域中筛选出行数较大的前n个直方图区域,并将所述n个直方图区域作为n个谓词直方图区域,所述m为大于n的正整数。例如,根据行数的从大到小顺序,从9个直方图区域中筛选出行数较大的前两个直方图区域,即91至92的直方图区域和94至95的直方图区域,并将这两个直方图区域作为谓词直方图区域。s3,将所述n个谓词直方图区域转换为谓词,并将所述谓词下推至数据存储层。例如,根据上述的两个谓词直方图区域转换为谓词[91,92]和[94,95],得到了最可能的排出范围,并将谓词下推至数据存储层。谓词下推如下:not(key>=91andkey<=92)ornot(key>=94andkey<=95)orkeyisnotnull。综上所述,本实施例与最小值/最大值和完整hash下推相比较,能根据事实表直方图提高数据过滤能力,从而提高存储层的计算效率。所述计算机可读存储介质可以是前述实施例所述终端的存储器,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的存储器也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的终端和介质的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1