欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Cannot resolve field [product], input field list:[user, EXPR$0]

发布时间:2023/12/31 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Cannot resolve field [product], input field list:[user, EXPR$0] 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

flink的故障table api使用案例如下如下:

Table counts = Orders
              .groupBy($("user"))
                .select($("user"),$("product"),$("amount").sum().as("cnt"));

Exception in thread "main" org.apache.flink.table.api.ValidationException: Cannot resolve field [product], input field list:[user, EXPR$0].at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.failForField(ReferenceResolverRule.java:80)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.lambda$null$3(ReferenceResolverRule.java:75)at java.util.Optional.orElseThrow(Optional.java:290)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.lambda$null$4(ReferenceResolverRule.java:75)at java.util.Optional.orElseGet(Optional.java:267)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.lambda$visit$5(ReferenceResolverRule.java:74)at java.util.Optional.orElseGet(Optional.java:267)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.visit(ReferenceResolverRule.java:71)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule$ExpressionResolverVisitor.visit(ReferenceResolverRule.java:51)at org.apache.flink.table.expressions.ApiExpressionVisitor.visit(ApiExpressionVisitor.java:31)at org.apache.flink.table.expressions.UnresolvedReferenceExpression.accept(UnresolvedReferenceExpression.java:60)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule.lambda$apply$0(ReferenceResolverRule.java:47)at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)at org.apache.flink.table.expressions.resolver.rules.ReferenceResolverRule.apply(ReferenceResolverRule.java:48)at org.apache.flink.table.expressions.resolver.ExpressionResolver.lambda$null$1(ExpressionResolver.java:211)at java.util.function.Function.lambda$andThen$1(Function.java:88)at java.util.function.Function.lambda$andThen$1(Function.java:88)at java.util.function.Function.lambda$andThen$1(Function.java:88)at org.apache.flink.table.expressions.resolver.ExpressionResolver.resolve(ExpressionResolver.java:178)at org.apache.flink.table.operations.utils.OperationTreeBuilder.projectInternal(OperationTreeBuilder.java:191)at org.apache.flink.table.operations.utils.OperationTreeBuilder.project(OperationTreeBuilder.java:160)at org.apache.flink.table.operations.utils.OperationTreeBuilder.project(OperationTreeBuilder.java:151)at org.apache.flink.table.api.internal.TableImpl$GroupedTableImpl.select(TableImpl.java:630)at Overview_Examples.main(Overview_Examples.java:42)

原因:

Flink SQL的table api只支持

only_full_group_by

 

逻辑:

groupy以后剩下的字段就是 groupby里面里面包含的字段。

 

解决方案:

        Table counts = Orders
              .groupBy($("user"),$("product"))
                .select($("user"),$("product"),$("amount").sum().as("cnt"));

解决方案解析:

select后面的字段必须包含在groupby中,不包含amount这种被sum处理过的.

 

为啥在mysql中不满足上述规律也可以正常运行?

因为你的Mysql是5.7以下的.

Flink Table API使用的是mysql5.7以上的语法.

总结

以上是生活随笔为你收集整理的Cannot resolve field [product], input field list:[user, EXPR$0]的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。