Flink Table&Sql API使用遇到的问题总结

本文详细记录了在使用Apache Flink Table API与SQL时遇到的IncompatibleClassChangeError和NoSuchMethodError问题,通过引入缺失的calcite及其依赖avatica模块,解决了这两个问题,适合Flink开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇文章持续记录有关Flink Table&Sql使用过程中遇到的问题及解决方案

1.IncompatibleClassChangeError
在这里插入图片描述

Exception in thread "main" java.lang.IncompatibleClassChangeError: class org.apache.flink.sql.parser.validate.FlinkSqlConformance can not implement org.apache.calcite.sql.validate.SqlConformance, because it is not an interface (org.apache.calcite.sql.validate.SqlConformance is in unnamed module of loader 'app')

通过分析日志发现缺少一个SqlConformance接口,同时在官方源码看到依赖calcite,并且日志提示也属于calcite,于是我去搜索calcite 发现有如下依赖

<dependency>
  <groupId>org.apache.calcite</groupId>
  <artifactId>calcite-core</artifactId>
  <version>1.30.0</version>
</dependency>

引入发现如下问题

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.calcite.avatica.ConnectionProperty$Type.deduceValueClass(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Class;
	at org.apache.calcite.config.CalciteConnectionProperty.<init>(CalciteConnectionProperty.java:195)
	at org.apache.calcite.config.CalciteConnectionProperty.<init>(CalciteConnectionProperty.java:186)
	at org.apache.calcite.config.CalciteConnectionProperty.<clinit>(CalciteConnectionProperty.java:41)
	at org.apache.flink.table.planner.calcite.CalciteConfig$.connectionConfig(CalciteConfig.scala:224)
	at org.apache.flink.table.planner.delegation.PlannerContext.createCatalogReader(PlannerContext.java:220)
	at org.apache.flink.table.planner.delegation.PlannerContext.lambda$createFlinkPlanner$0(PlannerContext.java:182)
	at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.getOrCreateSqlValidator(FlinkPlannerImpl.scala:88)
	at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:107)
	at org.apache.flink.table.planner.operations.SqlToOperationConverter.convert(SqlToOperationConverter.java:185)
	at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:78)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlQuery(TableEnvironmentImpl.java:664)
	at flink.join.JoinDemo6.main(JoinDemo6.java:59)

找关键字avatica,引入依赖

<dependency>
 <groupId>org.apache.calcite.avatica</groupId>
 <artifactId>avatica</artifactId>
 <version>1.22.0</version>
</dependency>

完美解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值