2012-08-08 84 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