Flink 1.11里的org.apache.flink.table.planner.ParserImpl的parse方法里包含了对Planner相关方法的调用,这导致在某些前置sql(例如insert into用到的表的create table语句)没有执行之前,这个parse方法会报错。如果只是想调用Calcite的相关的功能去parse sql语句,有什么办法可以做到吗?能想到的一个办法是通过反射拿到ParserImpl里面的calciteParserSupplier。想知道Flink有没有提供直接的接口或者方法去做纯的sql parsing。
谢谢~*来自志愿者整理的flink
我简单写了一下仅供参考
import org.apache.calcite.config.Lex; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.SqlNodeList; import org.apache.calcite.sql.parser.SqlParseException; import org.apache.calcite.sql.parser.SqlParser; import org.apache.flink.sql.parser.impl.FlinkSqlParserImpl; import org.apache.flink.sql.parser.validate.FlinkSqlConformance;
/** * @author: silence * @date: 2020/10/22 */ public class Test { public static void main(String[] args) throws SqlParseException { String sql = "xxx"; SqlParser.Config sqlParserConfig = SqlParser .configBuilder() .setParserFactory(FlinkSqlParserImpl.FACTORY) .setConformance(FlinkSqlConformance.DEFAULT) .setLex(Lex.JAVA) .setIdentifierMaxLength(256) .build(); SqlParser sqlParser = SqlParser.create(sql, sqlParserConfig); SqlNodeList sqlNodes = sqlParser.parseStmtList(); for (SqlNode sqlNode : sqlNodes) { //do something } } }*来自志愿者整理的flink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。