一种基于Presto和Elasticsearch的大数据查询优化方法与流程

文档序号:17641661发布日期:2019-05-11 00:42阅读:1363来源:国知局
本发明涉及大数据的快速查询方法,特别提供了一种基于presto和elasticsearch的大数据查询优化方法。
背景技术
::elasticsearch是一个建立在全文搜索引擎apachelucenetm基础上的实时分析的分布式搜索引擎,它使用lucene作为核心来实现所有索引和搜索的功能,使得每个文档的内容都可以被索引、搜索、排序、过滤。但elasticsearch缺乏传统的sql语法支持,开发人员使用较难,以关系型数据库为基础的系统其数据迁移、对接工作也不易进行。而presto可为elasticsearch提供基本的sql语法支持,但其基于内存的查询机制也需要把几乎全量的目标数据预读到集群内存中,而最终用户所需要的数据只是海量数据中的几十条甚至几条,过程中消耗大量的服务器资源和时间用于多余数据的读取和过虑,导致查询效率大幅度下降。技术实现要素:本发明的目的在于提供一种基于presto和elasticsearch的大数据查询优化方法,其使用presto集群进行sql的接收和解析,利用elasticsearch快速查询和过滤的特性,在elasticsearch集群中预先过滤部分数据,减少多余数据的读取,实现数据的快速查询。为实现上述目的,本发明采用的技术方案是:一种基于presto和elasticsearch的大数据查询优化方法,所述优化方法将被查询的数据保存在elasticsearch集群的索引中,当用户向presto集群提交sql查询请求时,执行以下步骤:步骤1、presto集群接收并解析sql查询请求并生成相应的抽象语法树,根据该语法树生成查询执行计划树,该执行计划树为自上而下没有分支的结构;其中,sql查询请求包含where子句、orderby子句、limit子句中的一个或多个;步骤2、遍历分析执行计划树中的各个节点,具体如下:首先,找出执行计划树elasticsearch支持的节点,其名称和对应的sql操作分别为:节点名称功能对应sql操作filternode筛选数据where子句topnnode排序取前n行orderby子句+limitlimitnode汇总取前n行limit子句tablescannode读取表中所有数据单一的select查询然后,在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子句转换为elasticsearchquerybuilder中的过滤条件,而orderby和limit子句则转换为querybuilder中的排序和数据限制条件;步骤4、将步骤3中生成的查询请求elasticsearchquerybuilder发往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子句、orderby子句、limit子句中的一个或多个,例如selectid,namefromemployeewhereid>3orderbyidlimit100,10。步骤2、遍历分析执行计划树中的各个节点,具体如下:首先,找出执行计划树elasticsearch支持的节点,其名称和对应的sql操作分别为:节点名称功能对应sql操作filternode筛选数据where子句topnnode排序取前n行orderby子句+limitlimitnode汇总取前n行limit子句tablescannode读取表中所有数据单一的select查询然后,在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子句转换为elasticsearchquerybuilder中的过滤条件,而orderby和limit子句则转换为querybuilder中的排序和数据限制条件;步骤4、将步骤3中生成的查询请求elasticsearchquerybuilder发往elasticsearch集群,由于elasticsearch本身支持条件过滤和排序,因此将查询和排序条件转换成elasticsearch请求后由elasticsearch集群进行查询和预先过滤,再将得到的结果返回给presto集群。步骤5、presto集群汇总各个节点返回的数据,生成最终结果给用户。本发明将所有被查询数据保存在elasticsearch集群中,然后通过presto集群接收并解析sql请求生成相应的抽象语法树和查询计划,通过分析抽象语法树,生成elasticsearch相应的查询请求,在elasticsearch支持的前提下,尽可能将查询条件转换为elasticsearch可识别的到查询请求,并修改执行计划,将查询条件下发到elasticsearch中,由elasticsearch预先过滤大部分数据,返回的数据已基本符合查询条件要求,再由presto统一汇总,最终得到结果数据。由于presto对接elasticsearch中的一个索引进行查询时,需要将索引中的所有数据全部读出(如排序,聚合等),而elasticsearch中一个索引往往保存着大量数据,将所有数据全部读出耗时非常长,服务器资源消耗非常大,且实际被采用的数据可能只有几百条甚至几十条,造成很大的时间和资源的浪费。而本发明利用elasticsearch快速查询和过滤的特性,在elasticsearch集群中预先过滤部分数据,减少多余数据的读取,实现数据的快速查询。以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1