使用 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%
网友评论