一种sql到云环境的映射方法及系统的制作方法

文档序号:6636434阅读:155来源:国知局
一种sql到云环境的映射方法及系统的制作方法
【专利摘要】本发明提供了一种SQL到云环境的映射方法,包括下列步骤:1)重写待转换SQL语句,获得具有原待转换SQL语句相同功能的多个重写HiveQL语句;2)计算各个HiveQL语句的执行代价,选出最优语句进行输出。本发明还提供了相应的SQL到云环境的映射系统。本发明能够在SQL语句映射到云环境的同时,对云环境语句(例如HiveQL语句)进行快速地优化,进而降低Mapper和Reducer实际输入数据量,提升查询性能。
【专利说明】-种SQL到云环境的映射方法及系统

【技术领域】
[0001] 本发明涉及并行数据库以及查询重写和查询优化【技术领域】,具体地说,本发明涉 及SQL到云环境的映射方法。

【背景技术】
[0002] MapReduce提供了一个高度抽象的编程模型,它允许用户只需关注于两个函数 (Mapper和Reducer)功能的逻辑实现,就可以快速地将他们的程序分布式地并行执行在 多台机器组成的集群当中,而不需要关注诸如数据摆放和任务调度等底层系统问题。随着 云计算技术的兴起,用于将高层抽象语言自动转换为Mapreduce任务流的Hive应运而生, 它极大提高了数据分析代码的重用能力。Hive和Mapreduce都是当前互联网公司内广泛 应用的技术,许多公司用它们进行网页的索引创建、用户行为分析以及商品推荐。然而,当 软件工程师试图利用Hive来替代并加速之前运行在RDBMS (关系型数据库)中的存储过 程时,将已有的SQL(Structured Query Language,结构化查询语言)转换为正确、高效的 HiveQL(Hive所使用的申明型语言)通常面临许多困难。
[0003] SQL至Mapreduce的自动转换和优化近几年受到了极大的关注,当前已有的方 法主要包括:1.采用基于规则的方法来引导这种转换以减少开销,例如Google提出的 Tenzing系统。2.采用优化算法来合并生成的多个Mapreduce任务,以达到减少开销的目 的,例如YSmart系统。这两种技术都主要关注于Mapreduce层次的优化,即直接将SQL语 句转成MapReduce任务,然后再采用优化算法来合并所生成的多个MapReduce任务。现有 的这些优化方案可以在一定程度上提高SQL至Mapreduce的自动转换的效率,但仍存在进 一步提商的空间。


【发明内容】

