CN109101516A - 一种数据查询方法和服务器 - Google Patents
一种数据查询方法和服务器 Download PDFInfo
- Publication number
- CN109101516A CN109101516A CN201711235855.2A CN201711235855A CN109101516A CN 109101516 A CN109101516 A CN 109101516A CN 201711235855 A CN201711235855 A CN 201711235855A CN 109101516 A CN109101516 A CN 109101516A
- Authority
- CN
- China
- Prior art keywords
- instruction
- metadata
- phoenix
- connector
- sparksql
- 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.)
- Granted
Links
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- 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/2228—Indexing structures
-
- 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
-
- 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/245—Query processing
- G06F16/2452—Query translation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据查询方法和服务器,该方法包括:查询器向连接器发送SparkSQL查询指令;SparkSQL查询指令携带HBase表的表标识、HBase表的元数据、与所述元数据对应的属性值;连接器在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,生成第一Phoenix查询指令,并发送给存储器;第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;存储器在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给连接器;连接器在接收到行数据后,将所述行数据返回给查询器。通过本申请的技术方案,不用对HBase表进行全表扫描,提升查询性能。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种数据查询方法和服务器。
背景技术
HBase数据库是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于提供对大型数据集的随机、实时读写访问服务。其中,该HBase数据库以数据表(本文中称为HBase表)的形式存储数据,HBase表可以由行和列族组成,如表1所示,为HBase表的示例。行键(RowKey)是HBase表的索引,当接收到查询请求时,若查询请求携带的RowKey是001,则从HBase表中查询到的内容是第一行数据,因此,返回第一行数据。此外,列族(ColumnFamily)可以由一个或者多个列组成,表1中姓名、地址、年龄、手机号、邮箱等为元数据,每个元数据对应多个属性值,例如姓名对应的属性值有张三、李四。
表1
在上述方式下,若查询请求未携带RowKey,而是携带某个元数据(如地址)的属性值,如北京,则无法通过RowKey快速查询到行数据,而是需要对整个HBase表进行全表扫描,以查询到具有“北京”的行数据,查询性能很低。
发明内容
本申请提供一种数据查询方法,所述方法包括:
查询器向连接器发送SparkSQL查询指令;所述SparkSQL查询指令携带HBase表的表标识、所述HBase表的元数据、与所述元数据对应的属性值;
所述连接器在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,则生成第一Phoenix查询指令,并发送给所述存储器;所述第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;
所述存储器在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给所述连接器;其中,索引表用于记录HBase表的元数据的属性值、HBase表的行键的对应关系;
所述连接器在接收到所述行数据后,将所述行数据返回给所述查询器。
本申请提供一种服务器,包括:查询器、连接器和存储器;
所述查询器,用于向连接器发送SparkSQL查询指令;SparkSQL查询指令携带HBase表的表标识、所述HBase表的元数据、所述元数据对应的属性值;
所述连接器,用于在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,生成第一Phoenix查询指令,并发送给所述存储器;所述第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;
所述存储器,用于在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给所述连接器;索引表用于记录HBase表的元数据的属性值、HBase表的行键的对应关系;
所述连接器,还用于在收到所述行数据后,将所述行数据返回给查询器。
基于上述技术方案,本申请实施例中,通过创建索引表,并在索引表中记录HBase表的元数据的属性值、HBase表的行键的对应关系,这样,在接收到Phoenix查询指令后,即使在Phoenix查询指令中未携带HBase表的行键,而是携带HBase表的元数据对应的属性值,则可以通过该属性值查询索引表,得到该HBase表的行键,然后使用HBase表的行键查询该HBase表,从而得到对应的行数据。上述方式不用对整个HBase表进行全表扫描,可以提升查询性能。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。
图1A和图1B是本申请一种实施方式中的服务器的结构图;
图2A是本申请一种实施方式中的索引表的创建方法的流程图;
图2B是本申请一种实施方式中的数据查询方法的流程图;
图2C是本申请一种实施方式中的数据存储方法的流程图;
图2D是本申请另一种实施方式中的数据查询方法的流程图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例提出一种数据查询方法,可以应用于包括存储器、查询器和连接器的系统,查询器、存储器和连接器可以部署在同一个服务器,也可以部署在不同服务器。若查询器、存储器和连接器部署在同一个服务器,则查询器、存储器和连接器是该服务器的三个功能模块,例如,查询器可以是实现数据查询功能的SQL(Structured Query Language,结构化查询语言)引擎,存储器可以是实现数据存储功能的数据库,连接器可以是实现连接功能的中间件。若查询器、存储器和连接器部署在不同服务器,则查询器、存储器和连接器是三个独立服务器。为方便描述,后续以查询器、存储器和连接器部署在同一个服务器为例。
参见图1A所示,为服务器的结构示意图,存储器用于实现数据存储功能,且存储器可以采用Phoenix组件实现数据的存储。查询器用于实现数据查询功能,且查询器可以采用SparkSQL(一种基于Spark的分布式SQL引擎)实现数据的查询。连接器可以实现Phoenix指令与SparkSQL指令的转换。
其中,存储器在通过HBase数据库存储数据时,可以采用Phoenix组件实现数据的存储,而Phoenix组件用于提供对HBase数据库的SQL支持,这样,存储器在接收到SQL请求时,可以根据SQL请求对HBase数据库中的数据进行操作。
查询器可以采用SparkSQL引擎实现数据的查询,该SparkSQL引擎可以开放多个接入外部数据源(DataSource)的接口,例如,JDBC(Java DataBase Connectivity,java数据库连接)、ODBC(Open Database Connectivity,开放数据库连接)、API(ApplicationProgramming Interface,应用程序编程接口)等接口。SparkSQL引擎还可以支持更多格式的数据源,例如,JSON(Java Script Object Notation,Java脚本对象标记)、Parquet(列式存储格式)、avro(数据序列化的系统)、CSV(Comma Separated Values,逗号分隔值文)等格式。
其中,由于存储器采用Phoenix组件实现数据的存储,查询器采用SparkSQL引擎实现数据的查询,也就是说,查询器能够处理SparkSQL指令,而存储器能够处理Phoenix指令,因此,查询器发送SparkSQL指令后,若存储器接收到SparkSQL指令,将无法处理该SparkSQL指令;同理,存储器发送Phoenix指令后,若查询器接收到Phoenix指令,将无法处理该Phoenix指令。基于此,还可以在存储器与查询器之间部署连接器,连接器用于实现SparkSQL指令与Phoenix指令的转换。
例如,针对存储器发送的Phoenix指令,连接器可以将该Phoenix指令转换成查询器能够处理的SparkSQL指令,并将该SparkSQL指令发送给查询器。
又例如,针对查询器发送的SparkSQL指令,连接器可以将该SparkSQL指令转换成存储器能够处理的Phoenix指令,并将该Phoenix指令发送给存储器。
在一个例子中,存储器在采用Phoenix组件实现数据存储时,可以采用HBase表的形式存储数据,而HBase表可以由行和列族组成,如表2所示,为HBase表的示例,这个HBase表具有唯一的表标识,即不同HBase表的表标识不同。其中,行键是HBase表的索引,如表2中的001、002、003、004。列族可以由一个或者多个列组成,每个列的列名,如姓名、地址、年龄、手机号、邮箱等,均为元数据。元数据的对应值为属性值,如元数据“姓名”对应的属性值可以是:张三、李四、王五、赵六等,元数据“手机号”对应的属性值可以是:18611111111、18622222222、18633333333、18644444444等。
表2
在一个例子中,存储器接收到Phoenix指令后,若该Phoenix指令携带行键“001”,则通过行键“001”查询表2所示的HBase表,可以得到第一行的行数据。但是,若该Phoenix指令没有携带行键“001”,而是携带元数据“地址”的属性值“北京”,则无法快速查询到行数据,而是需要对HBase表进行全表扫描,查询性能很低。
针对上述发现,本申请实施例中,可以在存储器创建索引表,该索引表用于记录HBase表的元数据的属性值(如属性值“北京”)、HBase表的行键(如行键“001”)的对应关系。这样,若Phoenix指令没有携带行键“001”,而是携带属性值“北京”,则存储器通过属性值“北京”查询索引表,得到行键“001”,然后,通过行键“001”查询表2所示的HBase表,得到第一行的行数据。上述方式不需要对HBase表进行全表扫描,从而提高查询性能,并提升查询效率。
本申请实施例中,可以涉及如下过程之一或者任意组合:索引表创建过程,数据查询过程,数据存储过程,索引表删除过程,索引表获取过程等。
参见图1B所示,查询器可以提供SparkSQL创建接口,基于该SparkSQL创建接口,能够生成并发送SparkSQL创建指令,SparkSQL创建指令用于创建索引表。连接器可以提供SparkSQL创建接口和Phoenix创建接口,基于SparkSQL创建接口,连接器能够解析SparkSQL创建指令的内容,基于该Phoenix创建接口,连接器能够根据该内容生成并发送Phoenix创建指令,该Phoenix创建指令用于创建索引表。存储器可以提供Phoenix创建接口,基于该Phoenix创建接口,存储器能够解析Phoenix创建指令的内容,并根据该内容创建索引表。
参见图1B所示,查询器可以提供SparkSQL查询接口,基于该SparkSQL查询接口,查询器能够生成并发送SparkSQL查询指令,SparkSQL查询指令用于查询数据,并能够处理针对SparkSQL查询指令的SparkSQL响应指令。
连接器可以提供SparkSQL查询接口和Phoenix查询接口。基于SparkSQL查询接口,连接器能够解析SparkSQL查询指令的内容,基于Phoenix查询接口,连接器能够根据该内容生成并发送Phoenix查询指令。此外,基于Phoenix查询接口,连接器能够解析针对Phoenix查询指令的Phoenix响应指令的内容,基于SparkSQL查询接口,连接器能够根据该内容生成并发送SparkSQL响应指令。
存储器可以提供Phoenix查询接口,基于Phoenix查询接口,存储器能够解析Phoenix查询指令的内容,并进行查询,生成并发送Phoenix响应指令。
参见图1B所示,查询器可以提供SparkSQL存储接口,基于该SparkSQL存储接口,能够生成并发送SparkSQL存储指令,SparkSQL存储指令用于存储数据。连接器可以提供SparkSQL存储接口和Phoenix存储接口,基于SparkSQL存储接口,连接器能够解析SparkSQL存储指令的内容,基于该Phoenix存储接口,连接器能够根据该内容生成并发送Phoenix存储指令,该Phoenix存储指令用于存储数据。存储器可以提供Phoenix存储接口,基于该Phoenix存储接口,存储器能够解析Phoenix存储指令的内容,并根据该内容存储相关数据。
参见图1B所示,查询器可以提供SparkSQL删除接口,基于该SparkSQL删除接口,能够生成并发送SparkSQL删除指令,SparkSQL删除指令用于删除索引表。连接器可以提供SparkSQL删除接口和Phoenix删除接口,基于SparkSQL删除接口,连接器能够解析SparkSQL删除指令的内容,基于该Phoenix删除接口,连接器能够根据该内容生成并发送Phoenix删除指令,该Phoenix删除指令用于删除索引表。存储器可以提供Phoenix删除接口,基于该Phoenix删除接口,存储器能够解析Phoenix删除指令的内容,并根据该内容删除索引表。
参见图1B所示,查询器可以提供SparkSQL获取接口,基于该SparkSQL获取接口,查询器能够生成并发送SparkSQL获取指令,SparkSQL获取指令用于获取索引表,并能够处理针对SparkSQL获取指令的SparkSQL响应指令。
连接器可以提供SparkSQL获取接口和Phoenix获取接口。基于SparkSQL获取接口,连接器能够解析SparkSQL获取指令的内容,基于Phoenix获取接口,连接器能够根据该内容生成并发送Phoenix获取指令。此外,基于Phoenix获取接口,连接器能够解析针对Phoenix获取指令的Phoenix响应指令的内容,基于SparkSQL获取接口,连接器能够根据该内容生成并发送SparkSQL响应指令。
存储器可以提供Phoenix获取接口,基于Phoenix获取接口,存储器能够解析Phoenix获取指令的内容,获取索引表,生成并发送Phoenix响应指令。
在上述应用场景下,结合图2A所示的流程,对索引表创建过程进行说明。
步骤211,查询器向连接器发送SparkSQL创建指令(用于创建索引表)。
其中,SparkSQL创建指令携带HBase表的表标识、HBase表的元数据。例如,若为表2所示的HBase表创建索引表,且将元数据“手机号”作为索引表的索引,则该SparkSQL创建指令可以携带该HBase表的表标识、元数据“手机号”。
步骤212,连接器在接收到SparkSQL创建指令后,根据该SparkSQL创建指令生成Phoenix创建指令,并将该Phoenix创建指令发送给存储器。
具体的,连接器可以从SparkSQL创建指令中解析出HBase表的表标识、该HBase表的元数据,并根据该表标识、该元数据生成Phoenix创建指令,即该Phoenix创建指令携带HBase表的表标识、HBase表的元数据(如“手机号”)。
步骤213,存储器在接收到Phoenix创建指令后,从该表标识对应的HBase表中,获取该元数据对应的属性值、该属性值对应的行键,创建与该表标识、该元数据对应的索引表,并在该索引表中记录该属性值与该行键的对应关系。
例如,存储器可以从Phoenix创建指令中解析出HBase表的表标识、HBase表的元数据(如“手机号”),并创建与该表标识、该元数据对应的索引表,该索引表可以用于记录该元数据的属性值、该属性值对应的行键的对应关系。
存储器可以从该表标识对应的HBase表(表2所示)中,获取元数据(如“手机号”)对应的属性值18611111111,该属性值对应的行键001,并在索引表中记录属性值18611111111与行键001的对应关系,以此类推,如表3所示。
表3
手机号 | 行键 |
18611111111 | 001 |
18622222222 | 002 |
18633333333 | 003 |
18644444444 | 004 |
在一个例子中,假设表2所示的HBase表的表标识为表A,则存储器创建表3的索引表后,还可以将HBase表的表标识(如表A)、HBase表的元数据(如“手机号”)发送给连接器,连接器在本地的映射表中记录该表标识和该元数据的对应关系,该对应关系表示存储器存在该表标识和该元数据对应的索引表。
基于上述处理流程,可以完成索引表的创建,进一步的,还可以基于该索引表完成数据查询。
以下结合图2B所示的流程,对数据查询过程进行说明。
步骤221,查询器向连接器发送SparkSQL查询指令(用于查询数据)。
其中,SparkSQL查询指令携带HBase表的表标识、HBase表的元数据、与该元数据对应的属性值。例如,若从表2所示的HBase表中查询“18611111111”对应的数据,则SparkSQL查询指令可以携带HBase表的表标识(如表A)、该HBase表的元数据(如“手机号”)、与该元数据对应的属性值“18611111111”。
步骤222,连接器在接收到该SparkSQL查询指令后,若存储器存在与该表标识、该元数据对应的索引表,则根据该SparkSQL查询指令生成第一Phoenix查询指令,并将该第一Phoenix查询指令发送给存储器。或者,若该存储器不存在与该表标识、该元数据对应的索引表,则根据该SparkSQL查询指令生成第二Phoenix查询指令,并将该第二Phoenix查询指令发送给该存储器。
具体的,连接器在接收到该SparkSQL查询指令后,从该SparkSQL查询指令中解析出HBase表的表标识、HBase表的元数据、与该元数据对应的属性值。然后,连接器可以判断存储器是否存在与该表标识、该元数据对应的索引表。
如果是,则连接器可以根据该表标识、该元数据、该属性值生成第一Phoenix查询指令,即第一Phoenix查询指令携带该表标识、该元数据、该属性值。
如果否,则连接器可以根据该表标识、该属性值生成第二Phoenix查询指令,即第二Phoenix查询指令携带该表标识、该属性值。或者,连接器也可以根据该表标识、该元数据、该属性值生成第二Phoenix查询指令,即第二Phoenix查询指令携带该表标识、该元数据、该属性值,对此过程不做限制。
其中,针对“连接器判断存储器是否存在与该表标识、该元数据对应的索引表”的过程,可以包括:方式一、若连接器本地维护有映射表,且该映射表用于记录表标识和元数据的对应关系,则:连接器在从SparkSQL查询指令中解析出表标识和元数据后,可以查询映射表中是否存在该表标识和该元数据的对应关系,如果是,则可以确定存储器存在与该表标识、该元数据对应的索引表;如果否,则可以确定存储器不存在与该表标识、该元数据对应的索引表。
方式二、连接器在从SparkSQL查询指令中解析出表标识和元数据后,向存储器发送Phoenix管理指令,该Phoenix管理指令携带该表标识、该元数据。存储器在接收到该Phoenix管理指令后,查询本地是否存在与该表标识、该元数据对应的索引表,并向连接器发送携带查询结果的Phoenix响应指令。连接器可以根据该查询结果,确定存储器是否存在与该表标识、该元数据对应的索引表。
步骤223,存储器在接收到上述第一Phoenix查询指令(其携带表标识、元数据、属性值)后,从该表标识、该元数据对应的索引表中,获取该属性值对应的行键,并从该表标识对应的HBase表中,获取该行键对应的行数据。
例如,存储器可以从第一Phoenix查询指令中解析出表标识(如表A)、元数据(如“手机号”)、属性值(如“18611111111”)。该表标识、该元数据对应的索引表如表3所示,存储器可以从表3中获取属性值(如“18611111111”)对应的行键(如001);该表标识对应的HBase表如表2所示,存储器可以从表2中获取该行键(如001)对应的行数据“001、张三、北京、28、18611111111”。
在另一个例子中,存储器在接收到第二Phoenix查询指令(其至少携带表标识、属性值)后,可以从第二Phoenix查询指令中解析出表标识(如表A)、属性值(假设为“张三”),该表标识对应的HBase表如表2所示,对表2进行全表扫描,得到“张三”对应的行数据“001、张三、北京、28、18611111111”。
其中,连接器在生成Phoenix查询指令时,该Phoenix查询指令还可以携带特定标记。当特定标记为第一标识时,表示Phoenix查询指令为第一Phoenix查询指令;当特定标记为第二标识时,表示Phoenix查询指令为第二Phoenix查询指令。存储器在接收到第一Phoenix查询指令时,可以先查询索引表,然后查询HBase表;存储器在接收到第二Phoenix查询指令时,可以直接查询HBase表。
步骤224,存储器在获取到行数据后,将该行数据返回给连接器。
步骤225,连接器在接收到该行数据后,将该行数据返回给查询器。
具体的,存储器可以生成针对第一Phoenix查询指令/第二Phoenix查询指令的Phoenix响应指令,将Phoenix响应指令发送给连接器,该Phoenix响应指令携带该行数据。连接器接收到Phoenix响应指令后,从Phoenix响应指令中解析出该行数据,生成针对SparkSQL查询指令的SparkSQL响应指令,并将SparkSQL响应指令发送给查询器,查询器从SparkSQL响应指令中解析出该行数据。
基于上述处理流程,可以完成数据的查询。
此外,还可以基于上述索引表完成数据存储,以下结合图2C所示的流程图,对数据存储过程进行说明。
步骤231,查询器向连接器发送SparkSQL存储指令(用于存储数据)。
其中,SparkSQL存储指令携带HBase表的表标识、HBase表的至少一个元数据、每个元数据对应的属性值、以及行键。例如,若需要在表2所示的HBase表中存储如下数据:行健“005”、姓名“韩七”、地址“深圳”、年龄“50”、手机号“18655555555”,则SparkSQL存储指令可以携带如下内容:HBase表的表标识(如表A)、元数据“姓名”和属性值“韩七”的对应关系、元数据“地址”和属性值“深圳”的对应关系、元数据“年龄”和属性值“50”的对应关系、元数据“手机号”和属性值“18655555555”的对应关系、以及行健“005”。
步骤232,连接器在接收到该SparkSQL存储指令后,根据该SparkSQL存储指令生成第一Phoenix存储指令和/或第二Phoenix存储指令,并将第一Phoenix存储指令和/或第二Phoenix存储指令发送给存储器。
连接器在接收到该SparkSQL存储指令后,从该SparkSQL存储指令中解析出HBase表的表标识、HBase表的至少一个元数据、每个元数据对应的属性值、以及行键。
针对每个元数据执行如下操作:若存储器存在该表标识、该元数据对应的索引表,则根据该SparkSQL存储指令生成第一Phoenix存储指令,并将第一Phoenix存储指令发送给存储器;否则不需要生成第一Phoenix存储指令。第一Phoenix存储指令携带所述表标识、所述元数据、所述元数据对应的属性值、所述属性值对应的行键。
此外,针对SparkSQL存储指令中的每个元数据,连接器判断存储器是否存在与该表标识、该元数据对应的索引表,具体判断方式参见步骤222,不再赘述。
例如,针对元数据“姓名”、“地址”、“年龄”,判断结果为存储器不存在与该表标识、该元数据对应的索引表,结束流程。针对元数据“手机号”,判断结果为存储器存在与该表标识、该元数据对应的索引表,即连接器可以生成第一Phoenix存储指令,该第一Phoenix存储指令携带该表标识(如表A)、该元数据(如手机号)、该元数据对应的属性值(如18655555555)、行键(005)。
连接器在接收到该SparkSQL存储指令后,还可以生成第二Phoenix存储指令,第二Phoenix存储指令携带所述表标识、所述至少一个元数据、所述每个元数据对应的属性值、所述行键。
其中,第一Phoenix存储指令可以指示存储器在索引表中存储数据,第二Phoenix存储指令可以指示存储器在HBase表中存储数据。
连接器在生成Phoenix存储指令时,该Phoenix存储指令还可以携带特定标记。当特定标记为第一标识时,表示Phoenix存储指令为第一Phoenix存储指令;当特定标记为第二标识时,表示Phoenix存储指令为第二Phoenix存储指令。存储器收到第一Phoenix存储指令时,执行步骤234;存储器收到第二Phoenix存储指令时,执行步骤233。
步骤233,存储器在接收到第二Phoenix存储指令后,在该表标识对应的HBase表中,记录该行键与每个元数据对应的属性值的对应关系。
例如,存储器从第二Phoenix存储指令中解析出HBase表的表标识(如表A)、元数据“姓名”和属性值“韩七”的对应关系、元数据“地址”和属性值“深圳”的对应关系、元数据“年龄”和属性值“50”的对应关系、元数据“手机号”和属性值“18655555555”的对应关系、行健“005”,因此,在表2所示的HBase表中,记录行健“005”与每个元数据对应的属性值的对应关系,得到表4。
表4
其中,针对存储器在HBase表中记录行键与属性值的对应关系的过程,则:若该HBase表中已经存在第二Phoenix存储指令携带的行健,就可以在该HBase表的该行健对应的位置,添加第二Phoenix存储指令携带的属性值;若该HBase表中不存在第二Phoenix存储指令携带的行健,则可以在HBase表添加新的数据行,并在该新的数据行记录该第二Phoenix存储指令携带的行健和属性值。
步骤234,存储器在接收到第一Phoenix存储指令后,在该表标识、该元数据对应的索引表中,记录该属性值与该行键的对应关系。
例如,存储器从第一Phoenix存储指令解析出表标识(如表A)、元数据(如手机号)、属性值(如18655555555)、行键(005),因此,可以在表3所示的索引表中记录属性值“18655555555”与行键“005”的对应关系,如表5所示。
表5
手机号 | 行键 |
18611111111 | 001 |
18622222222 | 002 |
18633333333 | 003 |
18644444444 | 004 |
18655555555 | 005 |
基于索引表还可以实现索引表的删除,以下对索引表删除过程进行说明。
情况一、查询器向连接器发送SparkSQL删除指令,该SparkSQL删除指令携带HBase表的表标识、该HBase表的元数据。连接器在接收到SparkSQL删除指令后,根据该SparkSQL删除指令生成Phoenix删除指令,并可以将该Phoenix删除指令发送给存储器,该Phoenix删除指令可以携带该表标识和该元数据。
存储器在接收到Phoenix删除指令后,从Phoenix删除指令中解析出HBase表的表标识、该HBase表的元数据,并删除该表标识、该元数据对应的索引表。
例如,Phoenix删除指令中携带表标识(如表A)、元数据(如手机号),则存储器中存在表5所示的索引表时,存储器可以根据该Phoenix删除指令将表5删除。
情况二、查询器向连接器发送SparkSQL删除指令,该SparkSQL删除指令可以携带HBase表的表标识、该HBase表的元数据、与该元数据对应的属性值。
连接器在接收到该SparkSQL删除指令后,可以根据该SparkSQL删除指令生成Phoenix删除指令,并可以将该Phoenix删除指令发送给存储器,其中,该Phoenix删除指令可以携带该表标识、该元数据和该元数据对应的属性值。
存储器在接收到该Phoenix删除指令后,可以从Phoenix删除指令中解析出HBase表的表标识、该HBase表的元数据、该元数据对应的属性值,并可以从该表标识、该元数据对应的索引表中,删除该属性值对应的行数据。
例如,Phoenix删除指令中携带表标识(如表A)、元数据(如手机号)、属性值(如18655555555),则存储器中存在表5所示的索引表时,存储器可以根据该Phoenix删除指令将表5中相应的数据删除,删除后的索引表如表3所示。
基于索引表还可以实现索引表的获取,以下对索引表获取过程进行说明。
情况一、查询器向连接器发送SparkSQL获取指令,该SparkSQL获取指令携带HBase表的表标识、该HBase表的元数据。连接器在接收到SparkSQL获取指令后,根据该SparkSQL获取指令生成Phoenix获取指令,并可以将该Phoenix获取指令发送给存储器,该Phoenix获取指令可以携带该表标识和该元数据。
存储器在接收到Phoenix获取指令后,从Phoenix获取指令中解析出HBase表的表标识、该HBase表的元数据,并获取该表标识、该元数据对应的索引表,然后,可以通过连接器将该表标识、该元数据对应的索引表返回给查询器。
针对“通过连接器将该表标识、该元数据对应的索引表返回给查询器”的过程,存储器可以向连接器发送针对Phoenix获取指令的Phoenix响应指令,该Phoenix响应指令携带该索引表,然后,连接器可以向查询器发送针对SparkSQL获取指令的SparkSQL响应指令,该SparkSQL响应指令携带该索引表。
例如,Phoenix获取指令中携带表标识(如表A)、元数据(如手机号),则存储器中存在表5所示的索引表时,存储器可以根据该Phoenix获取指令将表5返回给查询器。
情况二、查询器向连接器发送SparkSQL获取指令,该SparkSQL获取指令可以携带HBase表的表标识、该HBase表的元数据、与该元数据对应的属性值。
连接器在接收到该SparkSQL获取指令后,可以根据该SparkSQL获取指令生成Phoenix获取指令,并可以将该Phoenix获取指令发送给存储器,其中,该Phoenix获取指令可以携带该表标识、该元数据和该元数据对应的属性值。
存储器在接收到该Phoenix获取指令后,可以从该Phoenix获取指令中解析出HBase表的表标识、该HBase表的元数据、该元数据对应的属性值,并可以从该表标识、该元数据对应的索引表中,获取该属性值对应的行数据。
然后,存储器通过连接器将该行数据返回给查询器。具体的,存储器可以向连接器发送针对Phoenix获取指令的Phoenix响应指令,该Phoenix响应指令可以携带该行数据,然后,连接器可以向查询器发送针对SparkSQL获取指令的SparkSQL响应指令,该SparkSQL响应指令可以携带该行数据。
例如,Phoenix获取指令中携带表标识(如表A)、元数据(如手机号)、属性值(如18655555555),则存储器中存在表5所示的索引表时,存储器可以根据该Phoenix获取指令将表5中相应的行数据(包括“手机号”“18655555555”、“行键”“005”)返回给查询器。
基于上述技术方案,本申请实施例中,通过创建索引表,并在索引表中记录HBase表的元数据的属性值、HBase表的行键的对应关系,这样,在接收到Phoenix查询指令后,即使在Phoenix查询指令中未携带HBase表的行键,而是携带HBase表的元数据对应的属性值,则可以通过该属性值查询索引表,得到该HBase表的行键,然后使用HBase表的行键查询该HBase表,从而得到对应的行数据。上述方式不用对整个HBase表进行全表扫描,可以提升查询性能。
在实际应用中,为了避免一个HBase表的内容太多,导致查询复杂,则存储器可以存储多个HBase表,以两个HBase表为例,为区分方便,将一个HBase表称为HBase表,其表标识为第一表标识,如表2为HBase表,第一表标识为表A。另一个HBase表称为该HBase表对应的关联HBase表,关联HBase表的表标识为第二表标识,如表6所示,为关联HBase表的示例,第二表标识为表B。
表6
本应用场景下,在建立HBase表、关联HBase表时,为了将HBase表和关联HBase表中的数据进行关联,则HBase表和关联HBase表需要具有相同的元数据,如表2和表6中,具有相同的元数据“手机号”。而且,在为表2所示的HBase表创建索引表时,该索引表中的索引需要是该元数据,即在采用图2A所示的流程创建索引表时,SparkSQL创建指令携带的元数据可以为“手机号”,这样,索引表记录的是元数据“手机号”对应的属性值与行健的对应关系。
在上述应用场景下,结合图2D所示的流程图,对数据查询过程进行说明。
步骤241,查询器向连接器发送SparkSQL关联查询指令,该SparkSQL关联查询指令携带HBase表的第一表标识、该HBase表对应的关联HBase表的第二表标识。
其中,在该SparkSQL关联查询指令中,可以只携带第一表标识(如表A)和第二表标识(如表B),而未携带元数据、该元数据对应的属性值等内容。
步骤242,连接器在接收到SparkSQL关联查询指令后,根据SparkSQL关联查询指令生成第一Phoenix关联查询指令,并将第一Phoenix关联查询指令发送给存储器。
其中,连接器可以从SparkSQL关联查询指令中解析出第一表标识和第二表标识,然后,连接器可以生成携带该第二表标识的第一Phoenix关联查询指令。
在一个例子中,连接器可以从SparkSQL关联查询指令中解析出两个表标识,为了区分这两个表标识,则可以获取这两个表标识对应的HBase表的数据量,将数据量大的表标识确定为第一表标识,将数据量小的表标识确定为第二表标识。在确定出第二表标识后,就可以生成携带第二表标识的第一Phoenix关联查询指令。
通常情况下,在建立HBase表、关联HBase表时,HBase表的数据量大于关联HBase表的数据量,因此,HBase表的表标识为第一表标识,关联HBase表的表标识为第二表标识。反之,若HBase表的数据量小于关联HBase表的数据量,则HBase表的表标识为第二表标识,关联HBase表的表标识为第一表标识,其处理流程相同,仍然是生成携带第二表标识的第一Phoenix关联查询指令,不再赘述。
总之,是将数据量小的HBase表/关联HBase表的表标识作为第二表标识。
在一个例子中,连接器确定出第二表标识后,还可以判断第二表标识对应的数据量是否小于阈值,如果是,才生成携带第二表标识的第一Phoenix关联查询指令,然后执行后续步骤。如果否,则不再生成第一Phoenix关联查询指令,而是直接从存储器获取该第一表标识对应的HBase表、该第二表标识对应的关联HBase表,然后将HBase表和关联HBase表发送给查询器,对此过程不再赘述。
在一个例子中,针对“连接器获取表标识对应的HBase表的数据量”的过程,连接器可以从存储器获取表标识对应的HBase表的数据量,对此不做限制。
步骤243,存储器在接收到第一Phoenix关联查询指令后,从该第二表标识对应的关联HBase表中,获取所有第一类行数据,并将所有第一类行数据返回给连接器;其中,每个第一类行数据均包括至少一个元数据对应的属性值。
例如,存储器可以从第二表标识“表B”对应的关联HBase表中,获取到所有第一类行数据,即获取表6的所有内容,然后,存储器可以将所有的第一类行数据均返回给连接器。例如,返回的内容可以包括第一类行数据1(行键011、手机号18611111111、身份证号100000000000000000)、第一类行数据2(行键012、手机号18622222222、身份证号200000000000000000),以此类推。
在一个例子中,存储器可以向连接器发送针对所述第一Phoenix关联查询指令的Phoenix响应指令,且该Phoenix响应指令可以携带上述所有第一类行数据。
步骤244,针对每个第一类行数据中的每个元数据执行如下操作:若存储器存在该第一表标识(SparkSQL关联查询指令携带的第一表标识)、该元数据对应的索引表,则连接器生成第二Phoenix关联查询指令,将第二Phoenix关联查询指令发送给存储器,第二Phoenix关联查询指令携带该第一表标识、该元数据、该元数据对应的属性值;存储器接收到第二Phoenix关联查询指令后,从该第一表标识、该元数据对应的索引表中,获取该属性值对应的行键,并从该第一表标识对应的HBase表中,获取该行键对应的第二类行数据,并将该第二类行数据返回给连接器;连接器将该第一类行数据和该第二类行数据进行关联后返回给查询器。
此外,若存储器不存在该第一表标识、该元数据对应的索引表,则连接器可以不再生成第二Phoenix关联查询指令,而是继续进行其它元数据的分析。
例如,针对第一类行数据1的元数据“身份证号”,由于存储器不存在第一表标识(表A)、元数据“身份证号”对应的索引表,因此不生成第二Phoenix关联查询指令。针对第一类行数据1的元数据“手机号”,由于存储器存在第一表标识(表A)、元数据“手机号”对应的索引表,因此,连接器生成第二Phoenix关联查询指令,将第二Phoenix关联查询指令发送给存储器,第二Phoenix关联查询指令携带第一表标识(表A)、元数据“手机号”、该元数据对应的属性值“18611111111”。
存储器接收到第二Phoenix关联查询指令后,第一表标识(表A)、元数据“手机号”对应的索引表如表3所示,即从表3中获取属性值“18611111111”对应的行键“001”,第一表标识(表A)对应的HBase表如表2所示,即从表2中获取行键“001”对应的第二类行数据1“001、张三、北京、28、18611111111”,然后将第二类行数据1返回给连接器。连接器将第一类行数据1和第二类行数据1进行关联,并将关联后的第一类行数据1和第二类行数据1返回给查询器。
经过上述处理,连接器完成第一类行数据1与第二类行数据1的关联,然后,连接器还可以对第一类行数据2、第一类行数据3、第一类行数据4进行关联,其关联过程与第一类行数据1的关联过程类似,在此不再重复赘述。
在上述实施例中,连接器需要判断存储器是否存在该第一表标识、该元数据对应的索引表,具体判断方式可以参见步骤222所示,在此不再赘述。
在上述实施例中,针对“存储器将第二类行数据返回给连接器”的过程,存储器向连接器发送针对第二Phoenix关联查询指令的Phoenix响应指令,该Phoenix响应指令可以携带所述第二类行数据,从而将第二类行数据返回给连接器。
在上述实施例中,针对“连接器将第一类行数据和第二类行数据进行关联后,返回给查询器”的过程,连接器可以向查询器发送针对SparkSQL关联查询指令的SparkSQL响应指令,该SparkSQL响应指令可以携带该第一类行数据和该第二类行数据,从而将该第一类行数据和该第二类行数据返回给查询器。
例如,连接器可以向查询器发送多个SparkSQL响应指令,SparkSQL响应指令1携带第一类行数据1和第二类行数据1,SparkSQL响应指令2携带第一类行数据2和第二类行数据2,以此类推。或者,连接器可以向查询器发送一个SparkSQL响应指令,该SparkSQL响应指令携带第一类行数据1和第二类行数据1的关联关系、第一类行数据2和第二类行数据2的关联关系,以此类推。
经过上述处理,查询器就可以得到HBase表中的第一类行数据与关联HBase表中的第二类行数据的关联关系,不需要查询器关联,节省查询器的工作量。
基于上述技术方案,当关联HBase表的数据量较小时,可以由连接器对第一类行数据和第二类行数据进行关联,并将关联后的第一类行数据和第二类行数据发送给查询器。这样,可以避免将HBase表和关联HBase表返回给查询器,由查询器对HBase表中的第一类行数据与关联HBase表中的第二类行数据进行关联,大幅度提升HBase表和关联HBase表的查询性能,减少IO操作。
基于与上述方法同样的申请构思,本申请实施例中还提出一种服务器,所述服务器包括查询器、连接器和存储器,其结构可以参见图1A所示。其中:
所述查询器,用于向连接器发送SparkSQL查询指令;SparkSQL查询指令携带HBase表的表标识、所述HBase表的元数据、所述元数据对应的属性值;
所述连接器,用于在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,生成第一Phoenix查询指令,并发送给所述存储器;所述第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;
所述存储器,用于在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给所述连接器;索引表用于记录HBase表的元数据的属性值、HBase表的行键的对应关系;
所述连接器,还用于在收到所述行数据后,将所述行数据返回给查询器。
所述查询器,还用于向所述连接器发送SparkSQL创建指令;所述SparkSQL创建指令携带HBase表的表标识、所述HBase表的元数据;
所述连接器,还用于在接收到SparkSQL创建指令后,生成Phoenix创建指令,并发送给所述存储器;Phoenix创建指令携带所述表标识、所述元数据;
所述存储器,还用于在接收到Phoenix创建指令后,从所述表标识对应的HBase表中,获取所述元数据对应的属性值、所述属性值对应的行键,并创建所述表标识、所述元数据对应的索引表,在所述索引表中记录所述属性值与所述行键的对应关系。
所述查询器,还用于向连接器发送SparkSQL存储指令,所述SparkSQL存储指令携带HBase表的表标识、HBase表的至少一个元数据、每个元数据对应的属性值、行键;
所述连接器,还用于在接收到SparkSQL存储指令后,针对每个元数据执行如下操作:若存储器存在所述表标识、所述元数据对应的索引表,则生成第一Phoenix存储指令,并发送给所述存储器,所述第一Phoenix存储指令携带所述表标识、所述元数据、所述元数据对应的属性值、所述属性值对应的行键;
所述存储器,还用于在接收到第一Phoenix存储指令后,在所述表标识、所述元数据对应的索引表中,记录所述属性值与所述行键的对应关系。
所述连接器,还用于在接收到所述SparkSQL存储指令后,生成第二Phoenix存储指令,并发送给所述存储器;所述第二Phoenix存储指令携带所述表标识、所述至少一个元数据、所述每个元数据对应的属性值、所述行键;
所述存储器,还用于在接收到第二Phoenix存储指令后,在所述表标识对应的HBase表中,记录所述行键与每个元数据对应的属性值的对应关系。
所述查询器,还用于向所述连接器发送SparkSQL删除指令;
所述连接器,还用于在接收到SparkSQL删除指令后,根据所述SparkSQL删除指令生成Phoenix删除指令,并发送给所述存储器;
所述存储器,还用于在接收到Phoenix删除指令后,若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据,则删除所述表标识、所述元数据对应的索引表;若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据、所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中删除所述属性值对应的行数据。
所述查询器,还用于向所述连接器发送SparkSQL获取指令;
所述连接器,还用于在接收到SparkSQL获取指令后,根据所述SparkSQL获取指令生成Phoenix获取指令,并发送给所述存储器;
所述存储器,还用于在接收到Phoenix获取指令后,若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据,则通过所述连接器将所述表标识、所述元数据对应的索引表返回给所述查询器;若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据、与所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行数据,并通过所述连接器将所述行数据返回给所述查询器。
所述查询器,还用于向连接器发送SparkSQL关联查询指令;SparkSQL关联查询指令携带HBase表的第一表标识、HBase表对应的关联HBase表的第二表标识;
所述连接器,还用于在接收到SparkSQL关联查询指令后,生成第一Phoenix关联查询指令,并发送给所述存储器;第一Phoenix关联查询指令携带所述第二表标识;
所述存储器,还用于在接收到第一Phoenix关联查询指令后,从所述第二表标识对应的关联HBase表中,获取所有第一类行数据,将所有第一类行数据返回给所述连接器;其中,每个第一类行数据均包括至少一个元数据对应的属性值;
针对每个第一类行数据中的每个元数据,若存储器存在所述第一表标识、所述元数据对应的索引表:所述连接器,还用于生成第二Phoenix关联查询指令,并发送给所述存储器;所述第二Phoenix关联查询指令携带所述第一表标识、所述元数据、所述元数据对应的属性值;所述存储器,还用于在接收到第二Phoenix关联查询指令后,从所述第一表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,并从所述第一表标识对应的HBase表中,获取所述行键对应的第二类行数据,并将所述第二类行数据返回给所述连接器;所述连接器,还用于将所述第一类行数据和所述第二类行数据进行关联后,返回给所述查询器。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (14)
1.一种数据查询方法,其特征在于,所述方法包括:
查询器向连接器发送SparkSQL查询指令;所述SparkSQL查询指令携带HBase表的表标识、所述HBase表的元数据、与所述元数据对应的属性值;
所述连接器在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,则生成第一Phoenix查询指令,并发送给所述存储器;所述第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;
所述存储器在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给所述连接器;其中,索引表用于记录HBase表的元数据的属性值、HBase表的行键的对应关系;
所述连接器在接收到所述行数据后,将所述行数据返回给所述查询器。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述查询器向所述连接器发送SparkSQL创建指令;其中,所述SparkSQL创建指令携带HBase表的表标识、所述HBase表的元数据;
所述连接器在接收到SparkSQL创建指令后,生成Phoenix创建指令,并发送给所述存储器;所述Phoenix创建指令携带所述表标识、所述元数据;
所述存储器接收到Phoenix创建指令后,从所述表标识对应的HBase表中,获取所述元数据对应的属性值、所述属性值对应的行键,创建所述表标识、所述元数据对应的索引表,在索引表中记录所述属性值与所述行键的对应关系。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
查询器向连接器发送SparkSQL存储指令,SparkSQL存储指令携带HBase表的表标识、HBase表的至少一个元数据、每个元数据对应的属性值、行键;
所述连接器在接收到SparkSQL存储指令后,针对每个元数据执行如下操作:若所述存储器存在所述表标识、所述元数据对应的索引表,则生成第一Phoenix存储指令,并发送给所述存储器,所述第一Phoenix存储指令携带所述表标识、所述元数据、所述元数据对应的属性值、所述属性值对应的行键;
所述存储器在接收到第一Phoenix存储指令后,在所述表标识、所述元数据对应的索引表中,记录所述属性值与所述行键的对应关系。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述连接器在接收到所述SparkSQL存储指令后,生成第二Phoenix存储指令,并发送给所述存储器;所述第二Phoenix存储指令携带所述表标识、所述至少一个元数据、所述每个元数据对应的属性值、所述行键;
所述存储器在接收到第二Phoenix存储指令后,在所述表标识对应的HBase表中,记录所述行键与每个元数据对应的属性值的对应关系。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述查询器向所述连接器发送SparkSQL删除指令;
所述连接器在接收到SparkSQL删除指令后,根据所述SparkSQL删除指令生成Phoenix删除指令,并发送给所述存储器;
所述存储器在接收到Phoenix删除指令后,若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据,则删除所述表标识、所述元数据对应的索引表;若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据、所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中删除所述属性值对应的行数据。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述查询器向所述连接器发送SparkSQL获取指令;
所述连接器在接收到SparkSQL获取指令后,根据所述SparkSQL获取指令生成Phoenix获取指令,并发送给所述存储器;
所述存储器在接收到Phoenix获取指令后,若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据,则通过所述连接器将所述表标识、所述元数据对应的索引表返回给所述查询器;若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据、与所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行数据,并通过所述连接器将所述行数据返回给所述查询器。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述查询器向连接器发送SparkSQL关联查询指令;所述SparkSQL关联查询指令携带HBase表的第一表标识、所述HBase表对应的关联HBase表的第二表标识;
所述连接器在接收到SparkSQL关联查询指令后,生成第一Phoenix关联查询指令,并发送给所述存储器;所述第一Phoenix关联查询指令携带所述第二表标识;
所述存储器在接收到第一Phoenix关联查询指令后,从所述第二表标识对应的关联HBase表中,获取所有第一类行数据,并将所有第一类行数据返回给所述连接器;其中,每个第一类行数据均包括至少一个元数据对应的属性值;
针对每个第一类行数据中的每个元数据执行如下操作:若所述存储器存在第一表标识、所述元数据对应的索引表,则所述连接器生成第二Phoenix关联查询指令,并发送给所述存储器;所述第二Phoenix关联查询指令携带所述第一表标识、所述元数据、所述元数据对应的属性值;所述存储器接收到第二Phoenix关联查询指令后,从所述第一表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,并从所述第一表标识对应的HBase表中,获取所述行键对应的第二类行数据,并将所述第二类行数据返回给所述连接器;所述连接器将所述第一类行数据和所述第二类行数据进行关联后,返回给所述查询器。
8.一种服务器,其特征在于,包括:查询器、连接器和存储器;
所述查询器,用于向连接器发送SparkSQL查询指令;SparkSQL查询指令携带HBase表的表标识、所述HBase表的元数据、所述元数据对应的属性值;
所述连接器,用于在接收到SparkSQL查询指令后,若存储器存在所述表标识、所述元数据对应的索引表,生成第一Phoenix查询指令,并发送给所述存储器;所述第一Phoenix查询指令携带所述表标识、所述元数据、所述属性值;
所述存储器,用于在接收到第一Phoenix查询指令后,从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,从所述表标识对应的HBase表中,获取所述行键对应的行数据,将所述行数据返回给所述连接器;索引表用于记录HBase表的元数据的属性值、HBase表的行键的对应关系;
所述连接器,还用于在收到所述行数据后,将所述行数据返回给查询器。
9.根据权利要求8所述的服务器,其特征在于,
所述查询器,还用于向所述连接器发送SparkSQL创建指令;所述SparkSQL创建指令携带HBase表的表标识、所述HBase表的元数据;
所述连接器,还用于在接收到SparkSQL创建指令后,生成Phoenix创建指令,并发送给所述存储器;Phoenix创建指令携带所述表标识、所述元数据;
所述存储器,还用于在接收到Phoenix创建指令后,从所述表标识对应的HBase表中,获取所述元数据对应的属性值、所述属性值对应的行键,并创建所述表标识、所述元数据对应的索引表,在所述索引表中记录所述属性值与所述行键的对应关系。
10.根据权利要求8所述的服务器,其特征在于,所述查询器,还用于向连接器发送SparkSQL存储指令,所述SparkSQL存储指令携带HBase表的表标识、HBase表的至少一个元数据、每个元数据对应的属性值、行键;
所述连接器,还用于在接收到SparkSQL存储指令后,针对每个元数据执行如下操作:若存储器存在所述表标识、所述元数据对应的索引表,则生成第一Phoenix存储指令,并发送给所述存储器,所述第一Phoenix存储指令携带所述表标识、所述元数据、所述元数据对应的属性值、所述属性值对应的行键;
所述存储器,还用于在接收到第一Phoenix存储指令后,在所述表标识、所述元数据对应的索引表中,记录所述属性值与所述行键的对应关系。
11.根据权利要求10所述的服务器,其特征在于,
所述连接器,还用于在接收到所述SparkSQL存储指令后,生成第二Phoenix存储指令,并发送给所述存储器;所述第二Phoenix存储指令携带所述表标识、所述至少一个元数据、所述每个元数据对应的属性值、所述行键;
所述存储器,还用于在接收到第二Phoenix存储指令后,在所述表标识对应的HBase表中,记录所述行键与每个元数据对应的属性值的对应关系。
12.根据权利要求8所述的服务器,其特征在于,
所述查询器,还用于向所述连接器发送SparkSQL删除指令;
所述连接器,还用于在接收到SparkSQL删除指令后,根据所述SparkSQL删除指令生成Phoenix删除指令,并发送给所述存储器;
所述存储器,还用于在接收到Phoenix删除指令后,若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据,则删除所述表标识、所述元数据对应的索引表;若所述Phoenix删除指令携带HBase表的表标识、HBase表的元数据、所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中删除所述属性值对应的行数据。
13.根据权利要求8所述的服务器,其特征在于,
所述查询器,还用于向所述连接器发送SparkSQL获取指令;
所述连接器,还用于在接收到SparkSQL获取指令后,根据所述SparkSQL获取指令生成Phoenix获取指令,并发送给所述存储器;
所述存储器,还用于在接收到Phoenix获取指令后,若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据,则通过所述连接器将所述表标识、所述元数据对应的索引表返回给所述查询器;若所述Phoenix获取指令携带HBase表的表标识、HBase表的元数据、与所述元数据对应的属性值,则从所述表标识、所述元数据对应的索引表中,获取所述属性值对应的行数据,并通过所述连接器将所述行数据返回给所述查询器。
14.根据权利要求8所述的服务器,其特征在于,
所述查询器,还用于向连接器发送SparkSQL关联查询指令;SparkSQL关联查询指令携带HBase表的第一表标识、HBase表对应的关联HBase表的第二表标识;
所述连接器,还用于在接收到SparkSQL关联查询指令后,生成第一Phoenix关联查询指令,并发送给所述存储器;第一Phoenix关联查询指令携带所述第二表标识;
所述存储器,还用于在接收到第一Phoenix关联查询指令后,从所述第二表标识对应的关联HBase表中,获取所有第一类行数据,将所有第一类行数据返回给所述连接器;其中,每个第一类行数据均包括至少一个元数据对应的属性值;
针对每个第一类行数据中的每个元数据,若存储器存在所述第一表标识、所述元数据对应的索引表:所述连接器,还用于生成第二Phoenix关联查询指令,并发送给所述存储器;所述第二Phoenix关联查询指令携带所述第一表标识、所述元数据、所述元数据对应的属性值;所述存储器,还用于在接收到第二Phoenix关联查询指令后,从所述第一表标识、所述元数据对应的索引表中,获取所述属性值对应的行键,并从所述第一表标识对应的HBase表中,获取所述行键对应的第二类行数据,并将所述第二类行数据返回给所述连接器;所述连接器,还用于将所述第一类行数据和所述第二类行数据进行关联后,返回给所述查询器。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711235855.2A CN109101516B (zh) | 2017-11-30 | 2017-11-30 | 一种数据查询方法和服务器 |
PCT/CN2018/118249 WO2019105420A1 (zh) | 2017-11-30 | 2018-11-29 | 数据查询 |
JP2020544099A JP7018516B2 (ja) | 2017-11-30 | 2018-11-29 | データクエリ |
EP18884738.8A EP3683697A4 (en) | 2017-11-30 | 2018-11-29 | DATA INQUIRY |
US16/766,231 US11269881B2 (en) | 2017-11-30 | 2018-11-29 | Data query |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711235855.2A CN109101516B (zh) | 2017-11-30 | 2017-11-30 | 一种数据查询方法和服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109101516A true CN109101516A (zh) | 2018-12-28 |
CN109101516B CN109101516B (zh) | 2019-09-17 |
Family
ID=64796513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711235855.2A Active CN109101516B (zh) | 2017-11-30 | 2017-11-30 | 一种数据查询方法和服务器 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11269881B2 (zh) |
EP (1) | EP3683697A4 (zh) |
JP (1) | JP7018516B2 (zh) |
CN (1) | CN109101516B (zh) |
WO (1) | WO2019105420A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083597A (zh) * | 2019-03-16 | 2019-08-02 | 平安普惠企业管理有限公司 | 命令查询方法、装置、计算机设备和存储介质 |
CN110888929A (zh) * | 2019-12-06 | 2020-03-17 | 秒针信息技术有限公司 | 数据处理方法、装置、数据节点及存储介质 |
CN111125216A (zh) * | 2019-12-10 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据导入Phoenix的方法及装置 |
CN111125090A (zh) * | 2019-11-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据存取方法及装置 |
CN113656397A (zh) * | 2021-07-02 | 2021-11-16 | 阿里巴巴新加坡控股有限公司 | 一种针对时序数据的索引构建及查询的方法、装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457346B (zh) * | 2019-07-05 | 2024-04-30 | 中国平安财产保险股份有限公司 | 数据查询方法、装置及计算机可读存储介质 |
CN111104426B8 (zh) * | 2019-11-22 | 2024-04-23 | 北京傲速科技有限公司 | 一种数据查询方法及系统 |
US11386089B2 (en) | 2020-01-13 | 2022-07-12 | The Toronto-Dominion Bank | Scan optimization of column oriented storage |
CN113434580B (zh) * | 2020-03-23 | 2024-06-21 | 北京国双科技有限公司 | Phoenix数据库访问方法、装置、设备及介质 |
CN112800073B (zh) * | 2021-01-27 | 2023-03-28 | 浪潮云信息技术股份公司 | 一种基于NiFi更新Delta Lake的方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350028A (zh) * | 2008-07-10 | 2009-01-21 | 西安中电商务信息技术有限公司 | 一种基于SQL结构化查询语言的XML数据XPath查询方法 |
CN101788992A (zh) * | 2009-05-06 | 2010-07-28 | 厦门东南融通系统工程有限公司 | 一种数据库查询语句的转换方法和转换系统 |
CN102737132A (zh) * | 2012-06-25 | 2012-10-17 | 天津神舟通用数据技术有限公司 | 基于数据库行列混合存储的多规则复合压缩方法 |
CN103930887A (zh) * | 2011-11-18 | 2014-07-16 | 惠普发展公司,有限责任合伙企业 | 使用行-列数据存储的查询汇总生成 |
CN104750727A (zh) * | 2013-12-30 | 2015-07-01 | 亿阳信通股份有限公司 | 一种列式内存存储查询装置及列式内存存储查询方法 |
CN105589969A (zh) * | 2015-12-23 | 2016-05-18 | 浙江大华技术股份有限公司 | 一种数据处理方法及装置 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
CN107133342A (zh) * | 2017-05-16 | 2017-09-05 | 广州舜飞信息科技有限公司 | 一种IndexR实时数据分析库 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8489773B1 (en) * | 2008-06-06 | 2013-07-16 | Amdocs Software Systems Limited | System, method, and computer program for sending a response to a client based on a replication message received from a master server |
JP2010224824A (ja) * | 2009-03-23 | 2010-10-07 | Toshiba Corp | 情報処理装置 |
US9477731B2 (en) * | 2013-10-01 | 2016-10-25 | Cloudera, Inc. | Background format optimization for enhanced SQL-like queries in Hadoop |
US9779150B1 (en) * | 2014-08-15 | 2017-10-03 | Tableau Software, Inc. | Systems and methods for filtering data used in data visualizations that use relationships |
US20160104090A1 (en) * | 2014-10-09 | 2016-04-14 | Splunk Inc. | State determination using per-entity thresholds |
CN105354255B (zh) | 2015-10-21 | 2018-01-02 | 华为技术有限公司 | 数据查询方法和装置 |
US10169601B2 (en) | 2015-11-18 | 2019-01-01 | American Express Travel Related Services Company, Inc. | System and method for reading and writing to big data storage formats |
CN107122437B (zh) | 2017-04-19 | 2020-08-04 | 高新兴科技集团股份有限公司 | 一种支持多条件检索和实时分析的大数据处理方法 |
-
2017
- 2017-11-30 CN CN201711235855.2A patent/CN109101516B/zh active Active
-
2018
- 2018-11-29 JP JP2020544099A patent/JP7018516B2/ja active Active
- 2018-11-29 US US16/766,231 patent/US11269881B2/en active Active
- 2018-11-29 EP EP18884738.8A patent/EP3683697A4/en active Pending
- 2018-11-29 WO PCT/CN2018/118249 patent/WO2019105420A1/zh unknown
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350028A (zh) * | 2008-07-10 | 2009-01-21 | 西安中电商务信息技术有限公司 | 一种基于SQL结构化查询语言的XML数据XPath查询方法 |
CN101788992A (zh) * | 2009-05-06 | 2010-07-28 | 厦门东南融通系统工程有限公司 | 一种数据库查询语句的转换方法和转换系统 |
CN103930887A (zh) * | 2011-11-18 | 2014-07-16 | 惠普发展公司,有限责任合伙企业 | 使用行-列数据存储的查询汇总生成 |
CN102737132A (zh) * | 2012-06-25 | 2012-10-17 | 天津神舟通用数据技术有限公司 | 基于数据库行列混合存储的多规则复合压缩方法 |
CN104750727A (zh) * | 2013-12-30 | 2015-07-01 | 亿阳信通股份有限公司 | 一种列式内存存储查询装置及列式内存存储查询方法 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
CN105589969A (zh) * | 2015-12-23 | 2016-05-18 | 浙江大华技术股份有限公司 | 一种数据处理方法及装置 |
CN107133342A (zh) * | 2017-05-16 | 2017-09-05 | 广州舜飞信息科技有限公司 | 一种IndexR实时数据分析库 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083597A (zh) * | 2019-03-16 | 2019-08-02 | 平安普惠企业管理有限公司 | 命令查询方法、装置、计算机设备和存储介质 |
CN111125090A (zh) * | 2019-11-12 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据存取方法及装置 |
CN111125090B (zh) * | 2019-11-12 | 2023-05-30 | 中盈优创资讯科技有限公司 | 数据存取方法及装置 |
CN110888929A (zh) * | 2019-12-06 | 2020-03-17 | 秒针信息技术有限公司 | 数据处理方法、装置、数据节点及存储介质 |
CN110888929B (zh) * | 2019-12-06 | 2022-03-29 | 秒针信息技术有限公司 | 数据处理方法、装置、数据节点及存储介质 |
CN111125216A (zh) * | 2019-12-10 | 2020-05-08 | 中盈优创资讯科技有限公司 | 数据导入Phoenix的方法及装置 |
CN111125216B (zh) * | 2019-12-10 | 2024-03-12 | 中盈优创资讯科技有限公司 | 数据导入Phoenix的方法及装置 |
CN113656397A (zh) * | 2021-07-02 | 2021-11-16 | 阿里巴巴新加坡控股有限公司 | 一种针对时序数据的索引构建及查询的方法、装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3683697A4 (en) | 2020-07-29 |
EP3683697A1 (en) | 2020-07-22 |
JP7018516B2 (ja) | 2022-02-10 |
CN109101516B (zh) | 2019-09-17 |
WO2019105420A1 (zh) | 2019-06-06 |
US11269881B2 (en) | 2022-03-08 |
US20200372028A1 (en) | 2020-11-26 |
JP2021502655A (ja) | 2021-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109101516B (zh) | 一种数据查询方法和服务器 | |
Holzschuher et al. | Performance of graph query languages: comparison of cypher, gremlin and native access in neo4j | |
JP4453983B2 (ja) | データベースへのクエリ送信方法およびクエリ送信システム | |
US9753960B1 (en) | System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria | |
US8078628B2 (en) | Streaming faceted search | |
EP3702932A1 (en) | Method, apparatus, device and medium for storing and querying data | |
KR101475335B1 (ko) | 데이터베이스 검색에 있어 조회 향상 | |
CN108255915B (zh) | 一种文件管理方法、装置及机器可读存储介质 | |
CN102902763B (zh) | 关联、检索信息处理数据和处理信息任务的方法及装置 | |
CN108932286B (zh) | 一种数据查询方法及装置 | |
CN109740129B (zh) | 基于区块链的报表生成方法、装置、设备及可读存储介质 | |
CN110309174A (zh) | 一种数据查询方法、装置和服务器 | |
CN104408044A (zh) | 一种文件存取方法和系统 | |
CN103605778A (zh) | 一种视频文件的定位方法、装置及系统 | |
CN102929958A (zh) | 元数据的处理方法,代理、转发设备,服务器及计算系统 | |
CN111723161A (zh) | 一种数据处理方法、装置及设备 | |
CN112970011B (zh) | 记录查询优化中的谱系 | |
KR101614890B1 (ko) | 멀티 테넌시 이력 생성 방법, 이를 수행하는 멀티 테넌시 이력 생성 서버 및 이를 저장하는 기록매체 | |
JP2018129074A5 (ja) | ストレージシステム、およびストレージシステムの制御方法 | |
CN108255955B (zh) | 一种数据处理方法及装置 | |
JPWO2014010038A1 (ja) | 情報処理システム | |
CN104615459A (zh) | 一种MoCA设备参数配置方法及装置 | |
CN102193988A (zh) | 一种图形数据库节点数据的检索方法及系统 | |
US8527478B1 (en) | Handling bulk and incremental updates while maintaining consistency | |
CN106250501A (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 |