【问题标题】:Exception defining tables in execution plans of WSO2 CEP 4.0.0WSO2 CEP 4.0.0 执行计划中的异常定义表
【发布时间】:2015-10-09 10:52:53
【问题描述】:

我正在尝试从 WSO2 CEP 3.1.0 迁移到 WSO2 CEP 4.0.0。

我已将现有执行计划转换为新的 SiddhiQL 语法:

@Plan:name('occurredFailure')

@Import('responseTimeStream:1.0.0')
define stream responseTimeStream (service string, responseTime int);

@Import('queryTimeStream:1.0.0')
define stream queryTimeStream (service string, queryTime int);

@Export('occurredFailureStream:1.0.0')
define stream occurredFailureStream (service string, cause string);

define table slowestQueryTimeTable (service string, slowestQueryTime int);

from responseTimeStream[responseTime == 0]
select service, 'noResponse' as cause
insert into occurredFailureStream;

from queryTimeStream[queryTime >= 5000]
select service, 'queryTimeout' as cause
insert into occurredFailureStream;

from queryTimeStream[not((service == slowestQueryTimeTable.service) in slowestQueryTimeTable)]
select service, queryTime as slowestQueryTime
insert into slowestQueryTimeTable;

from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, queryTime as slowestQueryTime
update slowestQueryTimeTable
on queryTimeStream.service == slowestQueryTimeTable.service;

from responseTimeStream[(service == slowestQueryTimeTable.service and responseTime >= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
select service, 'responseTimeAboveQueryTime' as cause
insert into occurredFailureStream;

不幸的是,当我尝试验证查询表达式时,WSO2 CEP 4.0.0 抛出以下异常:

无法为表“slowestQueryTimeTable”创建更新,引用流:在执行计划“occurredFailure”中找不到queryTimeStream

该错误消息并不是真正有用,因为如果我删除表 'slowestQueryTimeTable' 和与之相关的任何表达式,剩余的查询表达式将成功验证,这意味着确实找到了流 'queryTimeStream'。

你能帮我调试一下这个异常吗?

【问题讨论】:

    标签: wso2 wso2cep siddhi


    【解决方案1】:

    问题出在查询中

    from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
    select service, queryTime as slowestQueryTime
    update slowestQueryTimeTable
     on queryTimeStream.service == slowestQueryTimeTable.service;
    

    您不应在更新条件中使用queryTimeStream,因为输出数据不是来自queryTimeStream。如下更新查询

    from queryTimeStream[(service == slowestQueryTimeTable.service and queryTime <= slowestQueryTimeTable.slowestQueryTime) in slowestQueryTimeTable]
    select service, queryTime as slowestQueryTime
    update slowestQueryTimeTable
     on service == slowestQueryTimeTable.service;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多