面向流式数据处理的sql查询计划生成方法

文档序号:6362945阅读:295来源:国知局
专利名称:面向流式数据处理的sql查询计划生成方法
技术领域
本发明涉及计算机应用领域,具体涉及一种面向流式数据处理的SQL查询计划生成方法。
背景技术
在基于MapReduce的分布式数据库系统中,针对SQL查询计划生成方法,现有技术根据用户的SQL查询命令创建一系列的MapReduce作业,MapReduce作业由有向无环图组成,以迭代器的形式操作,每个操作符的数据经处理后,再把产生的元组传给下一个操作符。然而,现有的SQL查询计划生成技术存在以下问题1、采用基于规则的优化技术, 不能总是产生高效的查询计划;2、不支持连续查询,不适合流式数据处理的需要;3、缺乏完整的查询分析处理引擎,解析效率低。

发明内容
本发明的目的在于提供一种面向流式数据处理的SQL查询计划生成方法,其能够根据数据的特点产生最优的SQL查询分析计划,处理速度快,解析效率高,特别适用于流式数据处理领域,同时还允许用户使用SQL自定义数据的格式。
本发明是通过以下技术方案实现的
一种面向流式数据处理的SQL查询计划生成方法,其特征在于,包括以下步骤
(1)接收用户输入的SQL命令;
(2)判断SQL命令的语法是否正确;
(3)若SQL命令的语法正确,则对SQL命令执行预处理;
(4)判断预处理后的SQL命令是否为连续任务;
(5)若SQL命令为连续任务,则将连续任务转换为流式任务;
(6)对流式任务执行解析和优化,以生成查询计划,具体包括以下子步骤
(6-1)接收流式任务,并对流式任务执行语义分析,以判断流式任务的语义是否正
确;(6-2)若流式任务的语义正确,则利用开源语法分析器解析流式任务,以生成SQL 抽象语法树;(6-3)根据SQL抽象语法树生成逻辑计划树;(6-4)根据逻辑计划树生成查询计划;(6-5)评估查询计划,以生成最终的查询计划;(7)执行查询计划。判断流式任务的语义是否正确包括判断流式任务的变量定义是否正确,以及判断其类型是否匹配。子步骤¢-2)包括以下步骤
(6-2-1)开源语法分析器根据SQL语言的语法和语义特点所定义的规则对流式任务进行识别,并将流式任务分解成标志流作为开源语法分析器的输入;(6-2-2)开源语法分析器利用扫描程序递归扫描标志流,以生成SQL抽象语法树。SQL抽象语法树是由叶子节点、非叶子节点和边组成的树结构,叶子节点与标志流的值相对应,非叶子节点与标志流的语法规则相对应。子步骤¢-3)包括以下步骤(6-3-1)解析SQL抽象语法树,并将SQL抽象语法树转换为多个查询块;(6-3-2)根据查询块中记录的SQL抽象语法树的信息递归分析SQL抽象语法树的子查询,以得到逻辑计划树,递归分析包括语义检查和类型检查。本方法还包括步骤若SQL命令的语法不正确,则过程结束。本方法还包括步骤若预处理后的SQL命令不是连续任务,则进入步骤(7)。本发明具有以下的优点和有益效果(I)解析效率高本发明针对流式数据处理,提出了一套完整的分布式查询分析处理引擎。具体来讲,这套完整的查询分析引擎包括预处理部件、解析部件、优化部件和执行部件等。整个查询分析引擎四个部件协同工作,紧密联系,显著提高了 SQL查询计划生成的效率,大大缩短了执行时间。(2)采用基于成本的优化策略本发明根据数据的特点和流式数据处理的要求, 计算进行索引和当前存储数据处理和操作的代价建立最选路径选择的规则。根据规则选取最优的待选树,在选择了最优的待选树后,产生执行计划并返回。


