CN110569243B - 一种数据查询方法、数据查询插件和数据查询服务器 - Google Patents
一种数据查询方法、数据查询插件和数据查询服务器 Download PDFInfo
- Publication number
- CN110569243B CN110569243B CN201910778874.2A CN201910778874A CN110569243B CN 110569243 B CN110569243 B CN 110569243B CN 201910778874 A CN201910778874 A CN 201910778874A CN 110569243 B CN110569243 B CN 110569243B
- Authority
- CN
- China
- Prior art keywords
- target
- query
- table structure
- field
- source
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据查询方法,所述方法应用于数据查询插件中,所述方法包括:接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。本申请提供的技术方案,可以简化数据查询时使用的查询语句,提高数据库的查询效率。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种数据查询方法、数据查询插件和数据查询服务器。
背景技术
随着互联网的快速发展,数据量急剧增加,传统的关系型数据库已经不适用于大数据的处理,针对大数据的处理工作,人们提出了NoSQL(Not Only SQL)型数据库的概念,并开发了多种大数据储存工具,例如HBase,MongoDB,HDFS,ElastiSearch等。NoSQL型数据库的查询语句与传统的关系型数据库的SQL(Structured Query Language,结构化查询语言)查询语句并不相同,为方便人们使用SQL查询语句对NoSQL型数据库进行查询操作,部分存储工具提供了源生的SQL查询方式,例如MongoDB等,对于没有提供源生SQL查询方式的存储工具,则需要使用apace drill等框架实现SQL查询功能,但是基于当前apace drill等框架实现的SQL查询功能,其SQL查询语句结构冗长,可阅读性差,不利于用户编写。
鉴于此,有必要提供一种新的数据查询方法、数据查询插件和数据查询服务器以解决上述不足。
发明内容
本申请的目的在于提供一种数据查询方法、数据查询插件和数据查询服务器,可以简化数据查询时使用的查询语句。
为实现上述目的,本申请一方面提供一种数据查询方法,所述方法应用于数据查询插件中,所述数据查询插件储存有根据第一数据库的源表结构映射得到的第二数据库的目标表结构,所述方法包括:接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。
为实现上述目的,本申请另一方面还提供一种数据查询插件,所述数据查询插件包括:表结构定义模块,用于将第一数据库的源表结构映射为第二数据库的目标表结构;查询请求解析模块,用于接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;查询请求转换模块,用于判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。
由此可见,本申请提供的技术方案,数据查询插件可以首先将NoSQL型数据库的表结构映射为关系型数据库的表结构,基于生成的关系型数据库的表结构,用户便可以使用关系型数据库的语法结构编写SQL查询语句,而不用再关心NoSQL型数据库的具体表结构。数据查询插件在执行查询操作时,可以将用户输入的关系型数据库查询请求转换为支持NoSQL型数据库的查询请求,数据查询过程中仍然使用NoSQL型数据库的查询机制,可以进一步减少对NoSQL型数据库的改动,本申请提供的技术方案可以简化数据查询时使用的查询语句,改善用户使用NoSQL型数据库时的操作体验,提高数据库的查询效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施方式一中数据查询方法的流程图;
图2是本申请实施方式二中数据查询方法的流程图;
图3是本发明实施方式中数据查询插件的功能模块示意图;
图4是本发明实施方式中数据查询服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
随着互联网的快速发展,各种应用层出不穷,产生的数据量也急剧增加,相应的对数据处理技术也提出了更多的要求,例如更低延迟的读写速度、处理海量的数据和流量、大规模集群的管理、更低的运营成本。传统的关系型数据库已经不能满足上述要求,因此人们提出了NoSQL型数据库的概念,并开发了多种大数据储存工具,例如HBase,MongoDB,HDFS,ElastiSearch等,但是NoSQL型数据库并不直接提供对SQL查询语句的支持,使得用户在使用时需要付出一定的学习和应用迁移成本,用户体验不够友好。为方便用户使用SQL查询语句实现对NoSQL型数据库的查询操作,部分存储工具提供了源生的SQL查询方式,例如MongoDB等,对于没有提供源生SQL查询方式的存储工具,则需要使用apacedrill等框架实现SQL查询功能,但是基于当前Apace drill等框架实现的SQL查询功能,存在很多不足。
以HBase为例,HBase的表结构主要由rowkey(行键)、column family(列族)、column qualifier(列字段)、timestamp(时间戳)组成,其中一个rowkey存在多个columnfamily,一个column family存在多个column,每个column存在相应的column qualifier。Apace drill提供的数据查询插件,其SQL语句规则复杂,例如,对于rowkey的查询,需要用借助其他函数,并且rowkey组成部分长度必须一致;对于column qualifier的查询,SQL语句中需要携带table(表名)、column family,再加上需查询的column qualifier,显然,当查询语句需要指定多个字段时,该SQL查询语句结构冗长,可阅读性差,不利于用户编写。所以如何改善用户使用NoSQL型数据库时的操作体验,简化数据查询时使用的SQL查询语句是本领域中很重要的课题。
本申请提供的技术方案可以解决上述不足。
为便于理解本申请中涉及到的NoSQL型数据库查询操作的内容,下面以HBase为例,对其查询机制进行简要介绍。
HBase自身的查询实现有两种方式:
Get操作,按指定rowkey获取唯一一条记录,可以基于确切的rowkey去获取一行数据。例如,查询表t1,rowkey001中的f1下的col1的值,可以使用hbase(main)>get't1','rowkey001',{COLUMN=>'f1:col1'}。
Scan操作,按指定的条件获取一批记录,可以指定一个rowkey的范围区间,获取该区间的所有记录。例如,扫描表t1的前5条数据,可以使用hbase(main)>scan't1',{LIMIT=>5}。
Scan操作在执行时,需要经历如下几个关键步骤:构建Scan、获取ResultScanner、遍历查询结果、关闭ResultScanner。其中,在构建Scan时可以通过setFilter方法添加Filter,Filter可以在Scan的结果集基础之上,对返回的记录设置更多条件值,这些条件可以与rowkey有关,可以与column qualifier有关,也可以与列值有关,还可以将多个Filter组合使用,Filter是实现分页、多条件查询的基础。HBase自带多种Filter,例如RowFilter、FamilyFilter、QualifierFilter、SingleColumnValueFilter、PageFilter等,根据需要还可以自定义Filter,但在通过setFilter方法添加Filter时,需要考虑查询字段的字段名称和数据类型,以选择合适的Filter。
本申请提供的数据查询方法应用于数据查询插件中,所述数据查询插件储存有根据第一数据库的源表结构映射得到的第二数据库的目标表结构。
在本实施方式中,可以按照第二数据库表结构的定义规则,将第一数据库的表结构映射为第二数据库的表结构,其中,第一数据库可以为NoSQL型数据库,第二数据库可以为关系型数据库,本申请将NoSQL型数据库具有的表结构称为源表结构,将关系型数据库具有的表结构称为目标表结构。当目标表结构生成后,可以将其储存在数据查询插件中。
在一个实施方式中,可以按照第二数据库表结构的定义规则,将源表结构中的字段转换为目标表结构中的字段。为便于理解,下文以Hbase为例进行说明。
Hbase具有如表1所示的表结构:
表1(Hbase表结构)
假设存在一个Hbase表,其table为drill_test,rowkey1为product_cluster_time_area;column family1为a,对应的column1的column qualifier为t1,column2的column qualifier为p1;column family2为b,对应的column1的column qualifier为t2,column2的column qualifier为p2;column family3为c,对应的column1的columnqualifier为t3,column2的column qualifier为p3;column family4为d,对应的column1的column qualifier为t4,column2的column qualifier为p4。该Hbase的表结构(即源表结构)可以表示为表2的形式:
表2(表名为drill_test的源表结构)
需要特别指出的是,对于在创建数据库表时已指定好的列,本申请将其称为静态列,对应的column qualifier称为静态列字段,上述t1、p1、t2、p2、t3、p3、t4、p4皆为静态列字段。
在一个实施方式中,将第一数据库的源表结构映射为第二数据库的目标表结构可以首先提取上述源表结构中的静态列字段,并将上述源表结构中的行键分割为源字段,然后根据第二数据库的表结构定义规则,定义上述静态列字段和上述源字段的数据类型,并生成目标表结构,上述目标表结构中的字段由上述静态列字段和上述源字段组成。
数据查询插件可以将rowkey按照其字段组成进行拆分,例如,可以将表2中的rowkey1(product_cluster_time_area)分割为如下四个源字段:product、cluster、time、area,并提取源表结构中的t1、p1、t2、p2、t3、p3、t4、p4等静态列字段,并按照第二数据库(即关系型数据库)表结构的定义规则,将上述获取到的静态列字段和源字段一并作为关系型数据库表结构中的组成字段,将源表结构映射为目标表结构(即生成目标表结构)。显然针对上文表2形式的源表结构,可以得到如表3形式的目标表结构:
表3(目标表结构)
product | cluster | time | area | t1 | p1 | t2 | p2 | t3 | p3 | t4 | p4 |
数据 | 数据 | 数据 | 数据 | 1 | 0 | 14 | 23 | 12 | 21 | 13 | 42 |
需要特别指出的是,在创建目标表结构时,对于源字段,可以按照各个源字段在rowkey中原本的前后顺序进行排列;对于静态列字段,可以按照各个静态列字段的数据类型进行排列,本申请对此不作限制。
在一个实施方式中,当按照关系型数据库表结构的定义规则,对获取到的字段进行处理时,还需要判断该字段是否为rowkey,例如product是表2中rowkey字段的一部分,因此在表3中需要将其定义为isRowkey=true;t1、p1、t2、p2、t3、p3、t4、p4是表2中columnqualifier字段,因此在表3中需要将其定义为isRowkey=false。进一步的,还可以定义该字段记录的数据的数据类型,例如,假设product用于记录产品名称,则可以定义product记录的数据的数据类型为string(字符串),t1用于记录产品数量,则可以定义t1记录的数据的数据类型为long(长整数)。通过上述处理,便可以确定目标表结构中各个字段对应的字段名称和数据类型,进而得到完整的目标表结构。
需要特别指出的是,上述列举的将源表结构映射为目标表结构的规则只是一种示例,并不是对映射规则的限定,基于本申请的思想,本领域的技术人员也可以采用其它映射规则。
在实际应用中,用户的需求是不断变化的,用户可能存在一些不确定的需求,或者未来可能增加的需求,这种情况下需要考虑动态设计列,数据库的表结构中可能存在动态列,本申请将动态列对应的column qualifier称为动态列字段。
在一个实施方式中,数据查询插件在提取源表结构中的静态列字段时,可以首先判断上述源表结构中是否存在动态列字段,如果存在动态列字段,数据查询插件可以识别上述动态列字段对应的动态列记录的数据的类别,并将具有相同使用意义,以及相同数据类型的动态列抽象为一个类,并赋予该类字段名称和数据类型,生成第二静态列字段,上述第二静态列字段可以表征具有相同数据类别的动态列字段。例如,可能存在一个数据库表,该数据库表可以用来统计用户的状态码,状态码可能存在200、204、400,或者500等多种取值情况,因此在创建该数据库表时,可以采用动态列来记录上述状态码的取值,当数据查询插件在提取源表结构中的静态列字段时,经过判断确认上述源表结构中存在动态列字段,此时,数据查询插件可以识别记录状态码取值的动态列,并识别该动态列记录的数据的类别,然后将上述动态列抽象为一个类,并赋予该类字段名称和数据类型,例如将上述动态列赋予“status”的字段名称,以及“long”的数据类型,此时“status”可以作为上述动态列的静态列字段,本申请将具有这种特征的静态列字段称为第二静态列字段。为区别第二静态列字段和源表结构中本身已经存在的静态列字段,本申请将第二静态列字段以外的静态列字段称为第一静态列字段。需要特别指出的是,在赋予动态列字段名称时,还可以在上述字段名称中加入限定条件,以使得数据查询插件可以通过上述限定条件判断上述字段名称是否为第二静态列字段。
当生成第二静态列字段后,数据查询插件便可以提取上述第二静态列字段和上述源表结构中已存在的第一静态列字段,进而提取出完整的静态列字段。
请参阅图1,为本申请实施方式一中数据查询方法的流程图。
S101:接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作。
在本实施方式中,当用户得到完整的目标表结构后,便可以按照关系型数据库的SQL语句规则,编写针对上述目标表结构的目标数据查询请求,显然,上述目标数据查询请求可以支持对上述目标表结构进行查询操作。
结合上文中的表2和表3进行说明,按照Apace drill框架下的SQL语句规则,其SQL语句为:
select row_key,
drill_test.a.t1,drill_test.a.p1,drill_test.b.t2,drill_test.b.p2
form drill_test
上述SQL查询语句结构冗长,可阅读性差,不利于用户编写,此时用户可以根据表3所示的目标表结构,按照关系型数据库的SQL语句规则,编写SQL查询语句,以简化查询语句的编写。当数据查询插件接收到客户端发送的目标数据查询请求后,可以使用Drill框架下的SQLParser,将SQL语句解析为SQL查询语法树,并转换为drill plugin参数,进而将上述目标数据查询请求解析为目标查询字段。
S102:判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。
在本实施方式中,数据查询插件可以使用StoragePlugin获取Schema信息对SQL语句进行校验,判断上述目标查询字段是否存在于上述目标表结构中。如果上述目标查询字段存在于目标表结构中,数据查询插件便可以通过RelNode阶段,DrillRel阶段和Prel阶段,将上述目标数据查询请求转换为支持上述源表结构查询操作的源数据查询请求。
在一个实施方式中,将目标数据查询请求转换为支持源表结构查询操作的源数据查询请求可以包括:将目标数据查询请求中的行选择条件转换为支持源表结构查询操作的源选择条件,并根据上述目标查询字段和上述源选择条件,生成支持上述源表结构查询操作的源数据查询请求。
举例说明,目标数据查询请求为:
最终目标数据查询请求被转换为支持源表结构查询操作的源数据查询请求,即上文中的scan操作,数据查询插件可以根据源数据查询请求,按照第一数据库的查询机制实现对数据的查询操作,并获得查询结果。
请参阅图2,为本申请实施方式二中数据查询方法的流程图。
在本实施方式中,当数据查询插件接收到客户端发送的目标数据查询请求,并将上述目标数据查询请求解析为目标查询字段后,数据查询插件还可以判断上述目标查询字段是否存在于目标表结构中。
如果数据查询插件判断上述目标查询字段不存在于目标表结构中,则表示SQL语句校验失败,数据查询插件将结束本次查询操作。如果数据查询插件判断上述目标查询字段存在于目标表结构中,则表示SQL语句校验通过,数据查询插件可以进一步判断上述目标查询字段是否携带有指定符号,上述指定符号可以用于表征查询所有,例如指定符号可以为“*”。
如果上述目标查询字段携带有上述指定符号,数据查询插件可以通过目标查询字段携带的限定条件,判断上述目标查询字段是否为第二静态列字段,如果上述目标查询字段是第二静态列字段,数据查询插件可以读取上述目标查询字段表征的各个动态列字段的字段名称和数据类型。举例说明,select status[*]from test,表示查询test表中所有的status,相应的select status[200]from test,表示查询test表中status值为200的status。
当数据查询插件读取到目标查询字段表征的各个动态列字段的字段名称和数据类型后,数据查询插件便可以根据上述字段名称和上述数据类型,选择合适的Filter,将上述目标数据查询请求中的行选择条件转换为支持上述源表结构的源选择条件,并根据上述目标查询字段和上述源选择条件,生成支持上述源表结构查询操作的源数据查询请求。例如,针对目标数据查询请求select*from drill_test where product=’dsp’and cluster=’yz’and p1>’10’,product和cluster可以通过hbase提供的RowFilter进行比较;p1属于qualifier,可以通过hbase提供的ColumnValueFilter进行比较。
在一个实施方式中,如果上述目标查询字段携带有指定符号,但是上述目标查询字段不是第二静态列字段,数据查询插件可以读取目标表结构中各个字段的字段名称和数据类型。需要特别指出的是,如果数据查询插件判断上述目标查询字段未携带有指定符号,数据查询插件也可以读取目标表结构中各个字段的字段名称和数据类型。相应的,当数据查询插件读取到各个字段的字段名称和数据类型后,数据查询插件便可以根据上述字段名称和上述数据类型,选择合适的Filter,将上述目标数据查询请求中的行选择条件转换为支持上述源表结构的源选择条件,并根据上述目标查询字段和上述源选择条件,生成支持上述源表结构查询操作的源数据查询请求。
在一个实施方式中,当数据查询插件根据源数据查询请求,完成数据查询操作后,可以得到源查询结果,上述源查询结果符合第一数据库的查询结果格式。为便于用户读取查询结果,数据查询插件还可以将上述源查询结果转换为目标查询结果,上述目标查询结果符合第二数据库的查询结果格式,并与上述目标表结构相匹配。
结合上文中的表2和表3进行说明,Hbase得到的源查询结果为dsp_yz_1563957787000_fj;{a:{t1=1;p1=4},b:{t2=3:p2=5}},数据查询插件可以将其转换为符合关系型数据库查询结果格式的目标查询结果product=dsp,cluster=yz,time=1563957787000,area=fj;t1=1;p1=4;t2=3;p2=5,以方便用户读取查询得到的结果。
请参阅图3,本申请还提供一种数据查询插件,所述数据查询插件包括:
表结构定义模块,用于将第一数据库的源表结构映射为第二数据库的目标表结构;
查询请求解析模块,用于接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;
查询请求转换模块,用于判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。
在一个实施方式中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求可以包括:
将所述目标数据查询请求中的行选择条件转换为支持所述源表结构查询操作的源选择条件;
根据所述目标查询字段和所述源选择条件,生成支持所述源表结构查询操作的源数据查询请求。
在一个实施方式中,所述表结构定义模块还可以包括:
列字段判断单元,用于判断所述源表结构中是否存在动态列字段,若存在所述动态列字段,识别所述动态列字段的数据类别,并生成第二静态列字段,所述第二静态列字段表征具有相同所述数据类别的所述动态列字段;
列字段提取单元,用于提取所述第二静态列字段和所述源表结构中已存在的第一静态列字段,以及将所述源表结构中的行键分割为源字段;
表结构生成单元,用于根据所述第二数据库的表结构定义规则,定义所述静态列字段和所述源字段的数据类型,并生成所述目标表结构,所述目标表结构中的字段由所述静态列字段和所述源字段组成。
在一个实施方式中,所述查询请求转换模块还可以包括:
字段读取单元,用于判断所述目标查询字段是否携带有指定符号,若所述目标查询字段携带有所述指定符号,判断所述目标查询字段是否为所述第二静态列字段,若所述目标查询字段是所述第二静态列字段,读取所述目标查询字段表征的所述动态列字段的字段名称和数据类型;以及,
若所述目标查询字段携带有所述指定符号,且所述目标查询字段不是所述第二静态列字段,读取所述目标表结构中各个字段的字段名称和数据类型。
在一个实施方式中,所述数据查询插件还可以包括:
查询结果转换模块,用于将所述源数据查询请求的源查询结果转换为所述目标数据查询请求的目标查询结果,以使得所述目标查询结果与所述目标表结构相匹配。
请参阅图4,本申请还提供一种数据查询服务器,所述数据查询服务器包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,可以实现如上述的数据查询方法。具体地,在硬件层面,该数据查询服务器可以包括处理器、内部总线和存储器。所述存储器可以包括内存以及非易失性存储器。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述数据查询服务器的结构造成限定。例如,所述数据查询服务器还可包括比图4中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如GPU(Graphics Processing Unit,图像处理器),或者对外通信端口等。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等。
本实施方式中,所述的处理器可以包括中央处理器(CPU)或图形处理器(GPU),当然也可以包括其他的具有逻辑处理能力的单片机、逻辑门电路、集成电路等,或其适当组合。本实施方式所述的存储器可以是用于保存信息的记忆设备。在数字系统中,能保存二进制数据的设备可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也可以为存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也可以叫存储器等。实现的时候,该存储器也可以采用云存储器的方式实现,具体实现方式,本说明书不做限定。
需要说明的是,本说明书中的数据查询服务器,具体的实现方式可以参照方法实施方式的描述,在此不作一一赘述。
由此可见,本申请提供的技术方案,数据查询插件可以首先将NoSQL型数据库的表结构映射为关系型数据库的表结构,基于生成的关系型数据库的表结构,用户便可以使用关系型数据库的语法结构编写SQL查询语句,而不用再关心NoSQL型数据库的具体表结构。数据查询插件在执行查询操作时,可以将用户输入的关系型数据库查询请求转换为支持NoSQL型数据库的查询请求,数据查询过程中仍然使用NoSQL型数据库的查询机制,可以进一步减少对NoSQL型数据库的改动。本申请提供的技术方案可以简化数据查询时使用的查询语句,改善用户使用NoSQL型数据库时的操作体验,提高数据库的查询效率。当数据查询插件获取到数据查询结果后,还可以将符合NoSQL型数据库格式的查询结果转换为符合关系型数据库格式的查询结果,以进一步提高用户的使用体验。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种数据查询方法,其特征在于,所述方法应用于数据查询插件中,所述数据查询插件储存有根据第一数据库的源表结构映射得到的第二数据库的目标表结构,所述方法包括:
接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;
判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求;
其中,将第一数据库的源表结构映射为第二数据库的目标表结构包括:
提取所述源表结构中的静态列字段,并将所述源表结构中的行键分割为源字段;
根据所述第二数据库的表结构定义规则,定义所述静态列字段和所述源字段的数据类型,并生成所述目标表结构,所述目标表结构中的字段由所述静态列字段和所述源字段组成。
2.根据权利要求1所述的方法,其特征在于,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求包括:
将所述目标数据查询请求中的行选择条件转换为支持所述源表结构查询操作的源选择条件;
根据所述目标查询字段和所述源选择条件,生成支持所述源表结构查询操作的源数据查询请求。
3.根据权利要求1所述的方法,其特征在于,提取所述源表结构中的静态列字段包括:
判断所述源表结构中是否存在动态列字段,若存在所述动态列字段,识别所述动态列字段对应的数据类别,并生成第二静态列字段,所述第二静态列字段表征具有相同所述数据类别的所述动态列字段;
提取所述第二静态列字段和所述源表结构中已存在的第一静态列字段。
4.根据权利要求3所述的方法,其特征在于,若所述目标查询字段存在,所述方法还包括:
判断所述目标查询字段是否携带有指定符号,若所述目标查询字段携带有所述指定符号,判断所述目标查询字段是否为所述第二静态列字段,若所述目标查询字段是所述第二静态列字段,读取所述目标查询字段表征的所述动态列字段的字段名称和数据类型;
若所述目标查询字段携带有所述指定符号,且所述目标查询字段不是所述第二静态列字段,读取所述目标表结构中各个字段的字段名称和数据类型。
5.根据权利要求4所述的方法,其特征在于,若所述目标查询字段未携带有所述指定符号,读取所述目标表结构中各个字段的字段名称和数据类型。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
基于读取的所述字段名称和所述数据类型,将所述目标数据查询请求中的行选择条件转换为支持所述源表结构的源选择条件;
根据所述目标查询字段和所述源选择条件,生成支持所述源表结构查询操作的所述源数据查询请求。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述源数据查询请求的源查询结果转换为所述目标数据查询请求的目标查询结果,以使得所述目标查询结果与所述目标表结构相匹配。
8.一种数据查询插件,其特征在于,所述数据查询插件包括:
表结构定义模块,用于将第一数据库的源表结构映射为第二数据库的目标表结构,其中,将第一数据库的源表结构映射为第二数据库的目标表结构包括:提取所述源表结构中的静态列字段,并将所述源表结构中的行键分割为源字段,根据所述第二数据库的表结构定义规则,定义所述静态列字段和所述源字段的数据类型,并生成所述目标表结构,所述目标表结构中的字段由所述静态列字段和所述源字段组成;
查询请求解析模块,用于接收客户端发送的目标数据查询请求,并将所述目标数据查询请求解析为目标查询字段,其中,所述目标数据查询请求支持所述目标表结构的查询操作;
查询请求转换模块,用于判断所述目标查询字段是否存在于所述目标表结构中,若所述目标查询字段存在于所述目标表结构中,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求。
9.根据权利要求8所述的数据查询插件,其特征在于,将所述目标数据查询请求转换为支持所述源表结构查询操作的源数据查询请求包括:
将所述目标数据查询请求中的行选择条件转换为支持所述源表结构查询操作的源选择条件;
根据所述目标查询字段和所述源选择条件,生成支持所述源表结构查询操作的源数据查询请求。
10.根据权利要求8所述的数据查询插件,其特征在于,所述表结构定义模块包括:
列字段判断单元,用于判断所述源表结构中是否存在动态列字段,若存在所述动态列字段,识别所述动态列字段的数据类别,并生成第二静态列字段,所述第二静态列字段表征具有相同所述数据类别的所述动态列字段;
列字段提取单元,用于提取所述第二静态列字段和所述源表结构中已存在的第一静态列字段,以及将所述源表结构中的行键分割为源字段;
表结构生成单元,用于根据所述第二数据库的表结构定义规则,定义所述静态列字段和所述源字段的数据类型,并生成所述目标表结构,所述目标表结构中的字段由所述静态列字段和所述源字段组成。
11.根据权利要求10所述的数据查询插件,其特征在于,所述查询请求转换模块还包括:
字段读取单元,用于判断所述目标查询字段是否携带有指定符号,若所述目标查询字段携带有所述指定符号,判断所述目标查询字段是否为所述第二静态列字段,若所述目标查询字段是所述第二静态列字段,读取所述目标查询字段表征的所述动态列字段的字段名称和数据类型;以及,
若所述目标查询字段携带有所述指定符号,且所述目标查询字段不是所述第二静态列字段,读取所述目标表结构中各个字段的字段名称和数据类型。
12.根据权利要求8所述的数据查询插件,其特征在于,所述数据查询插件还包括:
查询结果转换模块,用于将所述源数据查询请求的源查询结果转换为所述目标数据查询请求的目标查询结果,以使得所述目标查询结果与所述目标表结构相匹配。
13.一种数据查询服务器,其特征在于,所述数据查询服务器包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,实现如权利要求1至7中任一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778874.2A CN110569243B (zh) | 2019-08-22 | 2019-08-22 | 一种数据查询方法、数据查询插件和数据查询服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910778874.2A CN110569243B (zh) | 2019-08-22 | 2019-08-22 | 一种数据查询方法、数据查询插件和数据查询服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110569243A CN110569243A (zh) | 2019-12-13 |
CN110569243B true CN110569243B (zh) | 2022-07-01 |
Family
ID=68774208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910778874.2A Active CN110569243B (zh) | 2019-08-22 | 2019-08-22 | 一种数据查询方法、数据查询插件和数据查询服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110569243B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113779029A (zh) * | 2021-09-06 | 2021-12-10 | 中国银行股份有限公司 | 一种数据查询的方法及装置 |
CN118170792A (zh) * | 2024-04-08 | 2024-06-11 | 生命奇点(北京)科技有限公司 | 医疗数据组装系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631907A (zh) * | 2013-11-26 | 2014-03-12 | 中国科学院信息工程研究所 | 一种将关系型数据迁移至HBase的方法及系统 |
CN104731922A (zh) * | 2015-03-26 | 2015-06-24 | 江苏物联网研究发展中心 | 基于分布式数据库HBase的结构化数据的快速检索系统及方法 |
CN106682147A (zh) * | 2016-12-22 | 2017-05-17 | 北京锐安科技有限公司 | 一种基于海量数据的查询方法及装置 |
CN107291964A (zh) * | 2017-08-16 | 2017-10-24 | 南京华飞数据技术有限公司 | 一种基于HBase实现模糊查询的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496640B2 (en) * | 2012-12-19 | 2019-12-03 | Salesforce.Com, Inc. | Querying a not only structured query language (NoSQL) database using structured query language (SQL) commands |
WO2017156144A1 (en) * | 2016-03-09 | 2017-09-14 | Kennedy Jr Thomas R | Source independent query language |
-
2019
- 2019-08-22 CN CN201910778874.2A patent/CN110569243B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103631907A (zh) * | 2013-11-26 | 2014-03-12 | 中国科学院信息工程研究所 | 一种将关系型数据迁移至HBase的方法及系统 |
CN104731922A (zh) * | 2015-03-26 | 2015-06-24 | 江苏物联网研究发展中心 | 基于分布式数据库HBase的结构化数据的快速检索系统及方法 |
CN106682147A (zh) * | 2016-12-22 | 2017-05-17 | 北京锐安科技有限公司 | 一种基于海量数据的查询方法及装置 |
CN107291964A (zh) * | 2017-08-16 | 2017-10-24 | 南京华飞数据技术有限公司 | 一种基于HBase实现模糊查询的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110569243A (zh) | 2019-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11475034B2 (en) | Schemaless to relational representation conversion | |
CN110633292B (zh) | 一种异构数据库的查询方法、装置、介质、设备及系统 | |
CN113032362B (zh) | 数据血缘分析方法、装置、电子设备和存储介质 | |
CN106407250B (zh) | 信息查询方法、装置、系统、服务器和客户端 | |
CN105989150B (zh) | 一种基于大数据环境的数据查询方法及装置 | |
US20170083573A1 (en) | Multi-query optimization | |
CN108334609B (zh) | Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN110555035A (zh) | 一种对查询语句进行优化的方法、装置 | |
CN111708805A (zh) | 数据查询方法、装置、电子设备及存储介质 | |
CN110569243B (zh) | 一种数据查询方法、数据查询插件和数据查询服务器 | |
CN112860730A (zh) | Sql语句的处理方法、装置、电子设备及可读存储介质 | |
CN110955714A (zh) | 一种将非结构化文本转化为结构化文本的方法及装置 | |
US20230153455A1 (en) | Query-based database redaction | |
CN114139040A (zh) | 一种数据存储及查询方法、装置、设备及可读存储介质 | |
US10552394B2 (en) | Data storage with improved efficiency | |
CN116795859A (zh) | 数据分析方法、装置、计算机设备和存储介质 | |
CN112182637A (zh) | 一种安全控制系统、方法、装置及存储介质 | |
CN117743369A (zh) | 数据查询方法、装置、存储介质及终端设备 | |
CN111125216A (zh) | 数据导入Phoenix的方法及装置 | |
CN110795915B (zh) | xml文件批量修改方法、系统、设备和计算机可读存储介质 | |
CN104090895B (zh) | 获取基数的方法、装置、服务器及系统 | |
CN112214494B (zh) | 检索方法及装置 | |
CN115114297A (zh) | 数据轻量存储及查找方法、装置、电子设备及存储介质 | |
CN109918367B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |