Поделиться через


Окна количества

В окне количества определено подмножество событий, произошедших за некоторый период времени, над которыми можно выполнить некоторые вычисления с множествами (например, статистические). Окна количества, как и окна моментальных снимков, не имеют фиксированного размера. Размер определяется числом событий, содержащихся в окне. Это позволяет реализовать ряд сценариев, в которых операции с множествами применяются к определенному числу событий в потоке, которые имеют нерегулярную частоту возникновения.

СоветСовет

В этой версии StreamInsight окна количества могут быть использованы только с определенными пользователем агрегатами или операторами, но не со встроенными агрегатами и TopK.

Общее описание окон событий, сведения об их реализации и использовании в StreamInsight см. в разделе Использование окон событий.

Основные сведения об окнах количества

Переменный размер окна количества определяется количеством событий с различным временем начала на временной шкале. Множество окон количества с количеством N определяется как совокупность интервалов времени, содержащих N точек, представляющих время начала последовательных событий, где N не меньше 1. Если говорить точнее, то каждый из таких интервалов завершается во время начала уникального события с номером N плюс один такт. Окна количества перемещаются по временной шкале с каждым событием, имеющим уникальное время начала. Поэтому каждое новое событие, определяющее новое время начала, вызывает создание нового окна количества при условии, что подсчет выполнен. Это значит, что пока количество событий с различным временем начала остается меньше N, новое окно не будет создаваться. Как и в случае с «прыгающими» окнами, расстояние между окнами количества называется длиной прыжка, однако, в отличие от прыгающих окон, в общем случае длина прыжка для окон количества не будет постоянной.

Если каждое из событий на временной шкале имеет уникальную отметку времени, то количество событий в каждом из таких окон будет равно N. Если несколько событий имеют одно и то же время начала, то количество содержащихся в окне событий будет больше N. Это важно понимать при применении к окну статистических вычислений.

На следующем рисунке показан поток с тремя событиями. e1, e2 и e3. Вертикальные полосы показывают границы окон количества, определенных этими событиями. Потоки событий, окрашенные в голубой цвет, представляют потоки событий, перемещающиеся по времени. Оранжевые прямоугольники показывают окна количества и события, содержащиеся в каждом окне. Первые два события с уникальным временем начала относятся к событиям e1 и e2, а первое окно количества перекрывает соответствующий период, начиная от времени начала e1 и заканчивая временем начала e2 плюс один такт. Второе окно содержит события с временем начала e2 и e3:

Окно количества для событий.

Обратите внимание, что этот рисунок показывает события в окнах, уже отсеченных входной политикой окна. Входной политикой, как и для всех остальных окон StreamInsight, является отсечение всех событий по размерам окна. Агрегатная функция или оператор, зависящие от времени, будут использовать в окнах это отсеченное время жизни событий вместо первоначального.

На следующем рисунке показаны окна количества с точечными событиями, которые допустимы только в течение одного момента времени. Этот рисунок служит дополнительной иллюстрацией того, что метод CountByStartTimeWindow() подсчитывает не сами события, а события с различным временем начала. На рисунке показан поток точечных событий. Вертикальные полосы показывают время начала окон количества, определенное точечными событиями. Потоки событий, окрашенные в голубой цвет, представляют потоки событий, перемещающиеся по времени. Заметьте, что два события расположены в одних временных границах. Оранжевые прямоугольники показывают окна количества и события, содержащиеся в каждом окне. Два выровненных события попадают в один элемент в соответствии с параметром окна N.

Окно количества.

В случае точечных событий правило, по которому окно при определении времени окончания окна добавляет ко времени начала события с номером N один такт, приводит к тому, что в окно полностью попадают все события.

Определение окна количества

Окно количества определяется количеством событий с различным временем начала на временной шкале. Окно количества задается на языке LINQ, как показано в следующем примере. Входная политика — всегда ClipToWindow, а выходная политика — всегда PointAlignToWindowEnd.

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

Поскольку окна количества в настоящее время не могут быть использованы со встроенными статистическими функциями, для приведенного выше примера предполагается, что используется определенная пользователем статистическая функция MySum.

Как и для других окон, эта выходная политика вывода окна применяется к результату операции с множествами. Единственная доступная выходная политика для окон количества выдает точечное событие в конце окна. Отметка времени этой точки совпадает с временем начала последнего события в окне. Иными словами, точечные события будут по-прежнему находиться в границах окна. При применении статистического вычисления к входным данным на вышеприведенной диаграмме выходной поток выглядит следующим образом:

Окно количества с результатами статистической обработки.

Для определяемого пользователем оператора, критичного по времени, в котором могут производиться результирующие события, включающие отметки времени, эти отметки времени перезаписываются выходной политикой. Каждое событие, возвращаемое UDO, преобразуется в точечное событие в конце окна так, что точка выравнивается со временем начала последнего события в окне, так же как и событие одного результата в статистической функции из предыдущей диаграммы.

См. также

Основные понятия

Агрегаты

TopK

Определяемые пользователем статистические функции и операторы

Прыгающие окна

Окна моментальных снимков