CN117762976A - 数据查询方法、装置、电子设备及存储介质 - Google Patents

数据查询方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117762976A
CN117762976A CN202311727353.7A CN202311727353A CN117762976A CN 117762976 A CN117762976 A CN 117762976A CN 202311727353 A CN202311727353 A CN 202311727353A CN 117762976 A CN117762976 A CN 117762976A
Authority
CN
China
Prior art keywords
operator
query
association
tree
child node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311727353.7A
Other languages
English (en)
Inventor
原显智
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jinzhuan Xinke Co Ltd
Original Assignee
Jinzhuan Xinke Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jinzhuan Xinke Co Ltd filed Critical Jinzhuan Xinke Co Ltd
Priority to CN202311727353.7A priority Critical patent/CN117762976A/zh
Publication of CN117762976A publication Critical patent/CN117762976A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例涉及一种数据查询方法、装置、电子设备及存储介质,上述方法包括:获取目标语句,其中,所述目标语句为结构化查询语言;确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;基于所述第二查询算子树进行数据查询。由此,可以提高数据查询的效率。

Description

数据查询方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据查询方法、装置、电子设备及存储介质。
背景技术
相关技术中,在数据库优化器的逻辑优化部分,可以通过将关联子查询转换为非关联子查询,减少查询连接算子(join operator)的时间复杂度,压缩执行用时。当前关联子查询解关联的方法中,关联连接算子下推技术具有较强通用性。但是在应用上当前技术并未覆盖到全部算子的下推情形,导致数据查询的效率较低。
可见,如何提高数据查询的效率,是一个值得关注的技术问题。
发明内容
鉴于此,为解决上述部分或全部技术问题,本申请实施例提供一种数据查询方法、装置、电子设备及存储介质。
第一方面,本申请实施例提供一种数据查询方法,所述方法包括:
获取目标语句,其中,所述目标语句为结构化查询语言;
确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
基于所述第二查询算子树进行数据查询。
在一个可能的实施方式中,所述将所述关联连接算子下推到所述标记连接算子之下,包括:
确定目标数据表的去重关联列,其中,所述目标数据表为所述目标语句中的外层查询语句指示查询的数据表,所述去重关联列表示对所述目标数据表的关联列进行数据去重之后的结果;
基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
确定所述关联连接算子中的谓词,得到第一谓词;
确定所述第一谓词是否涉及目标列,得到判别信息,其中,所述目标列为所述标记连接算子的右侧表中的列;
基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词不涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示标记连接算子,所述根节点的第一左子节点表示第一关联连接算子,所述根节点的第一右子节点表示第二关联连接算子。
在一个可能的实施方式中,所述第一左子节点的右子节点表示标记连接算子的左侧表,所述第一左子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的右子节点表示标记连接算子的右侧表。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示所述第一谓词,所述根节点的唯一子节点表示标记连接算子,所述唯一子节点的第二左子节点表示第三关联连接算子,所述唯一子节点的第二右子节点表示第四关联连接算子。
在一个可能的实施方式中,所述第二左子节点的左子节点表示去重关联列对应的数据表,所述第二左子节点的右子节点表示所述第一查询算子树中的标记连接算子的左侧表,所述第二右子节点的左子节点表示去重关联列对应的数据表,所述第二右子节点的右子节点表示所述第一查询算子树中的标记连接算子的右侧表。
第二方面,本申请实施例提供一种数据查询装置,所述装置包括:
获取单元,用于获取目标语句,其中,所述目标语句为结构化查询语言;
确定单元,用于确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
下推单元,用于在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
查询单元,用于基于所述第二查询算子树进行数据查询。
在一个可能的实施方式中,所述将所述关联连接算子下推到所述标记连接算子之下,包括:
确定目标数据表的去重关联列,其中,所述目标数据表为所述目标语句中的外层查询语句指示查询的数据表,所述去重关联列表示对所述目标数据表的关联列进行数据去重之后的结果;
基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
确定所述关联连接算子中的谓词,得到第一谓词;
确定所述第一谓词是否涉及目标列,得到判别信息,其中,所述目标列为所述标记连接算子的右侧表中的列;
基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词不涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示标记连接算子,所述根节点的第一左子节点表示第一关联连接算子,所述根节点的第一右子节点表示第二关联连接算子。
在一个可能的实施方式中,所述第一左子节点的右子节点表示标记连接算子的左侧表,所述第一左子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的右子节点表示标记连接算子的右侧表。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示所述第一谓词,所述根节点的唯一子节点表示标记连接算子,所述唯一子节点的第二左子节点表示第三关联连接算子,所述唯一子节点的第二右子节点表示第四关联连接算子。
在一个可能的实施方式中,所述第二左子节点的左子节点表示去重关联列对应的数据表,所述第二左子节点的右子节点表示所述第一查询算子树中的标记连接算子的左侧表,所述第二右子节点的左子节点表示去重关联列对应的数据表,所述第二右子节点的右子节点表示所述第一查询算子树中的标记连接算子的右侧表。
第三方面,本申请实施例提供一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本申请上述第一方面的数据查询方法中任一实施例的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述第一方面的数据查询方法中任一实施例的方法。
第五方面,本申请实施例提供一种计算机程序,所述计算机程序包括计算机可读代码,当所述计算机可读代码在设备上运行时,使得该设备中的处理器实现如上述第一方面的数据查询方法中任一实施例的方法。
本申请实施例提供的数据查询方法,可以获取目标语句,其中,所述目标语句为结构化查询语言,之后,确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表,然后,在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树,随后,基于所述第二查询算子树进行数据查询。由此,可以通过将关联连接算子下推到标记连接算子之下,进行数据库优化器的逻辑优化,从而提高了数据查询的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本申请实施例提供的一种数据查询方法的流程示意图;
图2为本申请实施例提供的另一种数据查询方法的流程示意图;
图3A为本申请实施例提供的一种数据查询方法涉及的第一查询算子树的示意图;
图3B为本申请实施例提供的一种数据查询方法中去重关联列表生成之后的查询算子树的示意图;
图3C为本申请实施例提供的一种数据查询方法涉及的一种第二查询算子树的示意图;
图3D为本申请实施例提供的一种数据查询方法涉及的另一种第二查询算子树的示意图;
图4为本申请实施例提供的一种数据查询装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
现在将参照附图来详细描述本申请的各种示例性实施例,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值并不限制本申请的范围。
本领域技术人员可以理解,本申请实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等对象,既不代表任何特定技术含义,也不表示它们之间的逻辑顺序。
还应理解,在本实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本申请实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本申请对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本申请及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,上述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。为便于对本申请实施例的理解,下面将参考附图并结合实施例来详细说明本申请。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决现有技术中如何提高数据查询的效率的技术问题,本申请提供了一种数据查询方法,可以提高数据查询的效率。
图1为本申请实施例提供的一种数据查询方法的流程示意图。本方法可以应用于智能手机、笔记本电脑、台式电脑、便携式计算机、服务器等一个或多个电子设备上。此外,本方法的执行主体可以是硬件,也可以是软件。当上述执行主体为硬件时,该执行主体可以为上述电子设备中的一个或多个。例如,单个电子设备可以执行本方法,或者,多个电子设备可以彼此配合来执行本方法。当上述执行主体为软件时,本方法可以实现成多个软件或软件模块,也可以实现成单个软件或软件模块。在此不作具体限定。
如图1所示,该方法具体包括:
步骤101,获取目标语句,其中,所述目标语句为结构化查询语言。
在本实施例中,结构化查询语言(Structure Query Language,SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
在一些情况下,结构化查询语言可以包括子查询。子查询(也即子查询语句),指一个查询语句嵌套在另一个查询语句内部的查询语言。例如,如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句(例如select语句、insert语句、update语句或者delete语句)中,那么该select语句可以称为子查询(也叫内层查询、内层查询语句),包含子查询的SQL语句称为主查询(也叫外层查询、外层查询语句)。为了标记子查询与主查询之间的关系,通常将子查询写在小括号内。子查询一般用在主查询的where子句或having子句中,与比较运算符或者逻辑运算符一起构成where筛选条件或having筛选条件。子查询分为关联子查询(Dependent Subquery)与非关联子查询。其中,非关联子查询,可以是不依靠主查询,能够独立运行的子查询。如果子查询中仅仅使用了自己定义的数据源,这种查询是非关联子查询。非关联子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给主查询。如果子查询中使用了主查询的数据源,这种查询是关联子查询,此时主查询的执行与关联子查询的执行相互依赖。
这里,关联子查询例如可以是exists,=any等。
步骤102,确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表。
在本实施例中,可以将每个SQL语句(包括目标语句)抽象为一个查询算子树(operator tree)。第一查询算子树,可以是目标语句的查询算子树。其中,算子(operator)可以表示对数据表的一种操作。
步骤103,在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树。
在本实施例中,关联连接(correlated join)算子,可以是针对每一条外层查询中的记录,生成内层查询代表的子查询对应的结果集并与外层查询记录一同参与关联连接算子的谓词判断,决定最终是否输出。
标记连接(mark join)算子,对于标记连接左侧的每一条记录,生成一个标记列。其定义为右侧表中是否存在满足连接谓词的记录,若存在,则该标记列的值为TRUE,若不存在,该标记为FALSE,若不确定,该标记为NULL。对于左侧每一条记录,最终输出结果为该记录和标记列拼接的结果。
这里,在将第一查询算子树中表示关联连接算子的节点下推到表示标记连接算子的节点之下以后,即可获得第二查询算子树。所获得的第二查询算子树中,表示标记连接算子的节点可以是表示关联连接算子的节点的父节点。
步骤104,基于所述第二查询算子树进行数据查询。
在本实施例中,由于每个查询算子树可以对应一个SQL语句,由此,可以确定出所述第二查询算子树对应的SQL语句,进而利用该第二查询算子树对应的SQL语句进行数据查询。
本申请实施例提供的数据查询方法,可以获取目标语句,其中,所述目标语句为结构化查询语言,之后,确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表,然后,在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树,随后,基于所述第二查询算子树进行数据查询。由此,可以通过将关联连接算子下推到标记连接算子之下,进行数据库优化器的逻辑优化,从而提高了数据查询的效率。
图2为本申请实施例提供的另一种数据查询方法的流程示意图。
如图2所示,该方法具体包括:
步骤201,获取目标语句,其中,所述目标语句为结构化查询语言。
在本实施例中,步骤201与图1对应实施例中的步骤101基本一致,这里不再赘述。
步骤202,确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表。
在本实施例中,步骤202与图1对应实施例中的步骤102基本一致,这里不再赘述。
步骤203,在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,确定目标数据表的去重关联列,其中,所述目标数据表为所述目标语句中的外层查询语句指示查询的数据表,所述去重关联列表示对所述目标数据表的关联列进行数据去重之后的结果。
在本实施例中,外层查询语句也即上述所描述的外层查询,
数据表的关联列,可以用于内层查询和外层查询建立关联。
作为示例,对于如下目标语句,可以确定其关联列包括age,region两列:
进一步地,可以对每两个记录,判断该两个记录的age、region两列的字段值是否分别相同,如果相同,则去除其中一个重复的记录。按此方式去除age、region两列的字段值是否分别相同的记录,即可获得去重关联列。其中,上述示例中的去重关联列可以仅包含age、region两列。
步骤204,基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树。
在本实施例中,在获得去重关联列之后,可以基于该去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在本实施例的一些可选的实现方式中,可以采用如下方式,基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下:
第一步,确定所述关联连接算子中的谓词,得到第一谓词。
其中,第一谓词,可以是所述关联连接算子中的谓词。
第二步,确定所述第一谓词是否涉及目标列,得到判别信息。
其中,所述目标列为所述标记连接算子的右侧表中的列。
判别信息,可以表示第一谓词是否涉及目标列。具体地,在第一谓词表示对标记连接算子的右侧表中的列进行操作的情况下,可以确定第一谓词涉及目标列;在第一谓词并非表示对标记连接算子的右侧表中的列进行操作,也即第一谓词表示对标记连接算子的右侧表中的列之外的列(例如除右侧表之外的其它数据表中的列)进行操作的情况下,可以确定第一谓词不涉及目标列。
上述标记连接算子的右侧表可以是表示标记连接算子的节点的右子节点所表示的数据表。换言之,可以采用如下方式确定标记连接算子的右侧表:首先,确定表示标记连接算子的节点(后文称节点1),之后,确定节点1的右子节点(后文称节点2),随后,将节点2所表示的数据表确定为标记连接算子的右侧表。
第三步,基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在上述可选的实现方式中的一些应用场景下,可以采用如下方式,基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下:
在所述判别信息表示所述第一谓词不涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示标记连接算子,所述根节点的第一左子节点表示第一关联连接算子,所述根节点的第一右子节点表示第二关联连接算子。
其中,第一左子节点可以是待生成的第二查询算子树的根节点的左子节点。第一右子节点可以是待生成的第二查询算子树的根节点的右子节点。
第一关联连接算子,可以是第一左子节点表示的关联连接算子。
第二关联连接算子,可以是第一右子节点表示的关联连接算子。
进一步地,在上述应用场景中的一些情况下,所述第一左子节点的右子节点表示标记连接算子的左侧表,所述第一左子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的右子节点表示标记连接算子的右侧表。
其中,标记连接算子的左侧表,可以是表示标记连接算子的节点的左子节点所表示的数据表。换言之,标记连接算子的左侧表,可以采用如下方式确定:首先,确定表示标记连接算子的节点(后文称节点A),之后,确定节点A的左子节点(后文称节点B),随后,将节点B表示的数据表,确定为标记连接算子的左侧表。
在上述可选的实现方式中的一些应用场景下,可以采用如下方式,基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下:
在所述判别信息表示所述第一谓词涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示所述第一谓词,所述根节点的唯一子节点表示标记连接算子,所述唯一子节点的第二左子节点表示第三关联连接算子,所述唯一子节点的第二右子节点表示第四关联连接算子。
其中,谓词(包括上述第一谓词)可以看作一种算子。
第二左子节点可以是第二查询算子树的根节点的唯一子节点的左子节点。
第三关联连接算子可以是第二左子节点表示的算子,
第二右子节点可以是第二查询算子树的根节点的唯一子节点的右子节点。
第四关联连接算子可以是第二右子节点表示的算子。
进一步地,在上述应用场景中的一些情况下,所述第二左子节点的左子节点表示去重关联列对应的数据表,所述第二左子节点的右子节点表示所述第一查询算子树中的标记连接算子的左侧表,所述第二右子节点的左子节点表示去重关联列对应的数据表,所述第二右子节点的右子节点表示所述第一查询算子树中的标记连接算子的右侧表。
标记连接算子的左侧表,可以是表示标记连接算子的节点的左子节点所表示的数据表。换言之,标记连接算子的左侧表,可以采用如下方式确定:首先,确定表示标记连接算子的节点(后文称节点A),之后,确定节点A的左子节点(后文称节点B),随后,将节点B表示的数据表,确定为标记连接算子的左侧表。
标记连接算子的右侧表,可以是表示标记连接算子的节点的右子节点所表示的数据表。换言之,标记连接算子的右侧表,可以采用如下方式确定:首先,确定表示标记连接算子的节点(后文称节点A),之后,确定节点A的右子节点(后文称节点C),随后,将节点C表示的数据表,确定为标记连接算子的右侧表。
步骤205,基于所述第二查询算子树进行数据查询。
在本实施例中,步骤205与图1对应实施例中的步骤104基本一致,这里不再赘述。
需要说明的是,除以上所记载的内容之外,本实施例还可以包括图1对应的实施例中所描述的相应技术特征,进而实现图1所示数据查询方法的技术效果,具体请参照图1相关描述,为简洁描述,在此不作赘述。
本申请实施例提供的数据查询方法,通过去重关联列将关联连接算子下推到所述标记连接算子之下,这样,可以确保第二查询算子树与第一查询算子树的等价性,进而可以确保数据查询的准确性。
下面对本申请实施例进行示例性说明,但需要注意的是,本申请实施例可以具有以下所描述的特征,但以下描述并不构成对本申请实施例保护范围的限定。
目前大数据技术不断革新,SQL语言仍旧是当前主流数据处理软件不可抛弃的一部分。SQL语言中关联子查询表示逻辑上根据外层查询的每一个记录,内层查询生成一个结果集与该记录展开谓词判断。其可以大大简化业务开发。然而,这种业务表达上的简易却对数据库计算引擎的实现提出了挑战,如果根据其原初语义来实现,外层查询有多少记录,就要生成多少次结果集,在外层查询数据量大时代价巨大。因而,如果在不改变最终结果集的基础之上,将关联子查询对应的算子树做等价变化,最终去除所有的关联连接算子,计算效率可能得到较大提升。关联连接算子下推技术就是这样一种解决框架,该框架的应用依赖于关联连接算子下推各个算子的实现。但是就该技术当前的发展结果而言,并未出现关联连接算子下推标记连接算子的方案。
本方法是对数据库中关联子查询的一种优化方法。在数据库优化器的逻辑优化部分,可以尝试将关联子查询转换为非关联子查询,以减少join的时间复杂度、压缩执行用时。当前学术界以及工业界提出了多种关联子查询解关联的方法,其中关联连接算子下推技术具有较强通用性,但是在应用上当前技术并未覆盖到关联连接算子下推标记连接算子的情形。本方法弥补了这一缺口。
本方法的目的在于,提供一种在数据库优化器逻辑优化阶段正确地将关联连接算子下推到标记连接算子之下的方法。通过给出正确的关联连接算子下推标记连接算子的方案,保证执行结果的正确性以及执行效率的提升。
本方法的具体方案如下:
初始状态如图3A所示,图3A为本申请实施例提供的一种数据查询方法涉及的第一查询算子树的示意图。此时,未生成去重关联列,关联连接算子的右孩子(也即右子节点)表示标记连接算子。
在此基础上,可以采用如下方式进行查询算子树的优化:
第一步,生成去重关联列表。生成之后的结果如图3B,图3B为本申请实施例提供的一种数据查询方法中去重关联列表生成之后的查询算子树的示意图。其中D表示关联列去重之后的结果,下称去重关联列表;此外本节中将关联连接算子当中的谓词(也即上述第一谓词)记为p1,该查询算子树中的标记连接算子中的谓词记为p2。
这里,在生成去重关联列之后的表L和表R(也即图3B-图3D中的表L和表R)中的至少一个表是经表D关联谓词处理之后的结果。
第二步,生成去重关联列表的基础上,将关联连接算子下推到标记连接算子之下。具体方案分成以下两种情况:
如果p1(也即上述第一谓词)不涉及标记连接算子的右侧表中的列(也即上述目标列)。下推之后,结果(也即上述第二查询算子树)的根节点为标记连接节点(表示第二查询算子树的根节点表示标记连接算子)。其中,这里的标记连接算子的谓词包括p2和p3。其中,谓词p2表示第一步中标记连接算子中的谓词。谓词p3表示左右两侧去重关联列相同。其左右两侧都是关联连接节点,也即上述所述根节点的第一左子节点表示第一关联连接算子、所述根节点的第一右子节点表示第二关联连接算子。其中左侧关联连接节点表示的算子的谓词为p1,其左右两表分别为去重关联列表和标记连接算子的左侧表L。其中右侧关联连接的孩子分别为去重关联列表和标记连接算子的右侧表,也即所述第一右子节点的左子节点表示所述去重关联列对应的数据表、所述第一右子节点的右子节点表示标记连接算子的右侧表。见图3C。
如果p1(也即上述第一谓词)涉及标记连接算子的右侧表中的列(也即上述目标列)。下推之后,结果(也即上述第二查询算子树)的根节点表示谓词p1,其唯一孩子为标记连接节点(表示上述根节点的唯一子节点表示标记连接算子),标记连接算子的谓词包括p2和p3。其中,谓词p2表示第一步中标记连接算子中的谓词。谓词p3表示左右两侧去重关联列相同。其左右两侧都是关联连接节点,也即唯一子节点的第二左子节点表示第一关联连接算子、唯一子节点的第二右子节点表示第二关联连接算子。其中左侧关联连接左右两表分别为去重关联列表和原初标记连接算子的左侧表(也即图示中的表L);其中右侧关联连接的孩子分别为去重关联列表和原初标记连接算子的右侧表(也即图示中的表R)。见图3D。
需要说明的是,图示中未记载谓词的算子可以表示该算子无谓词。
以如下SQL语句(也即上述目标语句)为例,提供可利用本方案的例子,阐述关联连接算子下推之前(包括初始状态和关联列去重表生成两个状态)两个算子和对应谓词的含义。需要注意的是,本方法关注的是关联连接算子下推标记连接算子的具体方案,该方案是关联连接算子解关联过程中诸多步骤中的一个步骤。如下语句完整的解关联过程涉及到非本方法贡献的其他步骤(如关联连接算子下推谓词判断)。
select O.a,O.b,(
其中,语句中表O为外层查询对应的结果,关联谓词中谓词(也即上述第一谓词)p1为a+b>S;标记连接谓词p2为R.lecturer=L.name.内层查询中,表L(原名为Professor)和外层查询的关联谓词为L.age=O.age;表R(原名为Courses)和外层查询的关联谓词为R.region=O.region。外层查询表O的关联列包括age,region两列,第一步转换中生成的去重关联列表,即为这两列去重之后生成的新表。
去重表(也即去重关联列对应的数据表)生成之后,关联连接算子右侧孩子为谓词判断(标记连接生成的标记列=true or L.sabbatical=true),该谓词判断的孩子为标记连接算子。因而,当关联连接算子下推到右孩子下面后,其右孩子为标记连接算子,此时即可利用本方法进一步下推关联连接算子到标记连接算子下面,作为后续解关联的基础。
此外,在本示例中,关联连接算子可以是针对每一条外层查询中的记录,生成内层查询代表的子查询对应的结果集并与外层查询记录一同参与关联连接算子的谓词判断,决定最终是否输出。
标记连接:对于标记连接左侧的每一条记录,生成一个标记列。其定义为,右侧表中是否存在满足连接谓词的记录,若存在,则该标记列的值为TRUE,若不存在,该标记为FALSE,若不确定,该标记为NULL。对于左侧每一条记录,最终输出结果为该记录和标记列拼接的结果。
需要说明的是,除以上所记载的内容之外,本实施例还可以包括以上各实施例中所描述的技术特征,进而实现以上所示数据查询方法的技术效果,具体请参照以上描述,为简洁描述,在此不作赘述。
本申请实施例提供的数据查询方法,可以使得数据库中exists,=any等关联子查询可能基于本方法提高执行效率,并且,可以确保查询结果的准确性。
图4为本申请实施例提供的一种数据查询装置的结构示意图。具体包括:
获取单元401,用于获取目标语句,其中,所述目标语句为结构化查询语言;
确定单元402,用于确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
下推单元403,用于在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
查询单元404,用于基于所述第二查询算子树进行数据查询。
在一个可能的实施方式中,所述将所述关联连接算子下推到所述标记连接算子之下,包括:
确定目标数据表的去重关联列,其中,所述目标数据表为所述目标语句中的外层查询语句指示查询的数据表,所述去重关联列表示对所述目标数据表的关联列进行数据去重之后的结果;
基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
确定所述关联连接算子中的谓词,得到第一谓词;
确定所述第一谓词是否涉及目标列,得到判别信息,其中,所述目标列为所述标记连接算子的右侧表中的列;
基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词不涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示标记连接算子,所述根节点的第一左子节点表示第一关联连接算子,所述根节点的第一右子节点表示第二关联连接算子。
在一个可能的实施方式中,所述第一左子节点的右子节点表示标记连接算子的左侧表,所述第一左子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的右子节点表示标记连接算子的右侧表。
在一个可能的实施方式中,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示所述第一谓词,所述根节点的唯一子节点表示标记连接算子,所述唯一子节点的第二左子节点表示第三关联连接算子,所述唯一子节点的第二右子节点表示第四关联连接算子。
在一个可能的实施方式中,所述第二左子节点的左子节点表示去重关联列对应的数据表,所述第二左子节点的右子节点表示所述第一查询算子树中的标记连接算子的左侧表,所述第二右子节点的左子节点表示去重关联列对应的数据表,所述第二右子节点的右子节点表示所述第一查询算子树中的标记连接算子的右侧表。
本实施例提供的数据查询装置可以是如图4中所示的数据查询装置,可执行以上所述的各数据查询方法的所有步骤,进而实现以上所述的各数据查询方法的技术效果,具体请参照以上相关描述,为简洁描述,在此不作赘述。
图5为本申请实施例提供的一种电子设备的结构示意图,图5所示的电子设备500包括:至少一个处理器501、存储器502、至少一个网络接口504和其他用户接口503。电子设备500中的各个组件通过总线系统505耦合在一起。可理解,总线系统505用于实现这些组件之间的连接通信。总线系统505除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统505。
其中,用户接口503可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。
可以理解,本申请实施例中的存储器502可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DRRAM)。本文描述的存储器502旨在包括但不限于这些和任意其它适合类型的存储器。
在一些实施方式中,存储器502存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统5021和应用程序5022。
其中,操作系统5021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序5022,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本申请实施例方法的程序可以包含在应用程序5022中。
在本实施例中,通过调用存储器502存储的程序或指令,具体的,可以是应用程序5022中存储的程序或指令,处理器501用于执行各方法实施例所提供的方法步骤,例如包括:
获取目标语句,其中,所述目标语句为结构化查询语言;
确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
基于所述第二查询算子树进行数据查询。
上述本申请实施例揭示的方法可以应用于处理器501中,或者由处理器501实现。处理器501可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器501中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器501可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器502,处理器501读取存储器502中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSPDevice,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请的上述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文上述功能的单元来实现本文上述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本实施例提供的电子设备可以是如图5中所示的电子设备,可执行以上所述的各数据查询方法的所有步骤,进而实现以上所述的各数据查询方法的技术效果,具体请参照以上相关描述,为简洁描述,在此不作赘述。
本申请实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。
当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在电子设备侧执行的数据查询方法。
上述处理器用于执行存储器中存储的关联连接算子下推程序,以实现以下在电子设备侧执行的数据查询方法的步骤:
获取目标语句,其中,所述目标语句为结构化查询语言;
确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
基于所述第二查询算子树进行数据查询。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种查询方法,其特征在于,所述方法包括:
获取目标语句,其中,所述目标语句为结构化查询语言;
确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
基于所述第二查询算子树进行数据查询。
2.根据权利要求1所述的方法,其特征在于,所述将所述关联连接算子下推到所述标记连接算子之下,包括:
确定目标数据表的去重关联列,其中,所述目标数据表为所述目标语句中的外层查询语句指示查询的数据表,所述去重关联列表示对所述目标数据表的关联列进行数据去重之后的结果;
基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
3.根据权利要求2所述的方法,其特征在于,所述基于所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
确定所述关联连接算子中的谓词,得到第一谓词;
确定所述第一谓词是否涉及目标列,得到判别信息,其中,所述目标列为所述标记连接算子的右侧表中的列;
基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下。
4.根据权利要求3所述的方法,其特征在于,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词不涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示标记连接算子,所述根节点的第一左子节点表示第一关联连接算子,所述根节点的第一右子节点表示第二关联连接算子。
5.根据权利要求4所述的方法,其特征在于,所述第一左子节点的左子节点表示所述去重关联列对应的数据表,所述第一左子节点的右子节点表示标记连接算子的左侧表,所述第一右子节点的左子节点表示所述去重关联列对应的数据表,所述第一右子节点的右子节点表示标记连接算子的右侧表。
6.根据权利要求3所述的方法,其特征在于,所述基于所述判别信息和所述去重关联列,将所述关联连接算子下推到所述标记连接算子之下,包括:
在所述判别信息表示所述第一谓词涉及所述目标列的情况下,确定待生成的第二查询算子树的根节点表示所述第一谓词,所述根节点的唯一子节点表示标记连接算子,所述唯一子节点的第二左子节点表示第三关联连接算子,所述唯一子节点的第二右子节点表示第四关联连接算子。
7.根据权利要求6所述的方法,其特征在于,所述第二左子节点的左子节点表示去重关联列对应的数据表,所述第二左子节点的右子节点表示所述第一查询算子树中的标记连接算子的左侧表,所述第二右子节点的左子节点表示去重关联列对应的数据表,所述第二右子节点的右子节点表示所述第一查询算子树中的标记连接算子的右侧表。
8.一种查询装置,其特征在于,所述装置包括:
获取单元,用于获取目标语句,其中,所述目标语句为结构化查询语言;
确定单元,用于确定所述目标语句的查询算子树,得到第一查询算子树,其中,所述第一查询算子树的节点表示算子或数据表;
下推单元,用于在所述第一查询算子树的节点表示的算子包括关联连接算子和标记连接算子的情况下,将所述关联连接算子下推到所述标记连接算子之下,得到第二查询算子树;
查询单元,用于基于所述第二查询算子树进行数据查询。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现上述权利要求1-7任一所述的方法。
CN202311727353.7A 2023-12-14 2023-12-14 数据查询方法、装置、电子设备及存储介质 Pending CN117762976A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311727353.7A CN117762976A (zh) 2023-12-14 2023-12-14 数据查询方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311727353.7A CN117762976A (zh) 2023-12-14 2023-12-14 数据查询方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117762976A true CN117762976A (zh) 2024-03-26

Family

ID=90321275

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311727353.7A Pending CN117762976A (zh) 2023-12-14 2023-12-14 数据查询方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117762976A (zh)

Similar Documents

Publication Publication Date Title
US11354284B2 (en) System and method for migration of a legacy datastore
Chung et al. JackHare: a framework for SQL to NoSQL translation using MapReduce
KR20210025024A (ko) 데이터흐름 그래프 최적화를 위한 시스템 및 방법
US8732127B1 (en) Method and system for managing versioned structured documents in a database
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
CN102541631B (zh) 以多线程不同驱动源执行计划处理查询的方法和系统
CN108334609B (zh) Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质
CN107491476B (zh) 一种适用于多种大数据管理系统的数据模型转换及查询分析方法
CN107145549B (zh) 一种数据库缓存控制方法以及系统
US20140379753A1 (en) Ambiguous queries in configuration management databases
Petersohn et al. Flexible rule-based decomposition and metadata independence in modin: a parallel dataframe system
CN106649333B (zh) 字段顺序一致性检测方法和装置
CN116795859A (zh) 数据分析方法、装置、计算机设备和存储介质
CN113297251A (zh) 多源数据检索方法、装置、设备及存储介质
EP4430483A1 (en) Late materialization of queried data in database cache
US10409815B2 (en) SQLScript compilation tracing system
US11449504B2 (en) Database partition pruning using dependency graph
US20140280110A1 (en) Requests for source code text
US9280582B2 (en) Optimization of join queries for related data
CN115809294A (zh) 一种基于Spark SQL临时视图的快速ETL方法
WO2022262240A1 (zh) 数据处理方法、电子设备及存储介质
CN117762976A (zh) 数据查询方法、装置、电子设备及存储介质
US11074401B2 (en) Merging delta object notation documents
US11023674B2 (en) Generation and application of object notation deltas
CN117762975A (zh) 数据查询方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination