CN109739882A - 一种基于Presto和Elasticsearch的大数据查询优化方法 - Google Patents
一种基于Presto和Elasticsearch的大数据查询优化方法 Download PDFInfo
- Publication number
- CN109739882A CN109739882A CN201910010085.4A CN201910010085A CN109739882A CN 109739882 A CN109739882 A CN 109739882A CN 201910010085 A CN201910010085 A CN 201910010085A CN 109739882 A CN109739882 A CN 109739882A
- Authority
- CN
- China
- Prior art keywords
- elasticsearch
- clause
- data
- query
- presto
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Presto和Elasticsearch的大数据查询优化方法,其将所有被查询数据保存在Elasticsearch集群中,然后通过Presto集群接收并解析SQL请求生成相应的抽象语法树和执行计划,将查询条件转换成Elasticsearch查询请求并下发到Elasticsearch中进行预查询。本发明利用Presto SQL解析和Elasticsearch快速查询的优势,在取回数据前尽可能预先过滤部分数据,大幅减少多余数据的读取,以提高条件查询的性能。
Description
技术领域
本发明涉及大数据的快速查询方法,特别提供了一种基于Presto和Elasticsearch的大数据查询优化方法。
背景技术
Elasticsearch是一个建立在全文搜索引擎Apache LuceneTM基础上的实时分析的分布式搜索引擎,它使用Lucene作为核心来实现所有索引和搜索的功能,使得每个文档的内容都可以被索引、搜索、排序、过滤。但elasticsearch缺乏传统的SQL语法支持,开发人员使用较难,以关系型数据库为基础的***其数据迁移、对接工作也不易进行。而Presto可为Elasticsearch提供基本的SQL语法支持,但其基于内存的查询机制也需要把几乎全量的目标数据预读到集群内存中,而最终用户所需要的数据只是海量数据中的几十条甚至几条,过程中消耗大量的服务器资源和时间用于多余数据的读取和过虑,导致查询效率大幅度下降。
发明内容
本发明的目的在于提供一种基于Presto和Elasticsearch的大数据查询优化方法,其使用Presto集群进行SQL的接收和解析,利用Elasticsearch快速查询和过滤的特性,在Elasticsearch集群中预先过滤部分数据,减少多余数据的读取,实现数据的快速查询。
为实现上述目的,本发明采用的技术方案是:
一种基于Presto和Elasticsearch的大数据查询优化方法,所述优化方法将被查询的数据保存在Elasticsearch集群的索引中,当用户向Presto集群提交SQL查询请求时,执行以下步骤:
步骤1、Presto集群接收并解析SQL查询请求并生成相应的抽象语法树,根据该语法树生成查询执行计划树,该执行计划树为自上而下没有分支的结构;
其中,SQL查询请求包含where子句、order by子句、limit子句中的一个或多个;
步骤2、遍历分析执行计划树中的各个节点,具体如下:
首先,找出执行计划树Elasticsearch支持的节点,其名称和对应的SQL操作分别为:
节点名称 | 功能 | 对应SQL操作 |
FilterNode | 筛选数据 | where子句 |
TopNNode | 排序取前N行 | order by子句+limit |
LimitNode | 汇总取前N行 | limit子句 |
TableScanNode | 读取表中所有数据 | 单一的select查询 |
然后,在TableScanNode中添加一个Query参数,用于下发查询条件;
最后,遍历查询计划树中的所有节点,在遍历过程中根据节点类型读取相应条件下发:
当发现FilterNode时,表明该SQL查询请求中包含where子句,则通过FilterNode的过滤条件,获取where子句内容,将其传递给首节点TableScanNode中的Query;
当发现TopNNode时,表明该SQL查询请求中同时包含order by和limit子句,则通过TopNNode中的count、offset、orderBy获取order by和limit子句内容,将其传递给首节点TableScanNode中的Query;
当发现LimitNode时,表明该SQL为limit子句单独使用,则通过LimitNode中的count、offset获取翻页参数,将其传递给首节点TableScanNode中的Query;
当发现TableScanNode时,说明执行计划的所有节点已遍历完毕,TableScanNode中的Query已包含所有查询条件;
步骤3、Presto集群从TableScanNode中获取Query参数,根据参数内容生成相应的查询请求参数,其中,where子句转换为Elasticsearch QueryBuilder中的过滤条件,而order by和limit子句则转换为QueryBuilder中的排序和数据限制条件;
步骤4、将步骤3中生成的查询请求Elasticsearch QueryBuilder发往Elasticsearch集群,由Elasticsearch集群进行查询和预先过滤,再将得到的结果返回给Presto集群;
步骤5、Presto集群汇总各个节点返回的数据,生成最终结果给用户。
采用上述方案后,本发明将所有被查询数据保存在Elasticsearch集群中,然后通过Presto集群接收并解析SQL请求生成相应的抽象语法树和查询计划,通过分析抽象语法树,生成Elasticsearch相应的查询请求,在Elasticsearch支持的前提下,尽可能将查询条件转换为Elasticsearch可识别的到查询请求,并修改执行计划,将查询条件下发到Elasticsearch中,由Elasticsearch预先过滤大部分数据,返回的数据已基本符合查询条件要求,再由Presto统一汇总,最终得到结果数据。而本发明利用Elasticsearch快速查询和过滤的特性,在Elasticsearch集群中预先过滤部分数据,减少多余数据的读取,实现数据的快速查询。
附图说明
图1为本发明的整体***架构;
图2为Presto集群中的SQL查询所生成的查询执行计划树和处理流程。
具体实施方式
本发明揭示了一种基于Presto和Elasticsearch的大数据查询优化方法,如图1所示,其所需的***中包括Presto集群和Elasticsearch集群,用户可以通过命令行工具、jdbc客户端或图形界面开发工具等多种方式向Presto集群提交SQL查询请求,由Presto集群接收并解析SQL请求,然后向Elasticsearch集群下发查询请求并读取数据。
本发明之基于Presto和Elasticsearch的大数据查询优化方法将被查询的数据保存在Elasticsearch集群的索引中,如图2所示,当用户向Presto集群提交SQL查询请求时,执行以下步骤:
步骤1、Presto集群接收并解析SQL查询请求并生成相应的抽象语法树,根据该语法树生成查询执行计划树,该执行计划树为自上而下没有分支的结构。
其中,SQL查询请求包含where子句、order by子句、limit子句中的一个或多个,例如
SELECT ID,NAME FROM EMPLOYEE WHERE ID>3 ORDER BY ID LIMIT 100,10。
步骤2、遍历分析执行计划树中的各个节点,具体如下:
首先,找出执行计划树Elasticsearch支持的节点,其名称和对应的SQL操作分别为:
节点名称 | 功能 | 对应SQL操作 |
FilterNode | 筛选数据 | where子句 |
TopNNode | 排序取前N行 | order by子句+limit |
LimitNode | 汇总取前N行 | limit子句 |
TableScanNode | 读取表中所有数据 | 单一的select查询 |
然后,在TableScanNode中添加一个Query参数,用于下发查询条件;
最后,遍历查询计划树中的所有节点,在遍历过程中根据节点类型读取相应条件下发:
当发现FilterNode时,表明该SQL查询请求中包含where子句,则通过FilterNode的过滤条件,获取where子句内容,将其传递给首节点TableScanNode中的Query;
当发现TopNNode时,表明该SQL查询请求中同时包含order by和limit子句,则通过TopNNode中的count、offset、orderBy获取order by和limit子句内容,将其传递给首节点TableScanNode中的Query;
当发现LimitNode时,表明该SQL为limit子句单独使用,则通过LimitNode中的count、offset获取翻页参数,将其传递给首节点TableScanNode中的Query;
当发现TableScanNode时,说明执行计划的所有节点已遍历完毕,TableScanNode中的Query已包含所有查询条件。
步骤3、Presto集群从TableScanNode中获取Query参数,根据参数内容生成相应的查询请求参数,其中,where子句转换为Elasticsearch QueryBuilder中的过滤条件,而order by和limit子句则转换为QueryBuilder中的排序和数据限制条件;
步骤4、将步骤3中生成的查询请求Elasticsearch QueryBuilder发往Elasticsearch集群,由于Elasticsearch本身支持条件过滤和排序,因此将查询和排序条件转换成Elasticsearch请求后由Elasticsearch集群进行查询和预先过滤,再将得到的结果返回给Presto集群。
步骤5、Presto集群汇总各个节点返回的数据,生成最终结果给用户。
本发明将所有被查询数据保存在Elasticsearch集群中,然后通过Presto集群接收并解析SQL请求生成相应的抽象语法树和查询计划,通过分析抽象语法树,生成Elasticsearch相应的查询请求,在Elasticsearch支持的前提下,尽可能将查询条件转换为Elasticsearch可识别的到查询请求,并修改执行计划,将查询条件下发到Elasticsearch中,由Elasticsearch预先过滤大部分数据,返回的数据已基本符合查询条件要求,再由Presto统一汇总,最终得到结果数据。由于Presto对接Elasticsearch中的一个索引进行查询时,需要将索引中的所有数据全部读出(如排序,聚合等),而Elasticsearch中一个索引往往保存着大量数据,将所有数据全部读出耗时非常长,服务器资源消耗非常大,且实际被采用的数据可能只有几百条甚至几十条,造成很大的时间和资源的浪费。而本发明利用Elasticsearch快速查询和过滤的特性,在Elasticsearch集群中预先过滤部分数据,减少多余数据的读取,实现数据的快速查询。
以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (1)
1.一种基于Presto和Elasticsearch的大数据查询优化方法,其特征在于:所述优化方法将被查询的数据保存在Elasticsearch集群的索引中,当用户向Presto集群提交SQL查询请求时,执行以下步骤:
步骤1、Presto集群接收并解析SQL查询请求并生成相应的抽象语法树,根据该语法树生成查询执行计划树,该执行计划树为自上而下没有分支的结构;
其中,SQL查询请求包含where子句、orderby子句、limit子句中的一个或多个;
步骤2、遍历分析执行计划树中的各个节点,具体如下:
首先,找出执行计划树Elasticsearch支持的节点,其名称和对应的SQL操作分别为:
然后,在TableScanNode中添加一个Query参数,用于下发查询条件;
最后,遍历查询计划树中的所有节点,在遍历过程中根据节点类型读取相应条件下发:
当发现FilterNode时,表明该SQL查询请求中包含where子句,则通过FilterNode的过滤条件,获取where子句内容,将其传递给首节点TableScanNode中的Query;
当发现TopNNode时,表明该SQL查询请求中同时包含orderby和limit子句,则通过TopNNode中的count、offset、orderBy获取orderby和limit子句内容,将其传递给首节点TableScanNode中的Query;
当发现LimitNode时,表明该SQL为limit子句单独使用,则通过LimitNode中的count、offset获取翻页参数,将其传递给首节点TableScanNode中的Query;
当发现TableScanNode时,说明执行计划的所有节点已遍历完毕,TableScanNode中的Query已包含所有查询条件;
步骤3、Presto集群从TableScanNode中获取Query参数,根据参数内容生成相应的查询请求参数,其中,where子句转换为Elasticsearch QueryBuilder中的过滤条件,而orderby和limit子句则转换为QueryBuilder中的排序和数据限制条件;
步骤4、将步骤3中生成的查询请求Elasticsearch QueryBuilder发往Elasticsearch集群,由Elasticsearch集群进行查询和预先过滤,再将得到的结果返回给Presto集群;
步骤5、Presto集群汇总各个节点返回的数据,生成最终结果给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910010085.4A CN109739882B (zh) | 2019-01-04 | 2019-01-04 | 一种基于Presto和Elasticsearch的大数据查询优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910010085.4A CN109739882B (zh) | 2019-01-04 | 2019-01-04 | 一种基于Presto和Elasticsearch的大数据查询优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739882A true CN109739882A (zh) | 2019-05-10 |
CN109739882B CN109739882B (zh) | 2022-06-10 |
Family
ID=66363435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910010085.4A Active CN109739882B (zh) | 2019-01-04 | 2019-01-04 | 一种基于Presto和Elasticsearch的大数据查询优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739882B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399386A (zh) * | 2019-07-15 | 2019-11-01 | 南威软件股份有限公司 | 一种基于Presto的SQL UPDATE方法及控制*** |
CN112800104A (zh) * | 2020-12-08 | 2021-05-14 | 江苏苏宁云计算有限公司 | Es查询请求链路优化的方法及装置 |
WO2022052639A1 (zh) * | 2020-09-10 | 2022-03-17 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN114500543A (zh) * | 2022-01-13 | 2022-05-13 | 徐工汉云技术股份有限公司 | 一种基于分布式的弹性边缘采集***及其应用方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016025924A1 (en) * | 2014-08-14 | 2016-02-18 | Qubole, Inc. | Systems and methods for auto-scaling a big data system |
US20160203548A1 (en) * | 2007-02-09 | 2016-07-14 | Xcira, Inc. | Integrated auctioning environment platform |
CN106528797A (zh) * | 2016-11-10 | 2017-03-22 | 上海轻维软件有限公司 | 基于Elasticsearch的DSL查询方法 |
CN106649630A (zh) * | 2016-12-07 | 2017-05-10 | 乐视控股(北京)有限公司 | 数据查询方法及装置 |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及*** |
CN107133267A (zh) * | 2017-04-01 | 2017-09-05 | 北京京东尚科信息技术有限公司 | 查询elasticsearch集群的方法、装置、电子设备和可读存储介质 |
CN107729428A (zh) * | 2017-09-28 | 2018-02-23 | 南威软件股份有限公司 | 一种基于Presto和Elasticsearch的SQL查询方法 |
CN107748766A (zh) * | 2017-09-28 | 2018-03-02 | 南威软件股份有限公司 | 一种基于Presto和Elasticsearch的大数据快速查询方法 |
-
2019
- 2019-01-04 CN CN201910010085.4A patent/CN109739882B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160203548A1 (en) * | 2007-02-09 | 2016-07-14 | Xcira, Inc. | Integrated auctioning environment platform |
WO2016025924A1 (en) * | 2014-08-14 | 2016-02-18 | Qubole, Inc. | Systems and methods for auto-scaling a big data system |
CN106528797A (zh) * | 2016-11-10 | 2017-03-22 | 上海轻维软件有限公司 | 基于Elasticsearch的DSL查询方法 |
CN106649630A (zh) * | 2016-12-07 | 2017-05-10 | 乐视控股(北京)有限公司 | 数据查询方法及装置 |
CN106934062A (zh) * | 2017-03-28 | 2017-07-07 | 广东工业大学 | 一种查询elasticsearch的实现方法及*** |
CN107133267A (zh) * | 2017-04-01 | 2017-09-05 | 北京京东尚科信息技术有限公司 | 查询elasticsearch集群的方法、装置、电子设备和可读存储介质 |
CN107729428A (zh) * | 2017-09-28 | 2018-02-23 | 南威软件股份有限公司 | 一种基于Presto和Elasticsearch的SQL查询方法 |
CN107748766A (zh) * | 2017-09-28 | 2018-03-02 | 南威软件股份有限公司 | 一种基于Presto和Elasticsearch的大数据快速查询方法 |
Non-Patent Citations (2)
Title |
---|
DEQUAN CHEN, YI CHEN, BRIAN N. BROWNLOW, PRADIP P. KANJAMALA, CA: "Real-Time or Near Real-Time Persisting Daily", 《IEEE TRANSACTIONS ON INDUSTRIAL INFORMATICS》 * |
胡庆宝等: "基于Elasticsearch的实时集群日志采集和分析***实现", 《科研信息化技术与应用》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399386A (zh) * | 2019-07-15 | 2019-11-01 | 南威软件股份有限公司 | 一种基于Presto的SQL UPDATE方法及控制*** |
CN110399386B (zh) * | 2019-07-15 | 2022-05-10 | 南威软件股份有限公司 | 一种基于Presto的SQL UPDATE方法及控制*** |
WO2022052639A1 (zh) * | 2020-09-10 | 2022-03-17 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN112800104A (zh) * | 2020-12-08 | 2021-05-14 | 江苏苏宁云计算有限公司 | Es查询请求链路优化的方法及装置 |
CN114500543A (zh) * | 2022-01-13 | 2022-05-13 | 徐工汉云技术股份有限公司 | 一种基于分布式的弹性边缘采集***及其应用方法 |
CN114500543B (zh) * | 2022-01-13 | 2024-01-23 | 徐工汉云技术股份有限公司 | 一种基于分布式的弹性边缘采集***及其应用方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109739882B (zh) | 2022-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103064875B (zh) | 一种服务化空间数据分布式查询方法 | |
CN109739882A (zh) | 一种基于Presto和Elasticsearch的大数据查询优化方法 | |
CN111382226B (zh) | 一种数据库查询检索方法、装置和电子设备 | |
CN104123374B (zh) | 分布式数据库中聚合查询的方法及装置 | |
KR101432700B1 (ko) | 쿼리의 최적화를 위한 방법 | |
US20140310302A1 (en) | Storing and querying graph data in a key-value store | |
CA2429910A1 (en) | System and method of query transformation | |
US20120117054A1 (en) | Query Analysis in a Database | |
US20110072008A1 (en) | Query Optimization with Awareness of Limited Resource Usage | |
CN106777108A (zh) | 一种基于混合存储架构的数据查询方法和装置 | |
WO2007098320A2 (en) | Apparatus and method for federated querying of unstructured data | |
CN102262640A (zh) | 一种全文检索文档数据库的方法及装置 | |
US20110302187A1 (en) | Schema definition generating device and schema definition generating method | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及*** | |
US11461333B2 (en) | Vertical union of feature-based datasets | |
Giannakouris et al. | MuSQLE: Distributed SQL query execution over multiple engine environments | |
CN112162983A (zh) | 数据库索引建议处理方法、装置、介质和电子设备 | |
CN109325029A (zh) | 基于稀疏矩阵的rdf数据存储和查询方法 | |
CN106599052A (zh) | 一种基于ApacheKylin的数据查询***及其方法 | |
CN109815254A (zh) | 基于大数据的跨地域任务调度方法及*** | |
CN104714974A (zh) | 一种查询语句解析与再处理的方法和装置 | |
Sun et al. | Dima: A distributed in-memory similarity-based query processing system | |
CN106815353A (zh) | 一种数据查询的方法及设备 | |
CN111125199B (zh) | 一种数据库访问方法、装置及电子设备 | |
CN107729428A (zh) | 一种基于Presto和Elasticsearch的SQL查询方法 |
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 |