图I是本发明面向流式数据处理的SQL查询计划生成方法的流程图。图2是本发明方法中步骤(5)的工作示意图。图3是本发明方法中步骤(6)的细化流程图。图4是SQL抽象语法树的示意图。图5是本发明方法中步骤(7)的工作示意图。
具体实施例方式以下首先对本发明的技术词汇进行解释和说明。连续任务只提交一次,连续在数据库上运行的任务。连续任务的查询随着新数据的到来而不断地返回查询结果。流式任务利用数据流特征和滑动窗口机制以时间戳方式排列的查询任务,查询结果将转换成数据流。开源语法分析器一种开放源代码的语法分析工具,为包括Java,C++,C#,SQL等语言提供了一个通过语法描述来自动构造自定义语言的识别器、编译器和解释器的框架。SQL抽象语法树是SQL语句的抽象语法结构的树状表现形式和内存中的数据结构。逻辑计划树由关系代数表达式所组成的树结构,其非叶子节点为关系运算符、叶子节点为关系。
关系操作符数据库领域定义的专门用于关系运算的操作符,如过滤、选择、投影、 连接、聚集等。MapReduce :是一种编程模型,用于大规模数据集的并行运算。Hadoop :是一个分布式系统基础框架。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储。XML :一种可扩展的标记语言,可以用来标记数据、定义数据类型。如图I所示,本发明面向流式数据处理的SQL查询计划生成方法包括以下步骤(I)接收用户输入的SQL命令同时将所有出现在语句中的标识符的信息填入到标识符转换表中。(2)判断SQL命令的语法是否正确根据语法规则对SQL命令进行合法性检查,形成一个语法正确的查询任务,若SQL命令的语法不正确,则过程结束,若SQL命令的语法正确,则转入步骤(3);(3)对SQL命令执行预处理将查询任务通过网络传输到预处理器中进行语句依赖关系的分析,对查询任务进行合并、查询语句进行裁剪和对执行顺序进行调整。(4)判断预处理后的SQL命令是否为连续任务,若SQL命令为连续任务,则转入步骤(5),若预处理后的SQL命令不是连续任务,则进入步骤(7);(5)将连续任务转换为流式任务,具体包括以下子步骤(5-1)利用开源语法分析器将连续任务转换为一颗SQL抽象语法树;(5-2)将连续任务对应的一颗SQL抽象语法树分解为若干个子语法树;(5-3)通过加入时间戳属性组合子语法树,通过滑动窗口机制创建流式任务。如图2所示,任务接收器接收查连续任务,对连续任务进行语句依赖关系的分析, 对连续任务进行合并、查询语句进行裁剪和对执行顺序进行调整,中间结果将暂时保存在共享存储空间中,并存入到元数据库中。开源语法分析器根据SQL语法和语义特点利用元数据库中存储的信息对所述连续任务进行解析,转换成SQL抽象语法树。将连续任务对应的SQL抽象语法树分解为若干个子语法树,通过加入时间戳属性组合子语法树,通过滑动窗口机制创建流式任务。(6)对流式任务执行解析和优化,以生成查询计划,具体包括以下子步骤(如图3 所示)(6-1)接收流式任务,并对流式任务执行语义分析,以判断流式任务的语义是否正确判断流式任务的语义是否正确包括判断流式任务的变量定义是否正确,以及判断其类型是否匹配,若流式任务的语义正确,则进入步骤(6-2),否则过程结束;(6-2)利用开源语法分析器解析流式任务,以生成SQL抽象语判断流式任务法树, 具体包括(6-2-1)开源语法分析器根据SQL语言的语法和语义特点所定义的规则对流式任务进行识别,并将流式任务分解成标志流作为开源语法分析器的输入;(6-2-2)开源语法分析器利用扫描程序递归扫描标示流,以生成SQL抽象语法树。 SQL抽象语法树是由叶子节点、非叶子节点和边组成的树结构。叶子节点与标志流的值相对应,非叶子节点对应于标志流的语法规则,图4示出一个简单的SQL查询生成的SQL抽象语法树实例,所述实例执行下述操作从表Tablel中选择满足属性Fl值为a的元组中属性Fl的值及统计个数。(6-3)根据SQL抽象语法树生成逻辑计划树,具体包括(6-3-1)解析SQL抽象语法树,并将SQL抽象语法树转换为多个查询块;(6-3-2)根据查询块中记录的SQL抽象语法树的信息递归分析SQL抽象语法树的子查询,以得到逻辑计划树,递归分析包括语义检查和类型检查;(6-4)根据逻辑计划树生成查询计划;查询计划是由关系操作符组成的有向无环图;(6-5)评估查询计划,以生成最终的查询计划在查询计划中建立一系列通往同一结果的路径,为每条路径评估其执行代价,取出其中代价最小的一条,该条路径产生最终的查询计划。(7)执行查询计划递归访问查询计划,将所述查询计划分解为一系列MapReduce 任务,然后将任务提交给Hadoop集群。Hadoop集群将需要执行的所述MapReduce任务序列化到一个XML格式的文件,由Map或Reduce反序列化出SQL让各数据库实例执行,如图 5所示。
权利要求
1.一种面向流式数据处理的SQL查询计划生成方法,其特征在于,包括以下步骤(1)接收用户输入的SQL命令;(2)判断所述SQL命令的语法是否正确;(3)若所述SQL命令的语法正确,则对所述SQL命令执行预处理;(4)判断预处理后的所述SQL命令是否为连续任务;(5)若所述SQL命令为连续任务,则将所述连续任务转换为流式任务;(6)对所述流式任务执行解析和优化,以生成查询计划,具体包括以下子步骤(6-1)接收所述流式任务,并对所述流式任务执行语义分析,以判断所述流式任务的语义是否正确;(6-2)若所述流式任务的语义正确,则利用开源语法分析器解析所述流式任务,以生成 SQL抽象语法树;(6-3)根据所述SQL抽象语法树生成逻辑计划树;(6-4)根据所述逻辑计划树生成所述查询计划;(6-5)评估查询计划,以生成最终的查询计划;(7)执行所述查询计划。
2.根据权利要求I所述的SQL查询计划生成方法,其特征在于,判断所述流式任务的语义是否正确包括判断所述流式任务的变量定义是否正确,以及判断其类型是否匹配。
3.根据权利要求I所述的SQL查询计划生成方法,其特征在于,所述子步骤(6-2)包括以下步骤(6-2-1)所述开源语法分析器根据SQL语言的语法和语义特点所定义的规则对所述流式任务进行识别,并将所述流式任务分解成标志流作为所述开源语法分析器的输入;(6-2-2)所述开源语法分析器利用扫描程序递归扫描所述标志流,以生成所述SQL抽象语法树。
4.根据权利要求3所述的SQL查询计划生成方法,其特征在于,所述SQL抽象语法树是由叶子节点、非叶子节点和边组成的树结构;所述叶子节点与所述标志流的值相对应;所述非叶子节点与所述标志流的语法规则相对应。
5.根据权利要求I所述的SQL查询计划生成方法,其特征在于,所述子步骤(6-3)包括以下步骤(6-3-1)解析所述SQL抽象语法树,并将所述SQL抽象语法树转换为多个查询块; (6-3-2)根据所述查询块中记录的所述SQL抽象语法树的信息递归分析所述SQL抽象语法树的子查询,以得到所述逻辑计划树,所述递归分析包括语义检查和类型检查。
6.根据权利要求I所述的SQL查询计划生成方法,其特征在于,还包括步骤若所述 SQL命令的语法不正确,则过程结束。
7.根据权利要求I所述的SQL查询计划生成方法,其特征在于,还包括步骤若预处理后的所述SQL命令不是连续任务,则进入所述步骤(7)。
全文摘要
本发明公开了一种面向流式数据处理的SQL查询计划生成方法,其特征在于,包括以下步骤接收用户输入的SQL命令,判断SQL命令的语法是否正确,若SQL命令的语法正确,则对SQL命令执行预处理,判断预处理后的SQL命令是否为连续任务,若SQL命令为连续任务,则将连续任务转换为流式任务,对流式任务执行解析和优化,以生成查询计划,(7)执行查询计划。本发明能够根据数据的特点产生最优的SQL查询分析计划,处理速度快,解析效率高,特别适用于流式数据处理领域,同时还允许用户使用SQL自定义数据的格式。
文档编号G06F17/30GK102609451SQ20121000691
公开日2012年7月25日 申请日期2012年1月11日 优先权日2012年1月11日
发明者刘述曦, 张冬洁, 袁平鹏, 赵峰, 金海 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1