问题描述
这是我的Flink CEP MATCH_RECOGNIZE sql。
SELECT E.*
FROM MyEvents
MATCH_RECOGNIZE (
ORDER BY procTime
MEASURES
A.id as id,A.name as name
AFTER MATCH SKIP TO NEXT ROW
PATTERN (A)
DEFINE
A AS source='XYZ' and name IN ('EVENT_SRC1','EVENT_SRC2')
AND EXISTS (select eap.* from MyEvents AS eap where eap.name IN ('EVENT_SRC1'))
AND EXISTS (select eam.* from MyEvents AS eam where eam.name IN ('EVENT_SRC2'))
) AS E;
给出错误为
Caused by: java.lang.NullPointerException: null
at java.util.arraydeque.addFirst(arraydeque.java:228)
at java.util.arraydeque.push(arraydeque.java:503)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:49)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:33)
at org.apache.calcite.sql.sqlCall.accept(sqlCall.java:139)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:134)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:101)
at org.apache.calcite.sql.sqlOperator.acceptCall(sqlOperator.java:884)
at org.apache.calcite.sql.validate.sqlValidatorImpl$Expander.visitScoped(sqlValidatorImpl.java:6009)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:50)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:33)
at org.apache.calcite.sql.sqlCall.accept(sqlCall.java:139)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:134)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:101)
at org.apache.calcite.sql.sqlOperator.acceptCall(sqlOperator.java:884)
at org.apache.calcite.sql.validate.sqlValidatorImpl$Expander.visitScoped(sqlValidatorImpl.java:6009)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:50)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:33)
at org.apache.calcite.sql.sqlCall.accept(sqlCall.java:139)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:134)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:101)
at org.apache.calcite.sql.sqlOperator.acceptCall(sqlOperator.java:884)
at org.apache.calcite.sql.validate.sqlValidatorImpl$Expander.visitScoped(sqlValidatorImpl.java:6009)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:50)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:33)
at org.apache.calcite.sql.sqlCall.accept(sqlCall.java:139)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:134)
at org.apache.calcite.sql.util.sqlShuttle$CallcopyingArgHandler.visitChild(sqlShuttle.java:101)
at org.apache.calcite.sql.sqlAsOperator.acceptCall(sqlAsOperator.java:121)
at org.apache.calcite.sql.validate.sqlValidatorImpl$Expander.visitScoped(sqlValidatorImpl.java:6009)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:50)
at org.apache.calcite.sql.validate.sqlScopedShuttle.visit(sqlScopedShuttle.java:33)
at org.apache.calcite.sql.sqlCall.accept(sqlCall.java:139)
at org.apache.calcite.sql.validate.sqlValidatorImpl.expand(sqlValidatorImpl.java:5583)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateDeFinitions(sqlValidatorImpl.java:5408)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateMatchRecognize(sqlValidatorImpl.java:5287)
at org.apache.calcite.sql.validate.MatchRecognizeNamespace.validateImpl(MatchRecognizeNamespace.java:38)
at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateNamespace(sqlValidatorImpl.java:1110)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateQuery(sqlValidatorImpl.java:1084)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateFrom(sqlValidatorImpl.java:3256)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateFrom(sqlValidatorImpl.java:3238)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateSelect(sqlValidatorImpl.java:3510)
at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60)
at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateNamespace(sqlValidatorImpl.java:1110)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateQuery(sqlValidatorImpl.java:1084)
at org.apache.calcite.sql.sqlSelect.validate(sqlSelect.java:232)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validateScopedExpression(sqlValidatorImpl.java:1059)
at org.apache.calcite.sql.validate.sqlValidatorImpl.validate(sqlValidatorImpl.java:766)
at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:141)
... 20 common frames omitted
如果我删除了2个EXISTS条件,那么它将起作用。另外,我尝试为我的数据流创建另一个表,并将其用于内部查询,但是仍然遇到相同的错误?我做错了什么还是Flink CEP sql不支持这种语法?
注意-我正在使用1.11版本。我已经在普通的FLINK sql中尝试过EXISTS子句(即,选择.... from..where ..),它可以工作。但不适用于Flink CEP sql。 谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)