[0004] 因此,本发明的任务是克服现有技术的不足,帮助进一步提高SQL到云环境(例如 Mapreduce)映射的效率的解决方案。
[0005] 为实现上述发明目的,本发明提供了一种SQL到云环境的映射方法,包括下列步 骤:
[0006] 1)重写待转换SQL语句,获得具有原待转换SQL语句相同功能的多个重写HiveQL 语句;
[0007] 2)对于步骤1)所得的每个重写HiveQL语句,分别计算其对应的Mapreduce执行 计划的代价,根据所计算的代价选出其中最优的重写HiveQL语句作为原SQL语句在云环境 中的映射。
[0008] 其中,所述步骤2)中,所述Mapreduce执行计划的代价是该Mapreduce执行计划 所产生的总的中间数据量。
[0009] 其中,所述步骤2)包括下列子步骤:
[0010] 21)对于每个HiveQL语句,分别查询其对应的Mapreduce执行计划以及所涉及到 的表的统计信息;
[0011] 22)利用基于概率的基数估计方法,将所述的所涉及到的表的统计信息代入,得到 所述Mapreduce执行计划中每个Mapper操作和每个Reducer操作所产生的中间数据量,然 后求和得到所述Mapreduce执行计划所产生的总的中间数据量;
[0012] 23)根据所计算的相应Mapreduce执行计划所产生的总的中间数据量,选出最优 的重写HiveQL语句作为原SQL语句在云环境中的映射。
[0013] 其中,所述步骤21)中,所述的表的统计信息包括:表的各列的唯一值数量、各个 列的空值数量、各个列的最小值、各个列的最大值、各个列出现频率最高的值分布以及各个 列的平均比特数。
[0014] 其中,所述步骤1)包括下列子步骤:
[0015] 11)接收待转换的SQL语句,将该SQL语句转换成可编程操作的结构化语法树;
[0016] 12)扫描所述结构化语法树,依据预先定义的一系列的规则触发重写操作,得到多 个具有相同功能的HiveQL语句。
[0017] 其中,所述步骤12)中,所述预先定义的一系列的规则包括:增加缺失列、抽取隐 式JOIN、改写EXISTS子查询、改写NOT EXISTS子查询、改写通过OR连接的EXISTS/N0T EXISTS子查询、OR转换为UNION、OR条件原地转换、改写UPDATE语句、改写DELETE语句、改 写MERGE INTO语句、调整JOIN顺序的规则中的一项或多项。
[0018] 其中,所述调整JOIN顺序的规则是:如果语句中存在多个JOIN,则采用组合方法 对参与JOIN的表进行前后执行顺序的调整,从而形成多个不同的HiveQL语句。
[0019] 其中,所述改写UPDATE语句的规则是:对于UPDATE形式的语句中存在的JOIN语 句,将其转换为LEFT OUTER JOIN语句,并在该UPDATE形式的语句的WHERE中新增某列IS NOT NULL的条件,接着利用增加缺失列的规则生成SELECT语句,最后再移除WHERE条件,并 将该条件移动到对应的SELECT语句中要被更新的列中,构成判定条件;
[0020] 所述改写DELETE语句的规则是:当WHERE中存在EXISTS时会触发LEFT OUTER JOIN改写,对WHERE条件取反,把不需要删除的那些行通过SELECT语句表达出来;
[0021] 所述改写MERGE INTO语句的规则是:如果MERGE INTO语句中包含WHEN NOT MATCHED子句,则将MERGE INTO语句转换为FULL OUTER JOIN语句,并且,当主表与子查询 匹配时更新主表对应的列,否则采用子查询对应列的值作为新值;如果MERGE INTO语句中 不包含WHEN NOT MATCHED子句,则该MERGE INTO语句退化为带有JOIN条件的UPDATE语 句,用所述改写UPDATE语句的规则进行改写。
[0022] 本发明还提供了一种SQL到云环境的映射系统,包括:
[0023] SQL解释器,用于接收待转换的SQL语句,将该SQL语句转换成可编程操作的结构 化语法树;
[0024] 查询重写器,用于扫描SQL解释器所得到的结构化语法树,依据预先定义的一系 列的规则触发重写操作,得到多个与原SQL语句具有相同功能的HiveQL语句;
[0025] 统计信息收集器,用于收集Mapreduce执行计划中所涉及到的表的统计信息并将 其提供给计划评估器;以及
[0026] 计划评估器,用于根据每个HiveQL语句所对应的Mapreduce执行计划和所涉及到 的表的统计信息,利用数据库领域中的基于概率的基数估计方法,得到该Mapreduce执行 计划所产生的总的中间数据量,选择所产生的总的中间数据量最小的HiveQL语句作为原 SQL语句在云环境中的映射。
[0027] 其中,所述计划评估器还用于:对于Mapreduce执行计划,利用数据库领域中的基 于概率的基数估计方法,将该Mapreduce执行计划所涉及到的表的统计信息代入,得到该 Mapreduce执行计划中每个Mapper操作和每个Reducer操作所产生的中间数据量,然后求 和得到该Mapreduce执行计划所产生的总的中间数据量。
[0028] 本发明还提供了另一种SQL到云环境的映射方法,包括下列步骤:
[0029] 1)重写待转换SQL语句,获得具有原待转换SQL语句相同功能的多个重写HiveQL 语句,将原待转换SQL语句映射到云环境;
[0030] 2)计算各个映射到云环境后的语句的执行代价,选出执行代价最小的HiveQL语 句进行输出。
[0031] 其中,所述步骤2)还包括:对于每个HiveQL语句,分别查询其对应的Mapreduce 执行计划以及所涉及到的表的统计信息,所述表的统计信息包括:各列的唯一值数量、各个 列的空值数量、各个列的最小值、各个列的最大值、各个列出现频率最高的值分布以及各个 列的平均比特数中的一项或多项;所述步骤2)还包括:基于所涉及到的表的统计信息,计 算每个HiveQL语句的查询执行计划的代价,根据这个代价确定最优的HiveQL语句。
[0032] 与现有技术相比,本发明具有下列技术效果:
[0033] 本发明能够在SQL语句映射到云环境的同时,对云环境语句(例如HiveQL语句) 进行快速地优化,进而降低Mapper和Reducer实际输入数据量,提升查询性能。

