一种基于sql的查询方法及系统与流程

文档序号:11155251阅读:873来源:国知局
一种基于sql的查询方法及系统与制造工艺

本发明涉及大数据处理的技术领域,尤其涉及一种基于sql的查询方法,以及基于sql的查询系统。



背景技术:

在大数据领域,为了降低集群使用的门槛,通常使用类sql语言(结构化查询语言(Structured Query Language),简称sql,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名)来进行大数据运算,目前支持sql语言的主流查询引擎有hive(Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能),presto(presto是一个开源的分布式sql查询引擎,适用于交互式分析查询,数据量支持GB到PB字节)与spark(spark是UC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法)等。

一般情况下,需要把sql语句提交到确定查询引擎上,即需要人工来指定需要使用的查询引擎,在提交语句的那一刻就决定了此语句应该在hive查询引擎上执行,还是在presto或者spark查询引擎上执行,这三个运算平台完全独立。

每一个sql语句的计算复杂度是不同的,它取决于sql将要计算的数据量的大小以及sql本身的逻辑复杂度,在实际工作中,sql任务大多数为例行任务,例行化之后,随着数据量的增长,sql的复杂度是随之快速增长,而sql的执行引擎并不能动态地调整,这样就会带来执行效率的降低,甚至任务执行的失败。



技术实现要素:

为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种基于sql的查询方法,其能够提升查询效率,同时保证查询稳定性。

本发明的技术方案是:这种基于sql的查询方法,该方法包括以下步骤:

(1)获取到sql语句的查询计划,进而找出参与运算的数据量,同时找到计算方法;

(2)根据参与运算的数据量及计算方法,选择采用hive、presto、spark中的一种作为查询引擎。

本发明通过对sql语句运算复杂度的自动化评估,再根据各计算引擎擅长的计算场景,就可以智能选择计算引擎,以达到提升运算效率的目的,同时保证了查询稳定性。

还提供了一种基于sql的查询系统,该系统包括:

数据量及计算模式识别模块,其配置来获取到sql语句的查询计划,进而找出参与运算的数据量,同时找到计算方法;

查询引擎智能匹配模块,其配置来根据参与运算的数据量及计算方法,选择采用hive、presto、spark中的一种作为查询引擎。

附图说明

图1所示为根据本发明的基于sql的查询方法的流程图。

具体实施方式

hive,presto和spark三个不同的查询引擎各有所长:

1、hive非常稳定,可以支持大数据量的批处理运算,并且稳定不易出错,而在数据小的时候执行效率较低;

2、presto非常轻量级,全内存操作,数据量小的时候执行效率非常高,数据量超过一定限制会因内存限制而执行异常甚至失败;

3、spark也是全内存操作的查询引擎,执行性能介于hive与presto之间,但是在数据量超大时,同样会变得不太稳定。

本提案通过计算sql语句要处理的数据量以及sql本身逻辑复杂度的评估,自动选择sql语句的查询引擎,以提升查询效率,同时保证了查询稳定性。

如图1所示,这种基于sql的查询方法,该方法包括以下步骤:

(1)获取到sql语句的查询计划,进而找出参与运算的数据量,同时找到计算方法;

(2)根据参与运算的数据量及计算方法,选择采用hive、presto、spark中的一种作为查询引擎。

本发明通过对sql语句运算复杂度的自动化评估,再根据各计算引擎擅长的计算场景,就可以智能选择计算引擎,以达到提升运算效率的目的,同时保证了查询稳定性。

另外,所述步骤(1)中,通过hive的explain获取到sql语句的查询计划。

另外,所述步骤(1)中,计算方法包括:join操作,group by操作,distinct操作。

另外,所述步骤(2)中,如果数据量大于1亿条数据,并且存在join操作、group by操作或者distinct操作,选择hive作为查询引擎来提交sql作业;如果数据量小于1000万,使用presto作为查询引擎来提交sql作业;如果数据量在1000万到1亿之间,并且不存在join操作,group by操作或者distinct操作,使用presto作为查询引擎提交sql作业;除以上三种情况,使用spark作为查询引擎提交sql作业。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,与本发明的方法相对应的,本发明还同时包括一种基于sql的查询系统,该系统通常以与方法各步骤相对应的功能模块的形式表示。使用该方法的系统包括:

数据量及计算模式识别模块,其配置来获取到sql语句的查询计划,进而找出参与运算的数据量,同时找到计算方法;

查询引擎智能匹配模块,其配置来根据参与运算的数据量及计算方法,选择采用hive、presto、spark中的一种作为查询引擎。

另外,所述数据量及计算模式识别模块中,通过hive的explain获取到sql语句的查询计划。

另外,所述数据量及计算模式识别模块中,计算方法包括:join操作,group by操作,distinct操作。

另外,所述查询引擎智能匹配模块中,如果数据量大于1亿条数据,并且存在join操作、group by操作或者distinct操作,选择hive作为查询引擎来提交sql作业;如果数据量小于1000万,使用presto作为查询引擎来提交sql作业;如果数据量在1000万到1亿之间,并且不存在join操作,group by操作或者distinct操作,使用presto作为查询引擎提交sql作业;除以上三种情况,使用spark作为查询引擎提交sql作业。

本发明的有益效果如下:

1、在数据建模过程中,使用到大量的sql例行任务来对业务数据进行加工处理。

2、在数据分析过程中,可以使得数据查询结果快速而正确地返回。

3、充分利用到了各个计算引擎的优势,规避了各个计算引擎的缺点,使得sql任务提交智能化,这样sql语句执行的综合效率是最高的。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1