Java 转换数据集中的Flink CEP表时出错<;世界其他地区>;对象
我在Java 转换数据集中的Flink CEP表时出错<;世界其他地区>;对象,java,sql,apache-flink,flink-cep,Java,Sql,Apache Flink,Flink Cep,我在Apache-Flink中创建了一个batchTableEnvironment,并创建了一个Table对象,在其中加载了数据。现在我想搜索一些模式。我是在用这个。下面查询的任务是查找mGroup中avgResult未低于某个阈值的最长时段。其中,mGroup是一个整数值,如100、200、300等。Avgresult是双精度值。当我编译查询部分时,我没有得到任何错误。将表转换为数据集时出现错误。在查询下方,您可以看到错误消息 ExecutionEnvironment fbEnv = Exec
Apache-Flink
中创建了一个batchTableEnvironment
,并创建了一个Table
对象,在其中加载了数据。现在我想搜索一些模式。我是在用这个。下面查询的任务是查找mGroup
中avgResult
未低于某个阈值的最长时段。其中,mGroup
是一个整数
值,如100、200、300等。Avgresult
是双精度值。当我编译查询部分时,我没有得到任何错误。将表
转换为数据集
时出现错误。在查询下方,您可以看到错误消息
ExecutionEnvironment fbEnv = ExecutionEnvironment.getExecutionEnvironment();
BatchTableEnvironment tableEnv = BatchTableEnvironment.create(fbEnv);
Table trendTable = tableEnv.sqlQuery(
" SELECT * " +
" FROM tableAvg " +
" MATCH_RECOGNIZE(" +
" PARTITION BY mType " +
" ORDER BY mGroup " +
" MEASURES " +
" FIRST(A.mGroup) as startGr, " +
" LAST(A.mGroup) as endGr, " +
" A.avgResult as avgRes" +
" ONE ROW PER MATCH " +
" AFTER MATCH SKIP PAST LAST ROW " +
" PATTERN (A+ B) " +
" DEFINE " +
" A AS A.avgResult < 50 " +
") "
);
tableEnv.registerTable("TrendTable", trendTable);
DataSet<Row> result = tableEnv.toDataSet(trendTable, Row.class);
/////////////////////ERROR MESSAGE BELOW
Exception in thread "main" org.apache.flink.table.api.TableException: Cannot generate a valid execution plan for the given query:
FlinkLogicalMatch(partition=[[$1]], order=[[2]], outputFields=[[mType, startGr, endGr, avgRes]], allRows=[false], after=[FLAG(SKIP PAST LAST ROW)], pattern=[(PATTERN_QUANTIFIER(_UTF-16LE'A', 1, -1, false), _UTF-16LE'B')], isStrictStarts=[false], isStrictEnds=[false], subsets=[[]], patternDefinitions=[[<(PREV(A.$0, 0), 50)]], inputFields=[[sumResult, mType, EXPR$2]])
FlinkLogicalSort(sort0=[$2], dir0=[ASC])
FlinkLogicalCalc(expr#0..5=[{inputs}], expr#6=[/($t2, $t3)], expr#7=[99], expr#8=[>($t5, $t7)], sumResult=[$t6], mType=[$t1], EXPR$2=[$t4], $condition=[$t8])
FlinkLogicalAggregate(group=[{0, 1}], agg#0=[SUM($2)], agg#1=[SUM($3)], agg#2=[MAX($4)], agg#3=[COUNT()])
FlinkLogicalCalc(expr#0..2=[{inputs}], expr#3=[1], expr#4=[-($t0, $t3)], expr#5=[100], expr#6=[/($t4, $t5)], expr#7=[1.0:DECIMAL(2, 1)], $f0=[$t6], mType=[$t1], mValue=[$t2], $f3=[$t7], mID=[$t0])
FlinkLogicalTableSourceScan(table=[[default_catalog, default_database, H]], fields=[mID, dateTime, mValue, unixDateTime, mType], source=[CsvTableSource(read fields: mID, mType, mValue)])
This exception indicates that the query uses an unsupported SQL feature.
Please check the documentation for the set of currently supported SQL features.
at org.apache.flink.table.plan.Optimizer.runVolcanoPlanner(Optimizer.scala:245)
at org.apache.flink.table.plan.Optimizer.optimizePhysicalPlan(Optimizer.scala:170)
at org.apache.flink.table.plan.BatchOptimizer.optimize(BatchOptimizer.scala:57)
at org.apache.flink.table.api.internal.BatchTableEnvImpl.translate(BatchTableEnvImpl.scala:280)
at org.apache.flink.table.api.java.internal.BatchTableEnvironmentImpl.toDataSet(BatchTableEnvironmentImpl.scala:71)
at StreamTableEnv.main(StreamTableEnv.java:169)
ExecutionEnvironment fbEnv=ExecutionEnvironment.getExecutionEnvironment();
BatchTableEnvironment tablenv=BatchTableEnvironment.create(fbEnv);
Table trendTable=tableEnv.sqlQuery(
“选择*”+
“来自tableAvg”+
“匹配您识别(”+
“按mType分区”+
“按经理组订购”+
“措施”+
第一个(A.mGroup)作为startGr+
最后一个(A.mGroup)作为endGr+
“A.avgResult作为avgRes”+
“每场比赛一行”+
“匹配后跳过最后一行”+
“模式(A+B)”+
“定义”+
“A作为A.avgResult<50”+
") "
);
表环境注册表(“趋势表”,趋势表);
数据集结果=tableEnv.toDataSet(trendTable,Row.class);
/////////////////////下面是错误消息
线程“main”org.apache.flink.table.api.TableException中的异常:无法为给定查询生成有效的执行计划:
FlinkLogicalMatch(分区=[$1]]、顺序=[[2]]、输出字段=[[mType、startGr、endGr、avgRes]]、所有行=[false]、后=[FLAG(跳过最后一行)]、模式=[(模式量词([U UTF-16LE'A',1,-1,false)、[U UTF-16LE'B')、ISSTRITSTARTS=[false]、ISSTRITSTRITTENDERS=[false]、子集=[]、模式定义=[($t5、$t7]、结果=[$t6]、mType=[$t1],EXPR$2=[$t4],$condition=[$t8])
弗林克逻辑聚合(组=[{0,1}],聚合0=[总和($2)],聚合1=[总和($3)],聚合2=[最大值($4)],聚合3=[计数())
FlinkLogicalCalc(expr#0..2=[{inputs}],expr#3=[1],expr#4=[-($t0,$t3)],expr#5=[100],expr#6=[/($t4,$t5)],expr#7=[1.0:十进制(2,1)],$f0=[$t6],mType=[$t1],mValue=[$t2],$f3=$t7],mID[$t0]
FlinkLogicalTableSourceScan(表=[[default\u catalog,default\u database,H]],字段=[mID,dateTime,MVValue,unixDateTime,mType],源=[CsvTableSource(读取字段:mID,mType,MVValue)])
此异常表示查询使用了不受支持的SQL功能。
请查看文档以了解当前支持的SQL功能集。
在org.apache.flink.table.plan.Optimizer.RunVolcantPlanner上(Optimizer.scala:245)
位于org.apache.flink.table.plan.Optimizer.OptimizerPhysicalPlan(Optimizer.scala:170)
位于org.apache.flink.table.plan.BatchOptimizer.optimize(BatchOptimizer.scala:57)
位于org.apache.flink.table.api.internal.BatchTableEnvImpl.translate(BatchTableEnvImpl.scala:280)
位于org.apache.flink.table.api.java.internal.BatchTableEnvironmentImpl.toDataSet(BatchTableEnvironmentImpl.scala:71)
位于streamtablenv.main(streamtablenv.java:169)
CEP库和MATCH\u Recognite仅在流式API(而非批处理)之上工作,这意味着您需要使用StreamTableEnvironment
而不是BatchTableEnvironmentDavid,您能帮我解决这个问题吗?