CEPStream延迟和事件结束

时间:2012-08-08 17:03:48

标签: c# streaminsight

假设我有一个已知结束时间的间隔事件,是否有办法在所述间隔事件到期之前触发另一个事件。这样做的目的是在那时我需要做一个聚合。

或者有一种方法可以进行查询(这不是所希望的,但我可能不得不诉诸它)

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

如果我的理解完全没有,请提出更好的方法。

1 个答案:

答案 0 :(得分: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事件期间发生的非x1事件将需要某种HoppingWindow能够在固定的时间段内实际计算流中的事件。您也可以调用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()};