Calcite主要是做SQL解析、校验、优化等工作,比如Flink、Hive底层都是使用的calcite。本文内容是基于Flink 1.12来讲解。
首先从整体上对Calcite使用做个了解,Calcite 使用 javacc作为语法解析器,并且使用freemarker作为模板引擎,在编译的时候,freemarker会将 配置文件、模板语法文件、附加模板文件 整体生成最终的语法文件,并通过javacc编译,形成calcite的语法文件。其整个过程如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a42e388b91e4ce81cbe762e11b9732e4.png)
image
下面我们以一个具体例子来说怎么做SQL语法拓展,比如我们需要支持语法
USE FUNCTION func_name [ WITH (name = '', version = '') ]
1. 创建maven项目
2. 复制模板文件
从Flink源码flink-table/flink-sql-parser/src/main/codegen文件夹copy到自己项目的src/main目录下