CN117708168A - 图数据查询方法及装置 - Google Patents
图数据查询方法及装置 Download PDFInfo
- Publication number
- CN117708168A CN117708168A CN202311786339.4A CN202311786339A CN117708168A CN 117708168 A CN117708168 A CN 117708168A CN 202311786339 A CN202311786339 A CN 202311786339A CN 117708168 A CN117708168 A CN 117708168A
- Authority
- CN
- China
- Prior art keywords
- node
- ast
- data
- expression
- nodes
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 33
- 230000014509 gene expression Effects 0.000 claims abstract description 71
- 238000010586 diagram Methods 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 24
- 238000006243 chemical reaction Methods 0.000 claims description 23
- 230000001419 dependent effect Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 102100038367 Gremlin-1 Human genes 0.000 description 4
- 101001032872 Homo sapiens Gremlin-1 Proteins 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000003012 network analysis Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000013475 authorization Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Abstract
本说明书实施例提供一种图数据查询方法及装置。该方法包括:获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式;将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言;基于所述通用AST,确定图查询的执行计划。
Description
技术领域
本说明书一个或多个实施例涉及图数据技术领域,尤其涉及一种图数据查询方法及装置、一种计算机可读存储介质,以及一种计算设备。
背景技术
图数据库是一种特殊的数据库类型,其中存储的数据为图数据。图数据由点和边组成,其中点表示现实世界中的实体,如用户、企业、商品等,边表示节点之间的关系,例如,用户节点之间的好友关系,又例如,用户节点和商品节点之间的购买关系,再例如,演员与作品之间的出演关系,等等。
图数据库主要用于处理图数据查询,图数据查询已被广泛应用于社交网络分析、协同推荐、金融风控等领域。例如,在社交网络分析中,在已取得用户授权的情况下,查询两个用户的共同好友数量等。
然而,目前不同的图数据库使用不同的查询语言,如OpenCypher、Gremlin等等,这无疑增加了开发和维护的复杂度。由此,本说明书实施例提出一种改进方案,可以兼容多种不同的图查询语言,实现低成本、高效率的图数据查询。
发明内容
本说明书实施例披露一种图数据查询方法及装置,可以兼容多种不同的查询语言,实现低成本的高效率查询。
根据第一方面,提供了一种图数据查询方法,包括:获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式。将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言。基于所述通用AST,确定图查询的执行计划。
在一个实施例中,获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,包括:通过所述目标语言的解析器,对所述图查询语句进行解析,得到所述专用AST。
在一个实施例中,所述第一表达式子树包括若干枝干节点和若干叶节点,任一枝干节点对应于所述第一表达式中的一项操作,其子节点表示操作的对象;每个叶节点限定一项目标数据及其数据类型。
在一个具体的实施例中,所述若干枝干节点包括以下中的一项或多项:一元运算符对应的一元节点,表示对单个子节点进行运算操作;二元运算符对应的二元节点,表示对两个子节点进行运算操作;函数类节点,表示对若干子节点进行函数操作;条件类节点,通过子节点进行分支操作;数据结构类节点,表示从子节点中获取对应数据结构的数据。
另一方面,在一个具体的实施例中,所述第一表达式包括,对第一数据和第二数据进行第一运算操作;所述第一表达式子树包括,表示第一运算操作的第一节点,所述第一节点具有表示第一数据的第一子节点和表示第二数据的第二子节点。
进一步,在一个例子中,所述第一数据通过第一子表达式表示,其中包括第一子运算;所述第一子节点表示所述第一子运算,其具有若干进一步的子节点。
在另一个例子中,所述第二数据为变量;所述第二子节点为叶节点,其中限定所述变量的数据类型。
又一方面,在一个具体的实施例中,所述第一表达式包括,对第三数据进行第二运算操作;所述第一表达式子树包括,表示第二运算操作的第二节点,所述第二节点具有单个子节点,该单个子节点表示所述第三数据。
进一步,在一个例子中,所述第三数据通过第二子表达式表示,其中包括第二子运算;所述单个子节点表示所述第二子运算,其具有若干进一步的子节点。
在一个实施例中,将所述专用AST转化为通用AST,包括:基于针对所述目标语言的每条语法设定的转换规则,将所述专用AST中的一部分节点转化为构成所述通用AST的节点,并对另一部分节点进行舍弃。
在一个实施例中,基于所述通用AST,确定图查询的执行计划,包括:基于所述通用AST生成逻辑执行计划;将所述逻辑执行计划转化为对应的物理执行计划。
根据第二方面,提供一种图数据查询装置,包括:获取单元,配置为获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式。转化单元,配置为将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言。确定单元,配置为基于所述通用AST,确定图查询的执行计划。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当上述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,上述存储器中存储有可执行代码,该处理器执行上述可执行代码时,实现第一方面的方法。
通过采用本说明书实施例提供的上述方法和装置,可以实现对多种不同的图查询语言的兼容,同时,复用了图数据库的逻辑执行计划、物理执行计划和存储引擎等关键模块,减少了针对不同查询语言的开发和维护成本。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书实施例披露的图数据查询方案的系统架构示意图;
图2为本说明书实施例披露的图数据查询方法的流程步骤示意图;
图3为根据一个实施例的对应第一表达式的第一AST子树示意图;
图4为根据一个实施例的对图3中第一AST子树进行转化而得到的第一GST子树的示意图;
图5为本说明书实施例披露的图数据查询装置的功能结构示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
承前所述,本说明书实施例提出一种图查询方案,可以兼容多种不同的查询语言,低成本地实现高效率查询。参见图1,其中示意该图查询方案的系统架构,包括方案执行流程以及执行中用到的关键模块;具体地,方案的执行中顺序用到以下模块:
1)输入模块(图1中未示出)
输入模块支持用户输入基于任一种图查询语言编写的图查询语句,其中图查询语言可以是OpenCypher或Gremlin等。
2)语法解析器(Parser)
语法解析器用于将图查询语句解析为抽象语法树(Abstract Syntax Tree,简称AST)。可以理解,AST是查询语言的抽象语法结构的树状表示,不管是目前哪种类型的查询语言,其AST都强依赖于查询语言本身的语法,这意味着,即便是实现相同功能的查询语句,在不同查询语言下解析得到的AST也是不同的。
3)AST解析器
AST解析器用于将AST转化为通用的语法中间表示,或者说通用的AST。为区分转化前、后的AST,下文将转化前的AST称为专用AST,将转化后的AST称为通用AST或通用语法树(General Syntax Tree,简称GST)。转化得到的GST保留了转化前专用AST的语义和信息量,但不依赖于查询语言。
4)逻辑执行计划生成器(Logical Planner)
逻辑执行计划生成器用于生成与GST对应的逻辑执行计划,包括查询优化等步骤。
5)物理执行计划生成器(Physical Planner)
物理执行计划生成器用于将逻辑执行计划转化为具体的物理执行计划。
6)查询引擎
查询引擎用于执行物理执行计划,从而得到与查询语言对应的查询结果。
以上,介绍本说明书实施例披露的图数据查询方案的系统架构。在此系统架构下,可以实现对多种不同的图查询语言的兼容,同时,复用了图数据库的逻辑执行计划、物理执行计划和存储引擎等关键模块,减少了针对不同查询语言的开发和维护成本。
接下来结合图2,描述上述图数据查询方案的具体实施步骤。图2为本说明书实施例披露的图数据查询方法的流程步骤示意图,所述方法的执行主体可以为任何具有计算、处理能力的装置、平台、服务器或设备集群等,例如,可以为图数据库服务器。如图2所示,所述方法包括以下步骤:
步骤S210,获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式。步骤S220,将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言。步骤S230,基于所述通用AST,确定图查询的执行计划。
对以上步骤的展开介绍如下:
首先,在步骤S210,获取对目标语言的图查询语句进行解析得到的专用AST。
需理解,上述目标语言可以指代任意一种图查询语言,例如,OpenCypher或Gremlin,又例如,国际标准委员会制定中的图查询标准语言,其英文全称为theInternational Organization for Standardization Graph Query Language,可缩写为ISO GQL。
图查询语句是利用目标语言编写的图数据查询语句。在一个例子中,图查询语句为采用Gremlin语言编写得到的下示语句:
g.V().has('name',without('josh','marko'))查询语句i在另一个例子中,上述图查询语句为采用OpenCypher语言编写得到的下示语句:
MATCH(n where n.name not in['josh','marko'])查询语句ii
在本步骤中,可以通过目标语言的解析器对上述图查询语句进行解析,得到对应的专用AST。可以理解,专用AST是依赖于目标语言语法的,解析器可以基于目标语言的语法,利用Antlr4等工具进行定制而得到。
利用解析器执行的解析包括词法分析和语法分析,词法分析是识别出图查询语句中的各个语法单元(token),例如图查询关键字、变量等,形成一维数组;语法分析是将词法分析出来的数组转换成树形的形式,同时,验证语法,语法如果有错的话,抛出语法错误。
由上,通过解析图查询语句可以得到对应的专用AST。
接着,可以执行步骤S220,将专用AST转化为通用语法树GST。
首先需说明的是,本步骤的执行重点和难点在于将专用AST中对应于图查询语句中表达式的AST子树,转化为GST子树。这是因为,表达式是图查询语句的主要组成部分,其在图查询语言中起着至关重要的作用。具体而言,表达式用于描述和操作数据,其包括常量、变量、运算符和函数等元素,通过组合和运算这些元素可以构建查询条件和计算逻辑,由此,表达式使用户能够以直观、简洁的方式与数据进行交互,进行过滤、计算和转换等操作,故而在图查询语言中起着至关重要的作用。
图查询语句中表达式的数量可能为一个或多个,解析出的专用AST中包括与其中各个表达式对应的AST子树。为简洁描述,以下将图查询语句中的任意一个表达式称为第一表达式,将专用AST中对应该第一表达式的子树称为第一AST子树,将转化得到的GST中对应该第一AST子树的部分称为第一GST子树(或第一表达式子树)。需说明的是,“第一表达式”和“第一GST子树”等中的“第一”,以及文中他处的“第二”、“第三”等类似用语均是为了区分同类事物,不具有排序等其他限定作用。
示例性的,第一表达式为上述查询语句ii中的n.name not in['josh','marko'],其对应的第一AST子树可以参见图3,其中的节点与表达式中的语法元素存在以下对应关系:
以上,对第一AST子树进行示例性介绍。
对于将第一AST子树转化为第一GST子树,申请人考虑到不同查询语言的语法和语义是不同的,提出根据具体的查询语言(包括上述目标语言)编写相应的转化逻辑,转化逻辑中包括针对查询语言中与表达式相关的每条语法编写的转化规则。需理解,对于专用AST中除表达式子树以外的其他部分的转化,也可以通过编写相应的转化规则实现,因其并非本方案重点,不再展开描述。
上述转化逻辑的设计思想包括:使得转化后的GST子树完成保留AST子树的语义信息,或者说,完整保留图查询语句中表达式的语义信息,在此基础上,使得GST子树相较AST子树在结构上得到优化,以及通过去除AST子树中的冗余信息实现信息压缩。
上述设计思想及其中提及的有益效果,在第一GST子树的组成和结构上得到了充分体现。下面对第一GST子树进行详细介绍。具体地,第一GST子树包括若干枝干节点和若干叶节点。需理解,文中的若干指代一个或多个。
为清楚介绍,下面结合图4中示出的GST子树,先后介绍第一GST子树中的若干枝干节点、若干叶节点,以及第一GST子树中的几种典型结构。
一、若干枝干节点
若干枝干节点中的任一枝干节点对应于上述第一表达式中的一项操作,该任一枝干节点的子节点表示操作的对象。具体地,若干枝干节点可以包括以下中的一项或多项:
1)一元节点
一元节点对应于一元运算符,表示对单个子节点进行运算操作。需理解,文中的子节点可能是枝干节点也可能是叶节点。下表1中给出一元节点示例,其中单个数据指代单个子节点表示的数据。需理解,文中子节点对应的数据可以是表达式、变量或常量等。
表1
参见图4,其中示出的第一GST子树包括表1中的Not节点和GetField节点,其中Not节点的单个子节点为In节点,GetField节点的单个子节点为Ref节点。对In节点和Ref节点的介绍可以参见下文。
以上介绍若干枝干节点中可能包含的一元节点。
2)二元节点
二元节点对应于二元运算符,表示对两个子节点进行运算操作。该两个子节点中,一个为左子节点(lChild),另一个为右子节点(rChild)。下表2中给出二元节点示例,其中两个数据指代两个子节点表示的数据。
表2
二元节点 | 运算操作 |
Add | 对两个数据进行加法运算 |
Sub | 对两个数据进行减法运算 |
Mul | 对两个数据进行乘法运算 |
Div | 对两个数据进行除法运算 |
BitAnd | 对两个数据按位进行逻辑与运算 |
BitOr | 对两个数据按位进行逻辑或运算 |
And | 对两个数据进行逻辑与运算 |
Or | 对两个数据进行逻辑或运算 |
Equal | 比较两个数据是否相等 |
In | 判断一个值是否在一个序列中 |
Like | 判断给定的字符串是否与指定的模式相匹配 |
参见图4,其中示出的第一GST子树包括表2中的In节点,其两个子节点中一个为表1中的GetField节点,另一个为List节点。对List节点的介绍可以参见下文。
以上介绍若干枝干节点中可能包含的二元节点。
3)函数类节点
函数类节点表示对若干子节点进行函数操作。示例性的,其中若干子节点可以为两个子节点,其中一个子节点包含函数的名称信息,另一个子节点包含函数的操作对象信息。
以上介绍若干枝干节点中可能包含的函数类节点。
4)聚合函数类节点
首先需说明,聚合函数类节点可以被视作归属于函数类节点,也可以从函数类节点中独立出来,这并不会影响最终得到的GST。
聚合函数类节点表示根据若干子节点的描述信息对数据进行聚合操作。在一些实施例中,子节点包括描述聚合函数名称(functionName)的子节点、描述聚合函数是否需要去重(isDistinct)的子节点、描述去重依据(distinctBy)的子节点,以及描述被聚合的表达式的子节点。示例性的,聚合函数名称可以是sum、max、count或collect等。
以上介绍若干枝干节点中可能包含的聚合函数类节点。
5)条件类节点
条件类节点表示通过子节点进行分支操作。
在一个实施例中,条件类节点包括If节点,其包括3个子节点,一个子节点包含判断条件(condition)的信息,一个子节点包含条件判断为真的情况下的操作(trueBody),还有一个子节点包含条件判断为假的情况下的操作(falseBody)。
在另一个实施例中,条件类节点包括Case节点,其包括3个子节点,一个子节点包括输入数据的描述信息,一个子节点包括当输入数据命中备选数值时进行对应计算的表达式信息,还有一个子节点包括输入数据没有命中备选数据时需返回的数据信息。
以上介绍若干枝干节点中可能包含的条件类节点。
6)数据结构类节点
数据结构类节点表示从子节点中获取对应数据结构的数据。下表3中给出数据结构类节点的示例。
表3
数据结构类节点 | 运算操作 |
集合(Set)节点 | 从子节点中获取集合数据 |
元组(Tuple)节点 | 将不同类型的子节点组合成一个单一的复合元素 |
记录(Record)节点 | 通过名称(String结构)来访问子节点的复合元素 |
映射(Map)节点 | 对子节点中的数据进行映射(Map)操作 |
列表(List)节点 | 从子节点中获取列表数据 |
参见图4,其中示出的第一GST子树包括表3中的List节点,表示从其子节点中获取记录Vstring类型变量的列表数据。
以上介绍若干枝干节点中可能包含的数据结构类节点。
7)标签类节点
标签类(LabelTree)节点涉及对子节点中的节点或边数据进行标签的描述。示例性的,标签类节点可以包括:
①单标签(SingleLabel)节点,表示单标签的全部内容,其子节点中的变量表示标签名称,为string类型。
②标签排除(LabelNot)节点,表示排除这类标签的全部内容,其子节点为标签树(LabelTree)类型,表示排除给定的标签表达式。
③标签和操作(LabelAnd)节点,表示标签之间的和操作,其左子节点和右子节点均为标签树类型。
④标签或操作(LabelOr)节点,表示标签之间的或操作,其左子节点和右子节点均为标签树类型。
以上介绍若干枝干节点中可能包含的标签类节点。
上述介绍第一GST子树中枝干节点的7种可能类型。需理解,枝干节点的类型可以按需设计,只需一个枝干节点对应表达式中的一项操作,且其子节点表示操作的对象即可。接下来介绍第一GST子树中的若干叶子节点。
二、若干叶子节点
若干叶节点中的每个叶节点限定一项目标数据及其数据类型。具体地,该若干叶节点可以包括以下中的一项或多项:
1)基础数据类型(Literal)节点
基础数据类型节点表示具有对应基础数据类型的变量。下表4中给出基础数据类型节点的示例。
表4
基础数据类型节点 | 节点含义 |
VInt | Int类型的变量 |
VBool | Bool类型的变量 |
VDouble | Double类型的变量 |
VString | String类型的变量 |
VNull | 无效数据 |
VDate | String类型的日期变量 |
VDateTime | String类型的日期时间变量 |
2)Ref(Reference)节点
Ref节点表示图数据中的一个变量名称,可以为图的一个节点或一条边。例如,图4中示意出的Ref节点包含变量n,n为某个具体节点的变量名称。
以上介绍第一表达式子树中若干叶节点的2种可能类型。需理解,叶节点的类型可以按需设计,只需每个叶节点限定一项目标数据及其数据类型即可。接下来介绍第一GST子树中的几种典型结构。
三、第一GST子树中的典型结构
1)典型结构A
上述第一表达式包括对第一数据和第二数据进行第一运算操作,相应地,第一GST子树包括表示第一运算操作的第一节点,该第一节点具有表示第一数据的第一子节点和表示第二数据的第二子节点。
进一步,在一个具体的实施例中,第一数据通过第一子表达式表示,其中包括第一子运算;所述第一子节点表示所述第一子运算,其具有若干进一步的子节点。
示例性的,上述第一节点可以为图4中的In节点,其具有表示第一数据的GetField节点,GetField节点表示获取字段name的运算操作,其具有的子节点为Ref节点。
在一个具体的实施例中,所述第二数据为变量,表示第二数据的第二子节点为叶节点,其中限定所述变量的数据类型。
2)典型结构B
上述第一表达式包括对第三数据进行第二运算操作,相应地,第一GST子树包括表示第二运算操作的第二节点,该第二节点具有单个子节点,该单个子节点表示所述第三数据。
进一步,在一个具体的实施例中,所述第三数据通过第二子表达式表示,其中包括第二子运算;所述单个子节点表示所述第二子运算,其具有若干进一步的子节点。
示例性的,上述第二节点可以为图4中的Not节点,其具有单个子节点,即In节点。In节点对应的第三数据为子表达式:n.name in['josh','marko'],In节点表示判断n.name是否在为'josh'或'marko',其具有进一步的子节点,即GetField节点和List节点。
以上,对第一GST子树中的典型结构进行示例性介绍。
在上述依次介绍第一GST子树中的若干枝干节点、若干叶节点和几种典型结构之后,为帮助对本步骤的进一步理解,结合图3和图4,对将第一AST子树转化为第一GST子树的过程进行示例性介绍。转化过程可以包括:
1)将图3中InExpression和其子节点Not、In,转化为图4中Not节点及其子节点In。
注意到,图3中的InExpression节点包括了NOT、IN这些叶子节点,实际上IN的信息含义已经可以在InExpression这个节点中体现,所以IN实则为冗余信息。
根据针对OpenCypher语言编写的转化逻辑,将图3中的InExpression转化为In节点,并将In节点设置为Not节点的子节点,图3中的IN节点被舍弃。
2)将图3中的ExpressionPredicate节点转化为图4中的GetField节点。
具体地,图3中的ExpressionPredicate节点表示n.name,将n.name拆分后,将GetFiled节点的“filedName”直接赋值为'name',对于'n',根据转化规则将GetFiled节点的子节点赋值为Ref(val='n')。
3)将图3中的ListValue节点转化为图4中的List节点。
根据转化规则,对于图3中ListValue节点的无用信息LEFT_BRACKET(左括号)/RIGHT_BRACKET(又括号)/COMMA(逗号)不在通用语法表示中进行保留,只留下关键信息vector<Expression>,并根据转化规则将vector<Expression>映射到图4中的List节点,List节点保留了Expression数组,'josh'和'marko'分别转为了VString(val='josh')和VString(val='marko'),存放在数组中。
4)对ListValueTypeName节点进行去除。
ListValueTypeName被规则所忽略,因为其信息LIST或者ARRAY对语义来说没有任何区别,所以精简此部分不再进行保留。
由上,可以将图3中的第一AST子树转化为图4中的第一GST子树,并且,第一AST子树的完整语义和有意义的信息被保留,无意义的冗余信息被去除,信息量得到压缩。
以上,通过执行步骤S220,可以实现将专用AST转化为通用语法树GST。
之后,执行步骤S230,基于通用语法树GST,确定图查询的执行计划。
在一个实施例中,可以基于GST生成逻辑执行计划。需理解,逻辑执行计包括执行查询和计算的步骤,其中的数据仍是表、列等数据库中的逻辑概念。在一些具体的实施例中,考虑到由GST直译得到的逻辑执行计划一般性能不高,提出可以优化计划,主要是尽量在逻辑执行计划的最内层减少要处理的数据量,从而有效减少整体计算量。
在一些实施例中,还可以将逻辑执行计划转化为对应的物理执行计划。可以理解,物理执行计划和数据的物理存储结构相关。物理执行计划可以根据数据的物理存储结构、是否存在索引以及数据多少等各种因素进行优化。通过查询引擎执行物理执行计划,可以得到与图查询语句对应的查询结果。
由上,可以实现图数据查询。
综上,采用本说明书实施例披露的图数据查询方法,可以实现对多种不同的图查询语言的兼容,同时,复用了图数据库的逻辑执行计划、物理执行计划和存储引擎等关键模块,减少了针对不同查询语言的开发和维护成本。
与上述图数据查询方法相对应的,本说明书实施例还披露一种图数据查询装置。图5为本说明书实施例披露的图数据查询装置的功能结构示意图,如图5所示,所述装置500包括以下单元:
获取单元510,配置为获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式。转化单元520,配置为将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言。确定单元530,配置为基于所述通用AST,确定图查询的执行计划。
在一个实施例中,获取单元510具体配置为:通过所述目标语言的解析器,对所述图查询语句进行解析,得到所述专用AST。
在一个实施例中,所述第一表达式子树包括若干枝干节点和若干叶节点,任一枝干节点对应于所述第一表达式中的一项操作,其子节点表示操作的对象;每个叶节点限定一项目标数据及其数据类型。
在一个具体的实施例中,所述若干枝干节点包括以下中的一项或多项:一元运算符对应的一元节点,表示对单个子节点进行运算操作;二元运算符对应的二元节点,表示对两个子节点进行运算操作;函数类节点,表示对若干子节点进行函数操作;条件类节点,通过子节点进行分支操作;数据结构类节点,表示从子节点中获取对应数据结构的数据。
另一方面,在一个具体的实施例中,所述第一表达式包括,对第一数据和第二数据进行第一运算操作;所述第一表达式子树包括,表示第一运算操作的第一节点,所述第一节点具有表示第一数据的第一子节点和表示第二数据的第二子节点。
在一个例子中,所述第一数据通过第一子表达式表示,其中包括第一子运算;所述第一子节点表示所述第一子运算,其具有若干进一步的子节点。在一个例子中,所述第二数据为变量;所述第二子节点为叶节点,其中限定所述变量的数据类型。
又一方面,在一个具体的实施例中,所述第一表达式包括,对第三数据进行第二运算操作;所述第一表达式子树包括,表示第二运算操作的第二节点,所述第二节点具有单个子节点,该单个子节点表示所述第三数据。
示例性的,所述第三数据通过第二子表达式表示,其中包括第二子运算;所述单个子节点表示所述第二子运算,其具有若干进一步的子节点。
在一个实施例中,转化单元520具体配置为:基于针对所述目标语言的每条语法设定的转换规则,将所述专用AST中的一部分节点转化为构成所述通用AST的节点,并对另一部分节点进行舍弃。
在一个实施例中,确定单元530具体配置为:基于所述通用AST生成逻辑执行计划;将所述逻辑执行计划转化为对应的物理执行计划。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所描述的方法。本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (14)
1.一种图数据查询方法,包括:
获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式;
将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言;
基于所述通用AST,确定图查询的执行计划。
2.根据权利要求1所述的方法,其中,获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,包括:
通过所述目标语言的解析器,对所述图查询语句进行解析,得到所述专用AST。
3.根据权利要求1所述的方法,其中,所述第一表达式子树包括若干枝干节点和若干叶节点,任一枝干节点对应于所述第一表达式中的一项操作,其子节点表示操作的对象;每个叶节点限定一项目标数据及其数据类型。
4.根据权利要求3所述的方法,其中,所述若干枝干节点包括以下中的一项或多项:
一元运算符对应的一元节点,表示对单个子节点进行运算操作;
二元运算符对应的二元节点,表示对两个子节点进行运算操作;
函数类节点,表示对若干子节点进行函数操作;
条件类节点,通过子节点进行分支操作;
数据结构类节点,表示从子节点中获取对应数据结构的数据。
5.根据权利要求3所述的方法,其中,所述第一表达式包括,对第一数据和第二数据进行第一运算操作;所述第一表达式子树包括,表示第一运算操作的第一节点,所述第一节点具有表示第一数据的第一子节点和表示第二数据的第二子节点。
6.根据权利要求5所述的方法,其中,所述第一数据通过第一子表达式表示,其中包括第一子运算;所述第一子节点表示所述第一子运算,其具有若干进一步的子节点。
7.根据权利要求5所述的方法,其中,所述第二数据为变量;所述第二子节点为叶节点,其中限定所述变量的数据类型。
8.根据权利要求3所述的方法,其中,所述第一表达式包括,对第三数据进行第二运算操作;所述第一表达式子树包括,表示第二运算操作的第二节点,所述第二节点具有单个子节点,该单个子节点表示所述第三数据。
9.根据权利要求8所述的方法,其中,所述第三数据通过第二子表达式表示,其中包括第二子运算;所述单个子节点表示所述第二子运算,其具有若干进一步的子节点。
10.根据权利要求1所述的方法,其中,将所述专用AST转化为通用AST,包括:
基于针对所述目标语言的每条语法设定的转换规则,将所述专用AST中的一部分节点转化为构成所述通用AST的节点,并对另一部分节点进行舍弃。
11.根据权利要求1所述的方法,其中,基于所述通用AST,确定图查询的执行计划,包括:
基于所述通用AST生成逻辑执行计划;
将所述逻辑执行计划转化为对应的物理执行计划。
12.一种图数据查询装置,包括:
获取单元,配置为获取对目标语言的图查询语句进行解析得到的专用抽象语法树AST,其中,所述专用AST是依赖于目标语言的语法树;所述图查询语句中包括第一表达式;
转化单元,配置为将所述专用AST转化为通用AST,所述通用AST中包括第一表达式子树,所述第一表达式子树表示所述第一表达式中的计算逻辑,且不依赖于目标语言;
确定单元,配置为基于所述通用AST,确定图查询的执行计划。
13.一种计算机可读存储介质,其上存储有计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-11中任一项所述的方法。
14.一种计算设备,包括存储器和处理器,其中,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311786339.4A CN117708168A (zh) | 2023-12-22 | 2023-12-22 | 图数据查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311786339.4A CN117708168A (zh) | 2023-12-22 | 2023-12-22 | 图数据查询方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117708168A true CN117708168A (zh) | 2024-03-15 |
Family
ID=90147804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311786339.4A Pending CN117708168A (zh) | 2023-12-22 | 2023-12-22 | 图数据查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117708168A (zh) |
-
2023
- 2023-12-22 CN CN202311786339.4A patent/CN117708168A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Shah et al. | Resolving ambiguities in natural language software requirements: a comprehensive survey | |
CN104657439B (zh) | 用于自然语言精准检索的结构化查询语句生成系统及方法 | |
CN100576201C (zh) | 用于从自然语言文本开发本体的方法和电子数据处理系统 | |
CN104657440B (zh) | 结构化查询语句生成系统及方法 | |
CN113032362B (zh) | 数据血缘分析方法、装置、电子设备和存储介质 | |
US7716190B2 (en) | Conversion of structured information | |
WO2005041072A1 (en) | Expression grouping and evaluation | |
EP1746517A2 (en) | XPath automaton systems and methods | |
CN108536728A (zh) | 一种数据查询方法和装置 | |
CN115576984A (zh) | 中文自然语言生成sql语句及跨数据库查询方法 | |
Angelov et al. | PGF: A portable run-time format for type-theoretical grammars | |
CN108766507B (zh) | 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法 | |
JP2016192202A (ja) | 照合処理システム、方法、及びプログラム | |
CN114218472A (zh) | 基于知识图谱的智能搜索系统 | |
CN115202626A (zh) | 一种支持多技术栈组件的低代码前端开发方法 | |
CN113609838A (zh) | 文档信息抽取及图谱化方法和系统 | |
CN102298552A (zh) | 基于代码查询进行源代码插桩的方法 | |
WO2023138078A1 (zh) | 编程语言的解析方法及装置、非易失性存储介质 | |
CN111831624A (zh) | 数据表创建方法、装置、计算机设备及存储介质 | |
CN111475534A (zh) | 一种数据查询方法及相关设备 | |
CN116541286A (zh) | 一种基于插桩和符号执行的高覆盖率测试数据生成方法 | |
CN117708168A (zh) | 图数据查询方法及装置 | |
Benslimane et al. | Extracting personalised ontology from data-intensive web application: an HTML forms-based reverse engineering approach | |
CN115292347A (zh) | 一种基于规则的主动式sql算法性能检查装置及方法 | |
Nguyen et al. | Systematic knowledge acquisition for question analysis |
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 |