Flink SQL中使用Calcite作为sql语法解析、校验、优化工具,本篇是实操篇,介绍一下calcite做sql语法解析使用方式。
sql经过calcite解析之后,得到一棵抽象语法树,也就是我们说的AST,这棵语法树是由不同的节点组成,节点称之为SqlNode,根据不同类型的dml、ddl得到不同的类型的SqlNode,例如select语句转换为SqlSelect,delete语句转换为SqlDelete,join语句转换为SqlJoin。
使用方式:
SqlParser.Config config = SqlParser.configBuilder()
.setLex(Lex.MYSQL) //使用mysql 语法
.build();
//SqlParser 语法解析器
SqlParser sqlParser = SqlParser
.create("select id,name,age FROM stu where age<20", config);
SqlNode sqlNode = null;
try {
sqlNode = sqlParser.parseStmt();
} catch (SqlParseException e) {
throw new RuntimeException("", e);
}
这里解析了一个select的语句,那么得到的sqlNode就是一个SqlSelect。
if(SqlKind.SELECT.equals(sqlNode.getKind())){
SqlSelect