为什么Apache Flink SQL验证程序为此CEP SQL提供NPE?

问题描述

这是我的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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...