开发者社区> 问答> 正文

Flink 1.11里如何parse出未解析的执行计划

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

展开
收起
毛毛虫雨 2021-12-06 15:29:03 590 0
1 条回答
写回答
取消 提交回答
  • 我简单写了一下仅供参考

    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

    2021-12-06 16:02:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像