首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Siddhi编写序列查询

用Siddhi编写序列查询
EN

Stack Overflow用户
提问于 2016-02-04 10:22:56
回答 1查看 391关注 0票数 2

我正试图在Siddhi实现一个示例项目。有一个带有一个属性height的输入事件流。我想编写一个sequence查询,当有三个相同高度的连续事件时,该查询提供一个回调。我提到过博客,但我无法正确地理解语法。当我试图运行序列查询时,我得到了SiddhiParserException

这是相应的模式查询,运行良好。

代码语言:javascript
复制
executionPlan = "" +
                "define stream cseEventStream (height int); " +
                "" +
                "@info(name = 'query1') " +
                "from every e1 =  cseEventStream " +
                "-> e2 = cseEventStream[e1.height == e2.height]" +
                "-> e3 = cseEventStream[e2.height == e3.height] "+
                "select e1.height as height1, e2.height as height2, e3.height as height3  " + 
                "insert into outputStream ;";

下面是我如何编写序列查询,以获得两个连续的等高,但我无法得到正确的。

代码语言:javascript
复制
executionPlan = "" +
                "define stream cseEventStream (height int); " +
                "" +
                "@info(name = 'query1') " +
                "from every e1 =  cseEventStream, e2 = cseEventStream[e1.height == height]" +
                "select e1.height as height1, e2.height as height2" + 
                "insert into outputStream ;";

添加错误日志:

代码语言:javascript
复制
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.siddhi.query.compiler.exception.SiddhiParserException: You have an error in your SiddhiQL at line 1:195, extraneous input 'into' expecting {',', GROUP, HAVING, INSERT, DELETE, UPDATE, RETURN, OUTPUT}
at org.wso2.siddhi.query.compiler.internal.SiddhiErrorListener.syntaxError(SiddhiErrorListener.java:36)
at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:65)
at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:566)
at org.antlr.v4.runtime.DefaultErrorStrategy.reportUnwantedToken(DefaultErrorStrategy.java:375)
at org.antlr.v4.runtime.DefaultErrorStrategy.sync(DefaultErrorStrategy.java:273)
at org.wso2.siddhi.query.compiler.SiddhiQLParser.query_section(SiddhiQLParser.java:3702)
at org.wso2.siddhi.query.compiler.SiddhiQLParser.query(SiddhiQLParser.java:1903)
at org.wso2.siddhi.query.compiler.SiddhiQLParser.execution_element(SiddhiQLParser.java:619)
at org.wso2.siddhi.query.compiler.SiddhiQLParser.execution_plan(SiddhiQLParser.java:550)
at org.wso2.siddhi.query.compiler.SiddhiQLParser.parse(SiddhiQLParser.java:152)
at org.wso2.siddhi.query.compiler.SiddhiCompiler.parse(SiddhiCompiler.java:63)
at org.wso2.siddhi.core.SiddhiManager.createExecutionPlanRuntime(SiddhiManager.java:61)
at mainpkg.DriverClass.initiateExecutionPlan(DriverClass.java:54)
at mainpkg.DriverClass.main(DriverClass.java:37)

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-05 08:35:36

我设法解决了这个问题。这是字符串段末尾缺少的空格。注意“]和"height2”之后的第5行和第6行末尾的空格

代码语言:javascript
复制
executionPlan = "" +
                "define stream cseEventStream (height int); " +
                "" +
                "@info(name = 'query1') " +
                "from every e1 =  cseEventStream, e2 = cseEventStream[e1.height == height] " +
                "select e1.height as height1, e2.height as height2 " + 
                "insert into outputStream ;";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35198391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档