使用 Calcite 解析 SQL 语句获取源表和结果表
Apache Calcite是一款开源的动态数据管理框架,它提供了标准的SQL语言、多种查询优化和连接各种数据源的能力,但不包括数据存储、处理数据的算法和存储元数据的存储库。

@Test
void test() {
String sql = "insert into ... select ...";
// 在解析前可以对 SQL 语句进行预处理,比如将不支持的 && 替换为 AND, != 替换为 <>
SqlParser.Config config =
SqlParser.configBuilder()
.setParserFactory(FlinkSqlParserImpl.FACTORY)
.setLex(Lex.JAVA)
.setIdentifierMaxLength(256)
.build();
// 创建解析器
SqlParser sqlParser = SqlParser
.create(sql, config);
// 生成 AST 语法树
SqlNode sqlNode;
try {
sqlNode = sqlParser.parseStmt();
} catch (SqlParseException e) {
throw new RuntimeException("使用 Calcite 进行语法分析发生了异常", e);
}
SqlBloodRes res = new SqlBloodRes();
// 递归遍历语法树
getDependencies(sqlNode, res, false);
}在 Calcite 解析出来的 AST 是以 SqlNode 的形式表现的,一个 SqlNode 即是 AST 中的一个节点。SqlNode 有许多类型,我们关注的 Source 和 Sink 表表名在 A...点击查看剩余70%
网友评论