Если у меня есть поток точек с данными точек от нескольких «единиц», идентифицированных с помощью UnitId и даты начала:
var input = CepStream<EventPayload>.Create("input", typeof(SQLPayloadInputAdapterFactory), inputConfig, EventShape.Point);
и я конвертирую его в интервальный поток:
var signal = input
.AlterEventDuration(e => TimeSpan.MaxValue)
.ClipEventDuration(input, (e1, e2) => (e1.UnitID == e2.UnitID));
Я могу получить продолжительность событий в потоке сигнала при чтении выходным адаптером, поскольку он может видеть объект события и считывать его начальное и конечное значения.
Что мне нужно сделать, так это запросить поток «сигнал», чтобы найти самое длинное событие в 1-минутном переворачивающемся окне.
var groupWindowQuery = from e in signal
group e by e.UnitID into unitGroups
from window in unitGroups.TumblingWindow(
TimeSpan.FromSeconds(60),
HoppingWindowOutputPolicy.ClipToWindowEnd)
select new
{
id = unitGroups.Key,
count = window.Count(),
};
... Дает мне группы единиц с количеством и т. д., но я не могу получить продолжительность события для передачи другим запросам, поскольку я могу видеть только значения полезной нагрузки в groupWindowQuery
.
Как я могу запросить свойства события, чтобы найти самое длинное событие в переворачивающемся окне?
Или можно установить значения в полезной нагрузке, чтобы я мог указать дату окончания событий точки при создании потока сигнала из точек?
(не имеет значения, что продолжительность будет 1 минута для событий, которые охватывают окно)