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]的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。