【专利附图】

【附图说明】
[0034] 以下,结合附图来详细说明本发明的实施例,其中:
[0035] 图1示出了本发明一个实施例的将SQL语句转换为高效HiveQL查询语言的系统 的结构不意图;
[0036] 图2不出了本发明一个实施例中用于解析隐式JOIN关系的依赖图;
[0037] 图3示出了本发明一个实施例与现有方案的转换后语句的查询时间的对比;
[0038] 图4示出了本发明一个实施例与现有方案的转换后语句的查询中的实际输入数 据量的对比;
[0039] 图5示出了一个将SQL语句转换为高效HiveQL查询语言的典型示例中结构化语 法树的示例;
[0040] 图6示出了一个将SQL语句转换为高效HiveQL查询语言的典型示例中转换1生 成的执行计划;
[0041] 图7示出了一个将SQL语句转换为高效HiveQL查询语言的典型示例中转换2生 成的执行计划。

【具体实施方式】
[0042] 发明人研究发现,现有的SQL至Mapreduce的自动转换方案大都关注于Mapreduce 层次的优化,而忽略了相同逻辑条件下的SQL语句的多样性(同一个功能可由不同的SQL 语句实现),以及这种多样性所带来的性能差异。针对这一问题,本发明提出了一种基于规 则的查询重写优化方法,来引导SQL至HiveQL的转换,生成多个转换方案,并且提出了基于 代价的评估方法来选择最优的转换方案,从而达到减少开销的目的。其中HiveQL语言可以 看做SQL语言中与Hive兼容的子集。
[0043] 概括来说,本发明提供了一种将SQL语句转换为高效HiveQL查询语言的方法,从 而实现SQL到云环境的映射,该方法包括下列步骤:
[0044] 步骤1 :接收来自用户的SQL语句,并将该语句转换成可编程操作的结构化语法 树。
[0045] 步骤2 :对结构化语法树进行调整,依据每个重写规则扫描输入的语法树,当满 足一定条件时便触发重写操作,从而得到多个具有相同功能的SQL语句,进而转换为多个 Hive可接受的HiveQL语句。本领域技术人员易于理解,这里转换后获得的每个HiveQL语 句都能够实现与原SQL语句相同的功能,即每个HiveQL语句都对应于一套转换方案。
[0046] 步骤3 :对于每个Hive可接受的HiveQL语句,分别查询其对应的Mapreduce执行 计划以及所涉及到的表的统计信息。目前针对各个表收集的统计信息主要包括:各列的唯 一值数量、各个列的空值数量、各个列的最小值、各个列的最大值、各个列出现频率最高的 值分布以及各个列的平均比特数。另外,本领域技术人员易于理解,Mapreduce执行计划所 涉及到的表指的是被作为Mapreduce执行计划中的操作对象的表。
[0047] 步骤4 :基于所涉及到的表的统计信息,计算每个HiveQL语句的查询执行计划的 代价,根据这个代价确定最优的HiveQL语句。
[0048] 本发明考虑了相同逻辑条件下的SQL语句的多样性,生成多个转换方案,然后根 据基于代价的评估方法来选择最优的转换方案,从而达到减少开销的目的。并且,本发明是 处于查询语句层次的优化,它可以和MapReduce层次的优化工具(如YSmart)结合起来使 用,从而进一步地提高SQL至MapReduce任务的转换效率。
[0049] 为了使本发明更加清楚明白,下面将结合实施例对本发明进行描述。
[0050] 一、将SQL语句转换为高效HiveQL查询语言
[0051] 图1示出了本实施例提供的一种将SQL语句转换为高效HiveQL查询语言的系统 的结构示意图,该系统包括:SQL Interpreter (SQL解释器)、Query Rewriter (查询重写 器)、Plan Evaluator (计划评估器)和Statistics Collector (统计信息收集器)。下面 分别介绍这4个部分。
[0052] I. SQL Interpreter (SQL 解释器)
[0053] SQL解释器是利用ANTLR自行开发的一个用于解析PLSQL语句的语法分析器,该解 释器的目的是用于接收来自用户的SQL语句,并将该语句转换成可编程操作的结构化语法 树。
[0054] 2. Query Rewriter (查询重写器)
[0055] 查询重写器接收来自SQL解释器输出的结构化语法树,并在此语法树基础上对其 进行调整,查询重写器内部的核心部分为重写规则库,查询重写器会依据每个重写规则扫 描输入的语法树,当满足一定条件时便触发重写操作,最终会得到多个(当多个规则被触 发时)Hive可接受的HiveQL语句。
[0056] 3. Plan Evaluator (计划评估器)
[0057] 查询重写器输出的多个HiveQL语句,会进一步交给Hive本身的查询编译器进行 解释,进而能够得到查询各自对应的Mapreduce执行计划(包含了多个Mapreduce任务及 其内部操作符的逻辑描述),该执行计划和所涉及到的表的统计信息作为计划评估器的输 入,计划评估器利用数据库领域中的基数估计技术,结合本发明提出的代价模型,计算各个 执行计划的代价,最终代价最小的计划所对应的HiveQL语句会被选择为最终的转换结果。
[0058] 4. Statistics Collector (统计信息收集器)
[0059] 统计信息收集器用于定时收集Hive中各个表的统计信息,该统计信息主要提供 给计划评估器帮助其计算查询执行计划的代价,目前针对各个表收集的统计信息主要包 括:各列的唯一值数量、各个列的空值数量、各个列的最小值、各个列的最大值、各个列出现 频率最高的值分布以及各个列的平均比特数。
[0060] 二、SQL至HiveQL自动转换的方法
[0061] 查询重写器中,SQL至HiveQL自动转换的方法是基于规则的,因此本实施例中定 义了一系列的规则来引导转换,每当规则的条件被满足时,规则就会触发并应用于当前查 询,从而生成一个新的查询语句,最终所有规则被应用完成时,将会生成若干个与原SQL语 句等价的HiveQL语句(生成若干个等价的查询语句是因为有规则有不同的转换方法)。查 询重写器的核心规则包括:
[0062] 规则1.增加缺失列
[0063] 触发条件:任意 UPDATE、DELETE、MERGE INTO、INSERT 语句
[0064] 转换规则:考虑如下SQL语句,具有关系Rl (A, B,C,D),R2 (E,F,G,H)
[0065] INSERT INTO Rl (A, B,C) - Ql
[0066] SELECT E,F,G FROM R2 - Q2
[0067] 查询将R2中的某些列插入到Rl当中,为了方便,SQL语句直接指明了对应Rl表 中的列(A,B,C),而D列会被数据库设置为默认值null或者是其他用户指定的数值。但是 在Hive中,INSERT是无法简化的,查询重写器会扫描原RDBMS中对应表所拥有的列以及它 们的默认值,自动完成对这些列的扩充,转换结果如下:
[0068] INSERT OVERWRITE TABLE Rl
[0069] SELECT E,F,G,-IAS D FROM R2
[0070] 概括地说,规则I就是在满足前述触发条件时,将原SQL语句转换为扫描原关系数 据库并了增加了缺失列的HiveQL语句。
[0071] 规则2?抽取隐式JOIN
[0072] 触发条件:语句中的FROM中存在多个表
[0073] 转换规则:考虑如下SQL语句,具有关系Rl (A, B,C,D),R2 (E,F,G,H),R3 (H,M)
[0074] INSERT INTO Rl (A, B, C, D)
[0075] SELECT E, F, G, M FROM R2, R3WHERE R2. H = R3. H
[0076] 假设在这个例子中R2和R3中的数据是一一对应的,显然该查询使用了一个隐式 的JOIN操作,将R2和R3进行匹配,在关系数据库中,隐式JOIN和INNER JOIN是等价的, 因此在对一个单一的查询转换之前,查询重写器会分析其中存在的隐式JOIN,并将它改写 成Hive中支持的JOIN模式。这个过程是直接的,上面的例子可以转换为:
[0077] INSERT OVERWRITE TABLE Rl
[0078] SELECT E, F, G, M FROM R2J0IN R30N R2. H = R3. H
[0079] 当有多张表参与了隐式的JOIN时,查询重写器通过构造一个依赖图来解析隐式 JOIN关系,如图2所示。该JOIN关系可以从以下语句中解析出来:
[0080] …? SELECT…FROM Rl,R2, R3, R4WHERE RL A = R2. A AND RL B = R3. B AND R2. C =R3. C AND R3. D = R4. D-
[0081] 通过遍历WHERE中的条件,查询重写器将构造出上图对应的依赖关系,接着任意 选取一个节点作为主表然后进行宽度优先搜索,可以构造出等价的JOIN操作,在该例子 中,算法从沿着R3->R4->R1->R2->R1的顺序进行遍历,得到JOIN关系:
[0082] …SELECT…FROM R3J0IN R40N R3. D = R4. D JOIN RlON R3. B = RL B JOIN R20N R3. C = R2. C AND RL A = R2. A
[0083] 注意到,当第二次访问Rl节点准备JOIN R2时,会发现R2已经被R3节点JOIN 了, 此时只需要直接把Rl和R2的JOIN关系添加到JOIN R2的条件中(ON R3. C = R2. C AND RL A = R2. A)。
[0084] 概括地说,规则2就是在满足前述触发条件时,将原SQL语句的WHERE条件中的 JOIN等式显式地列在JOIN表的ON条件中,从而得到能够完成相同功能的HiveQL语句。
[0085] 规则3?改写EXISTS子查询
[0086] 触发条件:语句Where条件中存在EXISTS子查询
[0087] 转换规则:
[0088]

