2016-05-13 34 views
2

我試圖構建一個執行計劃,它將不同的事件聚合爲一個並計算出現次數(CurrentEventId)。該計劃看起來如下:將WSO2 CEP Siddhi事件聚合到單個json對象

define stream inStream (correlation_EventName string, LastEventId int, CurrentEventId int); 

partition with (CurrentEventId of inStream) 
begin 

    from inStream#window.timeBatch(10 sec) 
    select correlation_EventName as meta_Label, CurrentEventId as meta_Id, LastEventId as correlation_From, CurrentEventId as correlation_To, count(CurrentEventId) as correlation_Value 
    insert into outStream 

end; 

其實,我有以下的輸出:

Event: {"event":{"metaData":{"Label":"StartCalculationEvent","Id":2},"correlationData":{"From":2,"To":2,"Value":66}}} 
Event: {"event":{"metaData":{"Label":"LoginEvent","Id":1},"correlationData":{"From":1,"To":1,"Value":693}}} 

我只需要一個每10秒,而不是多個事件事件。此事件應具有以下格式:

[ 
    { 
     "event":{"metaData":"..."} 
    }, 
    { 
     "event":{"metaData":"..."} 
    } 
] 

您對如何實現這一點有了一個想法嗎?

回答

0

使用siddhi分區,將爲每個分區變量生成單獨的事件(在本例中爲CurrentEventId)。既然你有兩個CurrentEventIds,你會在outStream中收到兩個事件。如果有三個CurrentEventIds,您將分別收到3個事件。

截至目前,無法按照您的要求在siddhi中批處理事件。有一個相關的Jira,它與您所期望的功能類似。