2017-04-05 7 views
0

以下のストリームから、温度が90を超えると2回発生したイベントを警告します。警告される)。私はこのような何かを書かれているWSO2 CEP:Siddhi QL:特定の条件に一致した後にイベントを一貫してアラートする方法

InputStream=[1001,91] 
InputStream=[1001,86] 
InputStream=[1002,70] 
InputStream=[1001,85] 
InputStream=[1003,70] 
InputStream=[1003,85] 
InputStream=[1002,70] 
InputStream=[1003,70] 
InputStream=[1003,87] 
InputStream=[1002,70] 
InputStream=[1001,95] 
InputStream=[1001,96] 
InputStream=[1001,97] 
InputStream=[1001,98] 
InputStream=[1001,98] 

@Plan:name('TestExecutionPlan') 

define stream InputStream (id string, temp int); 

partition with (id of InputStream) 
begin 
from InputStream 
select id, temp 
having temp > 90 
insert into CriticalStream 
end; 

from CriticalStream[count(id) == 2] 
select id, temp 
group by id 
--having count(id) == 2 
insert into EventReporter; 

そのは、EventReporterはストリーム内のみ1イベントに警告が。

Below is the screen shot from Try It

私は[1001,97]を持っているEventReporterはストリームを期待していて、[1001,98]だけでなく、今それは[1001,95]のための唯一の記録を持っています。誰かが私がここで間違っていることを指摘してもらえますか?グループ化してイベントをどのようにループできますか? window.timeとwindow.lengthを追加しようとしましたが、目的の出力が得られませんでした。どんな助けや指導も本当に感謝しています。ありがとうございました。

答えて

1

パーティションは必要ありません。フィルタと長さバッチウィンドウを使用して、目的の出力を得ることができます。以下の実行計画を試してください。

@Plan:name('ExecutionPlan') 

@Import('InputStream:1.0.0') 
define stream InputStream (id string, temp int); 

/* Filter events with temp > 90 */ 
from InputStream[temp > 90] 
insert into CriticalStream; 

/* Aggregate within a lengthBatch window, while group by id*/ 
from CriticalStream#window.lengthBatch(2) 
select id, temp, count() as count 
group by id 
insert into EventReporter; 

/* Just for logging the result in the cosole */ 
from EventReporter#log("Logging EventReporter : ") 
insert into #temp; 
+0

Hi Grainier、その解決策が機能しました。あなたの時間と助けをありがとう、ありがとう。 – Kannan

+0

Grainier、別の質問があります:http://stackoverflow.com/questions/43186895/wso2-cep-siddhi-ql-creating-a-unique-stream-with-similar-event-records 本当にありがとうございますそれを見て貴重なコメントをすることができます。ありがとうございました。 – Kannan

関連する問題