【权利要求】
1. 一种SQL到云环境的映射方法,包括下列步骤: 1) 重写待转换SQL语句,获得具有原待转换SQL语句相同功能的多个重写HiveQL语 句; 2) 对于步骤1)所得的每个重写HiveQL语句,分别计算其对应的Mapreduce执行计划 的代价,根据所计算的代价选出其中最优的重写HiveQL语句作为原SQL语句在云环境中的 映射。
2. 根据权利要求1所述的SQL到云环境的映射方法,其特征在于,所述步骤2)中,所述 Mapreduce执行计划的代价是该Mapreduce执行计划所产生的总的中间数据量。
3. 根据权利要求2所述的SQL到云环境的映射方法,其特征在于,所述步骤2)包括下 列子步骤: 21) 对于每个HiveQL语句,分别查询其对应的Mapreduce执行计划以及所涉及到的表 的统计信息; 22) 利用基于概率的基数估计方法,将所述的所涉及到的表的统计信息代入,得到所述 Mapreduce执行计划中每个Mapper操作和每个Reducer操作所产生的中间数据量,然后求 和得到所述Mapreduce执行计划所产生的总的中间数据量; 23) 根据所计算的相应Mapreduce执行计划所产生的总的中间数据量,选出最优的重 写HiveQL语句作为原SQL语句在云环境中的映射。
4. 根据权利要求3所述的SQL到云环境的映射方法,其特征在于,所述步骤21)中,所 述的表的统计信息包括:表的各列的唯一值数量、各个列的空值数量、各个列的最小值、各 个列的最大值、各个列出现频率最高的值分布以及各个列的平均比特数。
5. 根据权利要求1所述的SQL到云环境的映射方法,其特征在于,所述步骤1)包括下 列子步骤: 11) 接收待转换的SQL语句,将该SQL语句转换成可编程操作的结构化语法树; 12) 扫描所述结构化语法树,依据预先定义的一系列的规则触发重写操作,得到多个具 有相同功能的HiveQL语句。
6. 根据权利要求5所述的SQL到云环境的映射方法,其特征在于,所述步骤12)中,所 述预先定义的一系列的规则包括:增加缺失列、抽取隐式JOIN、改写EXISTS子查询、改写 NOT EXISTS子查询、改写通过OR连接的EXISTS/NOT EXISTS子查询、OR转换为UNION、OR 条件原地转换、改写UPDATE语句、改写DELETE语句、改写MERGE INTO语句、调整JOIN顺序 的规则中的一项或多项。
7. 根据权利要求6所述的SQL到云环境的映射方法,其特征在于,所述调整JOIN顺序 的规则是:如果语句中存在多个JOIN,则采用组合方法对参与JOIN的表进行前后执行顺序 的调整,从而形成多个不同的HiveQL语句。
8. 根据权利要求6所述的SQL到云环境的映射方法,其特征在于,所述改写UPDATE语 句的规则是:对于UPDATE形式的语句中存在的JOIN语句,将其转换为LEFT OUTER JOIN语 句,并在该UPDATE形式的语句的WHERE中新增某列IS NOT NULL的条件,接着利用增加缺 失列的规则生成SELECT语句,最后再移除WHERE条件,并将该条件移动到对应的SELECT语 句中要被更新的列中,构成判定条件; 所述改写MERGE INTO语句的规则是:如果MERGE INTO语句中包含WHEN NOT MATCHED 子句,则将MERGE INTO语句转换为FULL OUTER JOIN语句,并且,当主表与子查询匹配时 更新主表对应的列,否则采用子查询对应列的值作为新值;如果MERGE INTO语句中不包含 WHEN NOT MATCHED子句,则该MERGE INTO语句退化为带有JOIN条件的UPDATE语句,用所 述改写UPDATE语句的规则进行改写。
9. 一种SQL到云环境的映射系统,包括: SQL解释器,用于接收待转换的SQL语句,将该SQL语句转换成可编程操作的结构化语 法树; 查询重写器,用于扫描SQL解释器所得到的结构化语法树,依据预先定义的一系列的 规则触发重写操作,得到多个与原SQL语句具有相同功能的HiveQL语句; 统计信息收集器,用于收集Mapreduce执行计划中所涉及到的表的统计信息并将其提 供给计划评估器;以及 计划评估器,用于根据每个HiveQL语句所对应的Mapreduce执行计划和所涉及到的表 的统计信息,利用数据库领域中的基于概率的基数估计方法,得到该Mapreduce执行计划 所产生的总的中间数据量,选择所产生的总的中间数据量最小的HiveQL语句作为原SQL语 句在云环境中的映射。
10. 根据权利要求9所述的SQL到云环境的映射系统,其特征在于,所述计划评估器 还用于:对于Mapreduce执行计划,利用数据库领域中的基于概率的基数估计方法,将该 Mapreduce执行计划所涉及到的表的统计信息代入,得到该Mapreduce执行计划中每个 Mapper操作和每个Reducer操作所产生的中间数据量,然后求和得到该Mapreduce执行计 划所产生的总的中间数据量。
11. 一种SQL到云环境的映射方法,包括下列步骤: 1) 重写待转换SQL语句,获得具有原待转换SQL语句相同功能的多个重写HiveQL语 句,将原待转换SQL语句映射到云环境; 2) 计算各个映射到云环境后的语句的执行代价,选出执行代价最小的HiveQL语句进 行输出。
12. 根据权利要求11所述的SQL到云环境的映射方法,其特征在于,所述步骤2)还包 括:对于每个HiveQL语句,分别查询其对应的Mapreduce执行计划以及所涉及到的表的统 计信息,所述表的统计信息包括:各列的唯一值数量、各个列的空值数量、各个列的最小值、 各个列的最大值、各个列出现频率最高的值分布以及各个列的平均比特数中的一项或多 项;所述步骤2)还包括:基于所涉及到的表的统计信息,计算每个HiveQL语句的查询执行 计划的代价,根据这个代价确定最优的HiveQL语句。
【文档编号】G06F17/30GK104408134SQ201410708225
【公开日】2015年3月11日 申请日期:2014年11月28日 优先权日:2013年11月28日
【发明者】徐英钟, 虎嵩林, 苏伊鹏, 陈建, 吴凯锋, 李祥珍, 王志强, 张春光, 裘炜浩, 肖政, 衡星辰 申请人:中国科学院计算技术研究所, 国网浙江省电力公司信息通信分公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1