2012-08-08 86 views
1

假設我有一個具有已知結束時間的間隔事件,是否有方法在所述間隔事件到期之前觸發另一個事件。這樣做的目的是在那時我需要做一個聚合。CEPStream延遲和事件結束

或者是有沒有辦法做一個查詢(這是不理想的,但我可能不得不求助於它)

(from input in inputStream 
select input).AddDelay(input.EndTime - DateTime.UtcNow) 

如果我的理解是完全關閉,請提出一個更好的辦法。

回答

1

首先,我們需要過濾您的源碼流以獲取x1事件流。

var x1Stream = from e in sourceStream 
      where e.ItemId == "X1" 
      select new {e.ItemId, e.Timestamp} 

接下來,我們需要過濾源碼流以獲取非x1事件流。

var nonX1Stream = from e in sourceStream 
      where e.ItemId != "X1" 
      select e; 

現在,我們將與非X1事件流加入X1事件流來獲取所有的X1事件過程中發生的非X1事件的列表。

var x = from l in x1Stream 
    from r in nonX1Stream 
    select new {l.ItemId, l.Timestamp, r}; 

獲得一個X1事件過程中發生的,需要某種HoppingWindow的非X1事件的計數要能夠在一個固定的時間段實際上算上流中的事件。你也可以調用ToEnumerable()來在沒有窗口的情況下進行分組。

var y = from e in x.ToEnumerable() 
    group e by new {e.ItemId, e.Timestamp} 
    into g 
    select new {g.Key.ItemId, g.Key.Timestamp, Count = g.Count()}; 
+0

你搖滾。謝謝 – Alwyn 2012-08-10 21:31:41