数据库|想自己写一个数据库吗?你需要了解的SQL解析工具Calcite(一)

数据库|想自己写一个数据库吗?你需要了解的SQL解析工具Calcite(一)

对于很多优秀的程序员来说 , 在数据库反应奇慢无比的时候 , 都会萌生一种自己写一个数据库的想法吧 。 对于现代的数据库系统来说 , 是离不开SQL解析工具的 。 今天我们就来为大家介绍一下开源SQL解析工具Apache Calcite 。
一、Calcite源流简介
Apaceh Calcite是一款优秀的开源SQL解析工具 , 其前身为Java写的Optiq , 在2013年的时候成为Apache开源基金会旗下的顶级项目 , 初始版本为0.1.11 , 经过近十年的发展 , 目前的最新版本为2022年8月2日发布的1.31.0版本 。
【数据库|想自己写一个数据库吗?你需要了解的SQL解析工具Calcite(一)】
二、Calcite主要功能与应用场景
Calcite可以将各种SQL语句解析成为抽象语法树(AST , Abstract Syntax Tree) , 之后 , 通过操作AST就可以把SQL语句所要表达的算法与关系体现在具体代码之中 。
目前 , 很多主流的大数据组件的SQL处理引擎都使用Calcite , 包括Hive、Drill、Flink、Phoenix、Storm等 。
Calcite提供SQL相关的全部必要功能 , 包括SQL解析、SQL语法校验、查询优化、SQL生成器、数据连接等 。
三、Calcite的相关组件
Calcite主要包括以下几个组件:
1.Catalog: 定义SQL语义相关的元数据与命名空间 。 其中主要定义被SQL访问的命名空间 , 主要包括Schema(定义表的命名空间 , 比如说两张同名表 , 就需要通过两个Schema A和B来区别 , 类似于A.Table B.Table)、表(对应关系型数据库的表)、RelDataType(表的数据定义 , 如列名及类型等) 。
2.SQL parser: 把SQL转化成AST 。
3.SQL validator: 通过Catalog来校正AST.
4.Query optimizer: 将AST转化成物理执行计划、优化物理执行计划.
5.SQL generator: 反向将物理执行计划转化成SQL语句.
四、Calcite解析SQL的步骤
通常来讲 , Calcite解析SQL包括以下几步:
1.Parse:将SQL解析成未经校验的AST
2.Validate:校验Parser步骤中的AST是否合法如验证SQL scheme、字段、函数等是否存在; SQL语句是否合法等. 此步完成之后就生成了RelNode树(关于RelNode树 请参考下文)
3.Optimize:优化RelNode树 并将其转化成物理执行计划 。 主要涉及SQL规则优化如:基于规则优化(RBO)及基于代价(CBO)优化; Optimze 这一步原则上来说是可选的 通过Validate后的RelNode树已经可以直接转化物理执行计划 , 但现代的SQL解析器基本上都包括有这一步 , 目的是优化SQL执行计划 。 此步得到的结果为物理执行计划 。
4.Execute:将物理执行计划转化成可在特定的平台执行的程序 。 如Hive与Flink都在在此阶段将物理执行计划生成相应的可执行代码 。
是不是功能强大呢?在以后的内容里 , 我们会通过几个例子 , 让大家从0开始 , 打造一个自己的简易数据库系统哦 。 喜欢就关注一下活在信息时代吧:)