18 | 如何自己开发一个大数据SQL引擎?
开发一款支持标准数据库 SQL 的大数据仓库引擎,希望让那些在 Oracle 上运行良好的 SQL 可以直接运行在Hadoop 上,而不需要重写成 Hive QL。
Hive 的主要处理过程,大体上分成三步:
1. 将输入的 Hive QL 经过语法解析器转换成 Hive 抽象语法树(Hive AST)。
2. 将 Hive AST 经过语义分析器转换成 MapReduce 执行计划。
3. 将生成的 MapReduce 执行计划和 Hive 执行函数代码提交到 Hadoop 上执行。
Panthera 的设计思路是保留 Hive 语义分析器不动,替换 Hive 语法解析器,使其将标准 SQL 语句转换成Hive 语义分析器能够处理的 Hive 抽象语法树。用图形来表示的话,是用红框内的部分代替黑框内原来 Hive 的部分。

红框内的组件我们重新开发过,浅蓝色的是我们使用的一个开源的 SQL 语法解析器,将标准 SQL 解析成标准 SQL 抽象语法树(SQL AST),后面深蓝色的就是团队自己开发的
SQL 抽象语法树分析与转换器,将 SQL AST 转换成 Hive AST。
由于Hive语法元素少于标准SQL,且不支持复杂的嵌套子查询,所以开发的难点就是如何将复杂嵌套消除转化成标准SQL。
方法:通过装饰模式等价转化类的构造,对于每一种新的语法通过开发新的Transformer类,然后通过组合模式将抽象语法树AST进行遍历,最后转化成Hive格式的抽象语法树。
基于SQL的大数据仓库引擎panthera的核心任务是把SQL语义与Hive AST对应起来。难点是SQL的语义远比Hive AST丰富,
而幸运的事SQL丰富的表意逻辑主要源于它的嵌套子语句,这在Hive AST中是不存在的。但是SQL的嵌套子语句可以等价于若干jion操作。
为了在工程上降低实现难度,特意为每个语法点设计一个对象(类),这就将复杂问题分解为无数个小步骤,可以持续交付,不用长期等待,从而将不可能有条件的变为可能。
而且每个类的代码十分简洁,遇到问题也便于各个击破。
浙公网安备 33010602011771号