数据查询方法、装置、设备及存储介质与流程

文档序号:29166202发布日期:2022-03-09 02:40阅读:102来源:国知局
数据查询方法、装置、设备及存储介质与流程

1.本技术涉及数据处理技术领域,尤其涉及一种数据查询方法、装置、设备及存储介质。


背景技术:

2.在大数据时代,在数据库中采用支持嵌套结构的列式存储格式已经日益普遍。如,parquet就是一种较为常用的支持嵌套结构的列式存储格式。
3.在数据库采用parquet等支持嵌套结构的列式存储格式的情况下,数据库支持采用结构化查询语言(structured query language,sql)的查询语句。然而,在用户不了解或者不熟悉sql语言的情况下,则很难实现对采用支持嵌套结构的列式存储格式的数据库的数据查询,因此,如何提高该种数据库的数据查询便捷性是本领域技术人员需要解决的技术问题。


技术实现要素:

4.有鉴于此,本技术提供了一种数据查询方法、装置、设备及存储介质,在数据库采用支持嵌套结构的列式存储格式的情况下,提升查询数据库中数据的便捷性。
5.为实现上述目的,本技术提供了一种数据查询方法,包括:
6.确定用于查询目标数据库的查询条件信息,所述查询条件信息指示有待查询的目标表、查询条件以及所需输出的输出字段,所述查询条件包括待匹配的查询字段所需满足的条件,所述目标数据库采用支持嵌套结构的列式存储格式存储数据;
7.确定所述查询字段和所述输出字段中属于数组类型的目标字段;
8.以所述目标字段为子表且以所述目标表为主表,生成用于将所述子表与所述主表左连接的连接关系;
9.将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述查询条件和输出字段,并按照sql语法构建sql查询语句;
10.基于所述sql查询语句查询所述目标数据库,以从所述目标数据库中的所述目标表中查询出与所述sql查询语句匹配的数据。
11.在一种可能的实现方式中,所述查询条件信息中包括所述所需输出的输出字段的名称,所述查询条件指示有待查询的查询字段的名称以及所述查询字段所需满足的条件;
12.所述以所述目标字段为子表且以所述目标表为主表,生成用于将所述子表与所述主表连接的连接关系,包括:
13.确定用于替换所述目标字段的名称的第一替换名称;
14.以所述目标字段的第一替换名称为子表的名称,且以所述目标表为主表,生成用于将所述第一替换名称的子表与所述主表左连接的连接关系;
15.所述将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述查询条件和输出字段,并按照sql语法构建sql查询语句,包括:
16.将所述查询条件和所述输出字段中所述目标字段的名称替换为所述第一替换名称,得到替换后的查询条件和替换后的输出字段;
17.将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述替换后的查询条件和替换后的输出字段,并按照sql语法构建sql查询语句。
18.在又一种可能的实现方式中,所述查询条件信息中包括待查询的目标表的表名;
19.在所述生成用于将所述第一替换名称的子表与所述主表左连接的连接关系之前,还包括:
20.确定用于替换所述目标表的表名的第二替代名称,所述第二替代名称包含的字符数量少于所述目标表的表名包含的字符数量;
21.所述以所述目标字段的第一替换名称为子表的名称,且以所述目标表为主表,生成用于将所述第一替换名称的子表与所述主表连接的连接关系,包括:
22.以所述目标字段的第一替换名称为子表的名称,且以所述目标表的第二替代名称为主表的名称,生成用于将所述第一替换名称的子表与所述第二替代表名的主表左连接的连接关系。
23.在又一种可能的实现方式中,所述确定所述查询字段和所述输出字段中属于数组类型的目标字段,包括:
24.确定所述查询字段和所述输出字段中属于数组类型的至少一个目标字段以及所述至少一个目标字段之间存在的层级关系;
25.在所述生成用于将所述子表与所述主表连接的连接关系之前,还包括:
26.基于所述至少一个目标字段之间存在的层级关系,确定所述至少一个目标字段的连接顺序,其中,目标字段的层级越靠前,所述目标字段的连接顺序越靠前;
27.所述以所述目标字段为子表且以所述目标表为主表,生成用于将所述子表与所述主表左连接的连接关系,包括:
28.以所述目标表为主表,按照所述连接顺序,生成用于依次将各目标字段作为子表与所述主表左连接的连接关系。
29.在又一种可能的实现方式中,所述查询条件信息中指示有至少一个查询条件组以及所述查询条件组之间的逻辑关系,所述查询条件组中包括至少一个查询条件以及所述至少一个查询条件之间的逻辑关系;
30.所述将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述查询条件和输出字段,并按照sql语法构建sql查询语句,包括:
31.将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合查询条件组之间的逻辑关系,所述查询条件组中至少一个查询条件和至少一个查询条件之间的逻辑关系,以及所述输出字段,并按照sql语法构建sql查询语句。
32.在又一种可能的实现方式中,所述确定用于查询目标数据库的查询条件信息,包括:
33.展现条件配置界面;
34.基于用户在所述条件配置界面中的配置操作,获得用户针对目标数据库配置的待查询条件信息。
35.在又一种可能的实现方式中,在所述确定用于查询目标数据库的查询条件信息之
前,还包括:
36.确定待转换的hbase数据库表;
37.按照数据结构描述语言protobuf的数据结构描述规范,将所述hbase数据库表转换为符合所述数据结构描述语言protobuf对应数据结构的数据集;
38.按照所述数据结构描述语言protobuf的数据结构与支持嵌套结构的列式存储格式的数据结构之间的映射规范,将所述数据集转换为采用支持嵌套结构的列式存储格式的数据库表。
39.又一方面,本技术还提供了一种数据查询装置,包括:
40.信息确定单元,用于确定用于查询目标数据库的查询条件信息,所述查询条件信息指示有待查询的目标表、查询条件以及所需输出的输出字段,所述查询条件包括待匹配的查询字段所需满足的条件,所述目标数据库采用支持嵌套结构的列式存储格式存储数据;
41.字段确定单元,用于确定所述查询字段和所述输出字段中属于数组类型的目标字段;
42.关系生成单元,用于以所述目标字段为子表且以所述目标表为主表,生成用于将所述子表与所述主表左连接的连接关系;
43.语句构建单元,用于将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述查询条件和输出字段,并按照sql语法构建sql查询语句;
44.数据查询单元,用于基于所述sql查询语句查询所述目标数据库,以从所述目标数据库中的所述目标表中查询出与所述sql查询语句匹配的数据。
45.又一方面,本技术还提供了一种计算机设备,包括存储器和处理器;
46.其中,所述存储器用于存储程序;
47.所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如上任意一项所述的数据查询方法。
48.又一方面,本技术还提供了一种计算机可读存储介质,用于存储程序,所述程序被执行时,用于实现如上任意一项所述数据查询方法。
49.由以上可知,在本技术中,考虑到支持嵌套结构的列式存储结构支持数组类型,而数据库却无法处理包含数组类型的字段的sql查询语句,在确定出查询条件信息中的查询字段和输出字段中属于数组类型的目标字段后,会将目标字段作为子表且将查询条件信息中待查询的目标表作为主表,生成用于将子表与主表左连接的连接关系。在此基础上,本技术会将该连接关系所表征的连接表作为sql查询语句中待查询的表,结合查询条件信息中的查询条件和输出字段,按照sql语法构建出相应的sql查询语句,从而使得该数据库可以基于该sql查询语句先执行将数组类型的目标字段作为子表与目标表左连接的操作,再对连接后的连接表进行相应的sql查询,解决了该种采用支持嵌套结构的列式存储结构的数据库无法处理包含数组类型字段的sql查询的问题,也实现了无需用户输入sql语句便可以实现对该种数据库中数据的查询操作,提高了对该类数据库中数据查询的便捷性。
附图说明
50.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使
用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
51.图1示出了本技术实施例提供的数据查询方法的一种流程示意图;
52.图2示出了本技术实施例提供的数据查询方法的又一种流程示意图;
53.图3示出了本技术实施例中将hbase表转换为采用支持嵌套结构的存储格式的数据的一种流程示意图;
54.图4示出了本技术实施例提供的数据查询装置的一种组成结构示意图。
具体实施方式
55.本技术的方案适用于对采用支持数据结构的列式存储格式的数据库的数据查询,如,对采用parquet的数据库中的数据查询。
56.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
57.如图1所示,其示出了本技术提供的数据查询方法一个实施例的流程示意图,本实施例的方法可以应用于任意计算机设备,本实施例的方法可以包括:
58.s101,确定用于查询目标数据库的查询条件信息。
59.该目标数据库采用支持嵌套结构的列式存储格式存储数据,如,目标数据库可以为采用parquet的数据库,并不做具体限制。
60.其中,查询条件信息指示有待查询的目标表、查询条件以及所需输出的输出字段。
61.目标表为该目标数据库中需要查询的数据库表,为了便于区分,将待查询的数据库表称为目标表。
62.查询条件包括待匹配的查询字段所需满足的条件。例如,查询条件可以为字段a的值大于设定值等,则字段a为查询字段。
63.可以理解的是,在实际应用中,查询条件信息中可以包括一个或者多个查询条件。在查询条件信息中包括多个查询条件的情况下,查询条件信息中还可以指示该多个查询条件之间的逻辑关系。查询条件之间的逻辑关系可以为“与”或者“或”等逻辑关系,对此不加限制。
64.查询条件信息中的输出字段是指需要从目标表中查询出的结果所属的字段。例如,查询出“语文成绩”这一字段的值大于90分的所有“学生姓名”,那么输出字段就是“学生姓名”。
65.本技术中,查询条件信息可以由用户根据需要配置,相比采用结构化查询语言(structured query language,sql)来编写查询语句,直接由用户配置相应的查询条件信息的复杂度会较低。
66.如,在一种可能的实现方式中,本技术可以展现条件配置界面,用户可以在该条件配置界面配置针对目标数据库的查询条件信息。相应的,可以获得用户在该条件配置界面中配置的该查询条件信息。后续会以该种情况为例详细说明,在此不再赘述。
67.s102,确定查询字段和输出字段中属于数组类型的目标字段。
68.其中,数组类型(array)的字段是指该字段的值可以有多个。而非数组类型字段的值则只能是一个或者是没有。
69.例如,以电影为例,电影的别名可以有多个,那么对于电影的别名这一字段而言,就可能会有电影对应的多个别名名称,因此,别名就是一个数组类型的字段。而对于电影的时长而言,每个电影的时长是固定,那么电影的时长这一字段只能是非数组类型的字段。
70.为了便于区分,将查询字段和输出字段中属于数组类型的字段称为目标字段。
71.其中,字段是否属于数组类型的字段可以通过获得该字段的字段属性来确定。字段的字段属性可以记录有该字段相关特征信息,在本技术中,字段的字段属性中至少记录有该字段是否属于数组类型的字段的信息。
72.如,可以从目标数据库中查询出查询字段的字段属性以及输出字段的字段属性,如果查询字段和输出字段中某个字段的字段属性表征该字段为数组类型的字段,则将该字段确定为目标字段。
73.s103,以目标字段为子表且目标表为主表,生成用于将子表与主表左连接的连接关系。
74.其中,子表与主表左连接(left join)中,主表为左表,而子表为右表,而左连接的结果是返回,左表中的所有记录和右表中连接字段相等的记录。连接字段是设定的连接条件中的字段,一般为记录标识。在本技术中,由于子表本质上是主表的一个字段,因此,可以不设置连接条件,而连接字段就是目标表中的记录标识。
75.可以理解的是,连接join操作的对象只能是表。而且,由于目标字段为数组类型的字段,该目标字段下可以多个值,因此,目标字段可以看成是一个表。在此基础上,本技术将目标字段作为连接操作中的子表,将目标表作为join操作中的主表,便可以构建用于建立子表与主表左连接的连接关系。
76.其中,连接关系可以为用于表征子表与主表之间建立左连接的语句或者函数。
77.可以理解的是,parquet等支持嵌套结构的列式存储格式支持数组类型,但是数据库却无法直接处理包含数组形式字段的sql查询语句的查询处理,因此,本技术将目标字段作为子表与目标表进行左连接,可以使得左连接后的表中包含目标表的全部内容,又实现了将目标字段中值到拆分到多条记录,使得目标字段下的多个值处于左连接后的表中的不同条记录中,从而实现将目标字段与目标表连接为一个不包含数组形式的表,以使得数据库可以对连接表进行查询处理。
78.可以理解的是,以上是以目标字段为一个的情况为例说明。在实际应用中,查询字段和输出字段中可能会存在多个属于数组类型的目标字段,在该种情况下,本技术可以在确定出查询字段和输出字段中属于数组类型的至少一个目标字段的同时,确定该至少一个目标字段之间的层级关系。
79.其中,目标字段之间的层级关系可以表征字段之间从属关系,如目标字段b为目标字段a下的二级字段,则目标字段a的层级高于目标字段b,目标字段b为目标字段a所在层级的下一层级。当然,如果两个目标字段之间没有从属关系,那么这两个目标字段可以是处于同一层级的字段。
80.在以上基础上,可以基于至少一个目标字段之间存在的层级关系,确定所述至少
一个目标字段的连接顺序,其中,目标字段的层级越靠前,所述目标字段的连接顺序越靠前。相应的,可以是以该目标表为主表,按照该连接顺序,生成用于依次将各目标字段作为子表与主表左连接的连接关系。该连接关系表征至少一个目标字段与该主表之间的多表左连接。
81.其中,依次将各目标字段作为子表与主表左连接的连接关系最终会将各个目标字段作为子表与该主表左连接为一个表。具体的,针对每个目标字段,该目标字段作为子表需要与连接顺序位于该目标字段之前的其他目标字段作为子表与主表左连接后的连接表进行左连接,从而使得基于该连接关系能够将各个目标字段依次与主表建立左连接,最终形成一个表。
82.s104,将连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合查询条件和输出字段,并按照sql语法构建sql查询语句。
83.可以理解的是,由于子表与主表的连接关系实际上就表征了子表与主表左连接后的连接表,因此,本技术中构建出的sql查询语句实际上是采用sql语言描述了查询条件和输出字段,并指示待查询表为该连接关系对应的连接表。
84.如,可以按照sql语言的语法,先将查询条件转换为符合sql语法的查询条件。然后,按照sql语言的语法结构,将输出字段、待查询的连接表以及符合sql语法的查询条件构建为sql查询语句。
85.如前面所述,查询条件指示信息中可能会包含多个查询条件,在该种情况下,查询条件信息中会包含多个查询条件之间的逻辑关系,基于此,在构建sql查询语句时,需要结合多个查询条件及其逻辑关系,并按照sql语法来构建sql查询语句。
86.在一种可能的实现方式中,查询条件信息中可以指示有至少一个查询条件组以及查询条件组之间的逻辑关系。其中,每个查询条件组中包括至少一个查询条件以及该至少一个查询条件之间的逻辑关系。相应的,可以将该连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合查询条件组之间的逻辑关系,每个查询条件组中至少一个查询条件和至少一个查询条件之间的逻辑关系,以及该输出字段,并按照sql语法构建sql查询语句。
87.s105,基于sql查询语句查询目标数据库,以从目标数据库中的目标表中查询出与sql查询语句匹配的数据。
88.如,将该sql查询语句发送给该目标数据库。在此基础上,目标数据库会基于该sql查询语句中包含的连接关系,将目标字段作为子表与该目标表左连接为一个表(即连接表),然后基于sql查询语句中的查询条件从左连接得到的连接表中查询出符合查询条件的输出字段相关的数据。
89.由以上可知,在本技术中,考虑到支持嵌套结构的列式存储结构支持数组类型,而数据库却无法处理包含数组类型的字段的sql查询语句,在确定出查询条件信息中的查询字段和输出字段中属于数组类型的目标字段后,会将目标字段作为子表且将查询条件信息中待查询的目标表作为主表,生成用于将子表与主表左连接的连接关系。在此基础上,本技术会将所述连接关系所表征的连接表作为sql查询语句中待查询的表,结合查询条件信息中的查询条件和输出字段,按照sql语法构建出相应的sql查询语句,从而使得该数据库可以基于sql查询语句先执行数组类型的目标字段与目标表的左连接操作,在对左连接后的
连接表进行相应的sql查询,解决了该种采用支持嵌套结构的列式存储结构的数据库无法处理数值类型字段的sql查询的问题,也实现了无需用户输入sql语句便可以实现对该种数据库中数据的查询操作,提高了对该类数据库查询的便捷性。
90.可以理解的是,由于数组类型的目标字段本质上还是一个字段,而join操作的对象为表,为了使得数据库能够将该字段作为一个表来进行jion,并与字段的名称区分,本技术,还可以先将目标字段的名称替换为一个其他的名称,以便在后续构建出的sql语句中能够标示出该目标字段的替换名称实际上是代表一个表的名称。
91.具体的,可以确定用于替换目标字段的名称的第一替代名称。为了与目标字段的名称以及后续用于替换目标表的名称进行便于区分,将用于替换目标字段的字段名称的替代名称称为第一替代名称。相应的,以目标字段的第一替换名称为子表的名称,且以目标表为主表,生成用于将第一替换名称的子表与主表左连接的连接关系。
92.在以上基础上,为了使得目标字段在查询条件和输出条件中的名称也与第一替换名称保持一致,以使得数据库可以识别出第一替换名称为目标字段对应的表,本技术还需要将查询条件和输出字段中包含的目标字段的名称替换为第一替换名称,得到替换后的查询条件和替换后的输出字段。
93.相应的,在构建sql语句时,可以结合替换后的查询条件和替换后的输出字段,并按照sql语法构建sql查询语句。
94.进一步的,在实际应用中,考虑到目标表的名称可能较长,为了简化join操作的连接关系,本技术还可以将目标表的名称替换为一个更为简单的名称,通过将目标表的名称替换为一个更为简单的名称,也可以减少后续生成sql查询语句中的字符数量,也就可以简化sql查询语句。
95.为了便于理解,结合一种可能的实现情况进行介绍。
96.如图2所示,其示出了本技术一种其示出了本技术提供的数据查询方法又一个实施例的流程示意图,本实施例的方法可以应用于任意计算机设备,本实施例的方法可以包括:
97.s201,展现条件配置界面。
98.该条件配置界面为用于提供给用户配置针对目标数据库对应的查询条件信息的操作界面。在本技术中,目标数据库采用支持嵌套结构的列式存储格式。如,目标数据库为采用parquet存储格式存储数据的数据库。
99.当然,在实际应用中,如果目标数据库不是默认的数据库,也可以在条件配置界面中配置所需操作的目标数据库的信息。
100.如,在条件配置界面中可以包括条件组配置区,每个条件组配置区可以根据展现有至少一个条件配置区。条件配置区用于配置查询条件。该条件配置区可以用于配置查询条件中字段的配置框,用于配置查询条件中运算符的配置框以及用于配置查询条件中字段取值的配置框。
101.其中,查询条件中的运算符可以包括等于、不等于、大于以及小于等等用于限制字段所需满足条件的运算符,对此不加限制。
102.其中,配置框可以呈现出相应的下拉选择菜单,以供用户从下拉菜单中选择相应信息,如,在用户点击字段的配置框,可以在字段的配置框呈现出字段的下拉菜单,使得用
户可以从字段的下拉菜单中选择构建查询条件所需字段。
103.配置框还可以是信息输入框,如,字段值的配置框可以用于输入查询条件中字段所需满足的条件值等。
104.可以理解的是,通过在条件配置区配置了查询条件中待匹配的字段、运算符和字段值之后,就可以得到一条查询条件。
105.在实际应用中,可以通过在不同条件配置区配置不同的查询条件或者是通过同一条件配置区进行多次配置,从而得到配置出的同一个查询条件组内的一个或者多个查询条件。
106.同时,本技术中通过在不同条件配置区进行查询条件组的配置或者是在同一条件配置区进行多个查询条件组的配置,可以得到一个或者多个查询条件组。
107.进一步的,用户还可以在配置界面中配置不同查询条件之间的逻辑关系,以及,不同条件组之间的逻辑关系等等,对此不加限制。
108.相应的,配置的每个查询条件组可以包括至少一个查询条件以及该至少一个查询条件之间的逻辑关系。同时,不同查询条件组之间也具有配置的逻辑关系。如,逻辑关系可以为“与”,或者,“或”等关系。
109.s202,基于用户在条件配置界面中的配置操作,获得用户针对目标数据库配置的待查询条件信息。
110.其中,查询条件信息指示有待查询的目标表(如,包括目标表的名称等)、至少一个查询条件组、查询条件组之间的逻辑关系以及所需输出的输出字段。
111.其中,查询条件信息指示待查询的目标表可以是,在查询条件信息中包括:待查询的目标表的名称。相应的,查询条件信息中指示待输出的输出字段,可以是在查询条件信息中包括输出字段的名称。
112.其中,每个查询条件组包括至少一个查询条件以及至少一个查询条件之间的逻辑关系。每个查询条件包括待匹配的查询字段的名称及待匹配的查询字段所需满足的条件。
113.其中,查询条件信息中输出字段的数量可以为一个或者多个,对此不加限制。
114.举例说明:以从学生分数表中查询语文成绩低于60分的学生姓名和成绩为例说明:
115.查询条件信息可以包括如下内容:
116.目标表为学生分数表,即studentscore;
117.输出字段为:studentname(学生姓名),score.scorenumber(科目分数)
118.查询条件组包括查询条件1和查询条件2,且查询条件1与查询条件2的逻辑关系为:与;
119.查询条件1:score.coursename(科目名称)等于语文;
120.查询条件2:score.scorenumber小于60。
121.在以上举例中,score(科目成绩)下可以包括多个二级字段,如,scorenumber(科目分数)和coursename(科目名称)都是score(科目成绩)这一字段的下一级字段,因此,在描述二级字段时,可以在二级字段之前用点写出上一级字段的字段名称。
122.需要说明的是,以上步骤s202和s203是以确定用于查询目标数据库的查询条件信息的一种实现方式为例说明,对于其他方式确定查询条件信息也同样适用于本技术,对此
不再赘述。
123.s203,从该目标数据库中查询出各输出字段和各查询条件中查询字段的字段属性。
124.其中,字段的字段属性用于表征字段是否属于数组类型的字段。
125.s204,确定查询字段和输出字段中属于数组类型的至少一个目标字段以及该至少一个目标字段的层级关系。
126.可以理解的是,查询字段和输出字段中可能会存在一个或者多个属于数组类型的字段,从而可以得到至少一个目标字段。
127.其中,数组类型的字段的值可以有多个,其中,数组类型的字段中的值可以为基本类型,也可能是结构体。
128.为了便于理解,举例说明:
129.有学生成绩表,表结构如下:
[0130][0131]
其中,在如上表结构中,repeated表明score这一字段属于是数组类型的字段。
[0132]
以在该表结构中score中的每个值是结构体为例说明。以json格式举例,一条数据库记录可以如下:
[0133]
[0134][0135]
在如上例子中,score是长度为4的数组类型字段,如上面例子中score下面通过中括号“[]”括出的就是score内的4个结构体形式的对象(每个对象为一个值)。每个对象通过中括号“[]”内的大括号括起来。
[0136]
当然,以上是以数组类型的字段中的值为结构体为例说明,但是可以理解的数,数组类型的字段的值为基本类型或者其他类型也类似,在此不再赘述。
[0137]
其中,层级关系可以结合字段之间的关联关系得到。如,步骤s203中的例子说明,scorenumber这一字段为score字段的二级字段,因此,scorenumber位于score的下一层级,而scorenumber和coursename均为score的二级字段,因此,scorenumber和coursename可以均为score的下一层级的字段。
[0138]
s205,分别确定每个目标字段各自的第一替换名称。
[0139]
其中,为了便于区分,将目标字段的替代名称称为第一替换名称,但是不同目标字段的第一替换名称不同,具体可以根据需要设定,对此不加限制。
[0140]
如,可以根据目标字段的数量,确定相应数量个第一替换名称,依次为t1、t2
·······
tn,n为目标字段的总数量。相应的,按照至少一个目标字段的层级关系,确定目标字段的先后顺序,然后按照该先后顺序,依次将这n个第一替代名称分配给至少一个目标字段。例如,第一个目标字段的第一替换名称为t1,而第二个目标字段的第一替换名称为t2,依此类推。
[0141]
s206,确定用于替换目标表的表名的第二替代名称。
[0142]
其中,该第二替代名称包含的字符数量少于该目标表的表名包含的字符数量。
[0143]
例如,以前面s202中查询条件信息的例子说明,目标表studentscore,假设第二替代名称为t,则后续需要将“studentscore“替换为“t“。
[0144]
s207,基于该至少一个目标字段之间存在的层级关系,确定该至少一个目标字段的连接顺序。
[0145]
其中,目标字段的层级越靠前,目标字段的连接顺序越靠前。
[0146]
如,以前面s202中查询条件信息的例子说明,scorenumber和coursename可以位于同一层级,而score位于scorenumber和coursename的上一层级,那么可以score的连接顺序最靠前,而scorenumber和coursename可以随机确定这两字段的连接顺序的先后关系。
[0147]
s208,以目标字段的第一替换名称为子表的名称,且以目标表的第二替代名称为主表的名称,按照该连接顺序,生成用于依次将各目标字段作为子表与该主表左连接的连接关系。
[0148]
在本技术中,按照该连接顺序,从至少一个目标字段中选取待处理的目标字段,每选取出一个目标字段就与主表进行一次左连接的关系构建,直至构建出将所有目标字段的子表都左连接到主表中的连接关系。
[0149]
如,假设目标字段包括字段a和字段b,且连接顺序为字段a、字段b,而且字段a的第一替换名称为t1,字段b的第一替换名称为t2,那么则需要先建立t1与主表t(目标表对应的第二替换名称t表征的主表)的左连接,然后再构建将t2与经过t1与主表t进行左连接之后的连接表建立左连接的连接关系。
[0150]
可以理解的是,本实施例是以目标字段可能存在多个的情况为例说明。如果目标字段仅有一个的话,那么则以该目标字段的第一替换名称为子表的名称,且以目标表的第二替代名称为主表的名称,直接生成用于将第一替换名称的子表与该第二替代表名的主表左连接的连接关系。
[0151]
s209,针对每个目标字段,将各查询条件和各输出字段中包含的该目标字段的名称替换为目标字段对应的第一替换名称,得到替换后的查询条件和替换后的输出字段。
[0152]
其中,针对每个目标字段,如果查询条件组中的查询条件中包含该目标字段的名称,则需要将该目标字段的名称替换为该目标字段对应的第一替换名称。
[0153]
可以理解的是,如果查询条件或者输出字段中不存在目标字段,那么查询条件和输出字段实际上没有经过字段名称的替换,因此,替换后的查询条件或替换后的输出字段与替换前相同。
[0154]
可以理解的是,如果查询条件信息中的字段中采用目标表的名称加字段的字段名称的形式表示字段,那么还需要按照目标表对应的第二替代名称,将查询条件信息中包含的目标表对应的名称替换为第二替代名称。
[0155]
例如输出字段:studentname,本质上是目标表studentscore下的字段studentname,因此,这一字段实际上也表示为studentscore.studentname,将目标表的名称studentscore替换为t,则这一字段中的目标表的名称被替换为t后,该字段可以表示为:t.studentname。
[0156]
s210,将该连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合查询条件组之间的逻辑关系,每个查询条件组中至少一个替换后的查询条件和该至少一个替换后的查询条件之间的逻辑关系,以及替换后的输出字段,并按照sql语法构建sql查询语句。
[0157]
其中,查询条件中目标字段被替换前后,查询条件之间的逻辑关系不会发生变化。
[0158]
可以理解的是,基于各替换后的查询条件及不同查询条件之间的逻辑关系,可以采用sql语法构建出表征各个查询条件及其逻辑关系的语句,在此基础上,基于待查询的表
为连接关系表征的表,及替换后的输出字段等,便可以最终基于sql语法构建出sql查询语句。
[0159]
其中,sql语法表征逻辑关系的sql符号是固定的,如,在sql语法中,逻辑关系为“与”,则可以表示为“and”,而逻辑关系“或”可以表示为“or”,其他逻辑关系也有类似的对应关系,在此不再赘述。
[0160]
为了便于理解本实施例中,构建sql查询语句的过程。下面举例说明,以前面s202中查询条件信息的例子说明:
[0161]
假设score这一字段作为表的替代名称为t1。
[0162]
在此基础上,输出字段score.scorenumber可以替换为t1.scorenumber;
[0163]
查询条件1中的score.coursename替换为t1.coursename,相应的,替换后的查询条件1为:t1.scorenumber='语文';
[0164]
而查询条件2中的score.scorenumber替换为t1.scorenumber,相应的,替换后的查询条件2为t1.scorenumber《60。
[0165]
由前面可知,查询条件1与查询条件2之间的逻辑关系为“与”。那么基于这两个查询条件对应的替换后的查询条件及其逻辑关系,可以转换得到sql语句:
[0166]
(t1.scorenumber='语文')and(t1.scorenumber《60);
[0167]
在此基础上,假设输出字段:studentname为studentscoret.studentname,那么该输出字段中目标表的名称替换为t之后得到输出字段:t.scorename。相应的,依据输出字段:t.scorename,替换后的输出字段t1.scorenumber;以及构建出的连接关系可以生成整体的sql查询语句为:
[0168]
select t.studentname,t1.scorenumber from studentscore,t.score t1 where((t1.scorenumber='语文')and(t1.scorenumber《60));
[0169]
在以上sql语句中“studentscore,t.score t1“为前面构建出的连接关系,该连接关系对应一个数据库的连接操作,连接操作的结果就是各个目标字段作为子表与目标表作为主表t的左连接所得到的连接表。
[0170]
s211,基于sql查询语句查询目标数据库,以从目标数据库中的目标表中查询出与sql查询语句匹配的数据。
[0171]
该步骤s211可以参见前面实施例的相关介绍,在此不再赘述,
[0172]
可以理解的是,由于parquet等支持嵌套结构的列式存储格式,可以减少不必要的数据扫描,有利于提高数据查询性能。因此,对于一些不具备高效的数据查询性能的数据库而言,如,hbase数据库,本技术还可以将这类数据库中的数据转换为采用parquet等支持嵌套结构的列式存储格式。
[0173]
其中,hbase是一种构建在hdfs(hadoop distributed file system,hadoop分布式文件系统)之上的分布式、面向列的存储系统。hbase以表的形式存储数据。表由行和列组成。列划分为若干个列族(row family)。
[0174]
如图3所示,其示出了本技术将hbase表转换为采用支持嵌套结构的存储格式的数据的一种流程示意图,本实施例可以包括:
[0175]
s301,确定待转换的hbase数据库表。
[0176]
其中,该hbase数据库表包括:至少一个行键以及至少一个列簇,其中,每个列簇包
括至少一个列。
[0177]
可以理解的是,在hbase中有些字段(或者说列)中各值为多个数值构成的数组。为了能够识别出hbase中属于数组类型的字段(也就是列),对于hbase中属于数组类型的字段,可以向字段前添加数据结构描述语言protobuf的数据结构描述规范中定义表征数组类型的前缀。
[0178]
如下面表格1所示,为hbase表的一个示例:
[0179]
表1
[0180][0181]
在表1中,“c1”、“c2_n_a”、“c2_n_b”均为列名。
[0182]
其中,“c2_n_a”、“c2_n_b”拥有相同的前缀c2_n,c2_n表示字段为数组字段,这两个字段中后缀“a”和“b”来自数组下的“主键”字段值。
[0183]
s302,按照数据结构描述语言protobuf的数据结构描述规范,将hbase数据库表转换为符合数据结构描述语言protobuf对应数据结构的数据集。
[0184]
其中,protobuf(google protocol buffers)是google提供一个具有高效的协议数据交换格式工具库。
[0185]
可以理解的是,protobuf的数据结构描述规范中对于字段是具有特定的描述方式的,因此,对于hbase表中的字段,可以根据该protobuf的数据结构描述规范,采用protobuf来描述这些字段。
[0186]
具体的,protobuf的数据结构描述规范中可以包括非数组类型的列以及数组类型的列的描述形式,因此可以采用protobuf语言来描述hbase表中非数组类型的列以及数组形式的列。
[0187]
例如,列簇d的c1列为非数组列,采用protobuf描述为optional message d_c1;
[0188]
列簇d的c2_n_a以及c2_n_b列为数组列,用protobuf描述为repeated message d_c2。
[0189]
而由于hbase中主键不属于字段,而protobuf不存在描述主键的描述方式,因此,本技术可以构建出hbase中主键与protobuf描述方式的映射关系。例如,rowkey作为主键id,采用protobuf描述为optionallong id。
[0190]
s303,按照数据结构描述语言protobuf的数据结构与支持嵌套结构的存储格式的数据结构之间的映射规范,将采用数据结构描述语言protobuf描述的数据集转换为采用支持嵌套结构的列式存储格式的数据库表。
[0191]
可以理解的是,基于protobuf与支持嵌套结构的存储格式的数据结构之间的映射规范,可以确定将protobuf数据转换为支持嵌套结构的列式存储格式的数据结构的转换方式,从而可以完成相应的数据转换。
[0192]
如,以支持嵌套结构的存储格式为parquet为例说明,具体转换算法可以如下:
[0193]
获得protobuf描述的数据集中的字段及字段值;
[0194]
其中,对于属于基本类型(如,数字或者字符串类型等)或者枚举类型的字段,则可以直接将字段的值映射为parquet格式的字段上。
[0195]
对于结构体类型的字段,则需要不断递归字段下各个字段,最终逐层处理包含的基本类型或者每句类型的字段的映射转换。
[0196]
可以理解的是,受限于hbase本身存储引擎的设计,其无法提供高效的统计分析,查询性能较低。而通过本技术方案将hbase数据库表转换为采用parquet等支持嵌套结构的列式存储格式的数据库表,从而可以借助支持嵌套结构的列式存储格式具有的高效的存储结构、良好的扫描性能,实现数据查询。
[0197]
在hbase数据库表转换为parquet等存储格式的数据库表之后,还可以结合本技术前面实施例的方案进行数据查询等相关处理,在此不再赘述。
[0198]
对应本技术的一种数据查询方法,本技术还提供了一种数据查询装置。
[0199]
如图4所示,其示出了本技术实施例提供的一种数据查询装置的一种组成结构示意图,本实施例的装置可以包括:
[0200]
信息确定单元401,用于确定用于查询目标数据库的查询条件信息,所述查询条件信息指示有待查询的目标表、查询条件以及所需输出的输出字段,所述查询条件包括待匹配的查询字段所需满足的条件,所述目标数据库采用支持嵌套结构的列式存储格式存储数据;
[0201]
字段确定单元402,用于确定所述查询字段和所述输出字段中属于数组类型的目标字段;
[0202]
关系生成单元403,用于以所述目标字段为子表且以所述目标表为主表,生成用于将所述子表与所述主表左连接的连接关系;
[0203]
语句构建单元404,用于将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述查询条件和输出字段,并按照sql语法构建sql查询语句;
[0204]
数据查询单元405,用于基于所述sql查询语句查询所述目标数据库,以从所述目标数据库中的所述目标表中查询出与所述sql查询语句匹配的数据。
[0205]
在一种可能的实现方式中,信息确定单元确定出查询条件信息中包括所需输出的输出字段的名称,该查询条件指示有待查询的查询字段的名称以及所述查询字段所需满足的条件;
[0206]
关联生成单元,包括:
[0207]
第一替换单元,用于确定用于替换所述目标字段的名称的第一替换名称;
[0208]
关联生成子单元,用于以所述目标字段的第一替换名称为子表的名称,且以所述目标表为主表,生成用于将所述第一替换名称的子表与所述主表左连接的连接关系;
[0209]
语句构建单元,包括:
[0210]
字段替换子单元,用于将所述查询条件和所述输出字段中所述目标字段的名称替换为所述第一替换名称,得到替换后的查询条件和替换后的输出字段;
[0211]
语句构建子单元,用于将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合所述替换后的查询条件和替换后的输出字段,并按照sql语法构建sql查询语句。
[0212]
在又一种可能的实现方式中,信息确定单元确定出的查询条件信息中包括待查询的目标表的表名;
[0213]
该装置还包括:
[0214]
第二替换单元,用于在关联生成子单元生成用于将所述第一替换名称的子表与所述主表左连接的连接关系之前,确定用于替换所述目标表的表名的第二替代名称,所述第二替代名称包含的字符数量少于所述目标表的表名包含的字符数量;
[0215]
该关联生成子单元,用于以所述目标字段的第一替换名称为子表的名称,且以所述目标表的第二替代名称为主表的名称,生成用于将所述第一替换名称的子表与所述第二替代表名的主表左连接的连接关系。
[0216]
在又一种可能的实现方式中,该字段确定单元具体为,用于确定所述查询字段和所述输出字段中属于数组类型的至少一个目标字段以及所述至少一个目标字段之间存在的层级关系;
[0217]
该装置还包括:
[0218]
连接顺序确定单元,用于在关联生成单元生成用于将所述子表与所述主表连接的连接关系之前,基于所述至少一个目标字段之间存在的层级关系,确定所述至少一个目标字段的连接顺序,其中,目标字段的层级越靠前,所述目标字段的连接顺序越靠前;
[0219]
该关联生成单元具体为,用于以所述目标表为主表,按照所述连接顺序,生成用于依次将各目标字段作为子表与所述主表左连接的连接关系。
[0220]
在一种可能的实现方式中,信息确定单元确定出的查询条件信息中指示有至少一个查询条件组以及所述查询条件组之间的逻辑关系,所述查询条件组中包括至少一个查询条件以及所述至少一个查询条件之间的逻辑关系;
[0221]
所述语句构建单元,具体为,用于将所述连接关系所表征的连接表作为结构化查询语言sql查询语句中待查询的表,结合查询条件组之间的逻辑关系,所述查询条件组中至少一个查询条件和至少一个查询条件之间的逻辑关系,以及所述输出字段,并按照sql语法构建sql查询语句。
[0222]
在又一种可能的实现方式中,信息确定单元包括:
[0223]
界面展现单元,用于展现条件配置界面;
[0224]
信息获得单元,用于基于用户在所述条件配置界面中的配置操作,获得用户针对目标数据库配置的待查询条件信息。
[0225]
在又一种可能的实现方式中,该装置还包括:
[0226]
数据库表确定单元,用于在信息确定单元确定用于查询目标数据库的查询条件信息之前,确定待转换的hbase数据库表;
[0227]
数据结构转换单元,用于按照数据结构描述语言protobuf的数据结构描述规范,将所述hbase数据库表转换为符合所述数据结构描述语言protobuf对应数据结构的数据集;
[0228]
存储结构转换单元,用于按照所述数据结构描述语言protobuf的数据结构与支持嵌套结构的列式存储格式的数据结构之间的映射规范,将所述数据集转换为采用支持嵌套结构的列式存储格式的数据库表。
[0229]
又一方面,本技术还提供了一种计算机设备,包括存储器和处理器;
[0230]
其中,所述存储器用于存储程序;
[0231]
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如上任意一个实施例所述的数据查询方法。
[0232]
又一方面,本技术还提供了一种计算机可读存储介质,用于存储程序,所述程序被执行时,用于实现如上任意一个实施例所述的数据查询方法。
[0233]
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。同时,本说明书中各实施例中记载的特征可以相互替换或者组合,使本领域专业技术人员能够实现或使用本技术。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0234]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0235]
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
[0236]
以上仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1