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


Использование окон событий

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

В этом разделе

Типы окон

Операции с окнами

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

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

Разъясняет концепцию окна событий.

На предыдущем рисунке показано, как «прыгающее» окно применяется к потоку событий и как статистическое выражение применяется к потоку окон. Форма событий, которые содержат результаты агрегата, зависит от выходной политики окна. Здесь они представлены точечными событиями в конце окна.

Операция работы с окнами превращает поток событий в поток окон (CepWindowStream<T>), который может затем служить основой для операций с множествами. Каждое окно вместе с временной шкалой представляет набор событий. Тип используемого окна определяет, как выровнены события. Окна могут обрабатываться на основе времени или количества. Каждый тип окон представлен оператором работы с окнами.

Операции с множествами преобразуют поток окон в поток событий (CepStream<T>). Такие операции с множествами можно разделить на две следующие группы:

  • Агрегаты, которые дают скалярный результат для набора входных событий;

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

Примерами первой группы служат sum, avg, count и определяемые пользователем агрегатные функции. Один или несколько таких агрегатов могут применяться к оконному потоку так, что одно результирующее событие будет соответствовать каждому входному окну, а результаты скалярного агрегата служат полями полезных данных результирующего события. Например, может понадобиться получить общее значение одного или нескольких полей полезных данных в окне и на основании этих значений выполнить дополнительную обработку или создать поток событий, который будет содержать эти статистические данные.

Примерами второй группы является TopK и определяемые пользователем операторы. Они определяются для оконного потока и в результате вычисления дают нуль или более событий для каждого окна. Например, может понадобиться использовать оператор TopK, чтобы извлечь пять верхних событий из каждого окна моментального снимка, определенного для конкретного входного потока, и создать новый поток событий для дополнительной обработки.

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

StreamInsight поддерживает следующие типы окон:

Задание окон

Как показано на следующем рисунке, спецификация окна состоит из трех частей.

  • Определение окна (интервалы для «прыгающего» окна, количество для окна количества, отсутствие параметров для окна моментального снимка)

  • Преобразование во времени входа (входная политика)

  • Преобразование во времени выхода (выходная политика)

Потоки событий в определяемых пользователем агрегатах

На рисунке дано общее описание преобразований потока, проходящего через операцию со множеством, применяемую к окну.

  1. В точке А поток событий поступает в оконный оператор.

  2. В точке Б оконный оператор создает поток окон. Каждое окно содержит набор событий. Время существования этих событий может изменяться в соответствии со входной политикой. Поток событий поступает в оператор, работающий с множествами (агрегат или определяемый пользователем оператор).

  3. В точке В оператор, работающий с множествами, обрабатывает каждое окно и создает выходной поток событий.

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

    • Определяемые пользователем операторы и TopK создают нуль или более событий. Определяемые пользователем операторы с учетом времени также указывают время существования событий выхода. В определяемых пользователем операторах без учета времени и операторах TopK время существования события выхода по умолчанию устанавливается равным интервалу окна.

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

На блок-схеме три белых прямоугольника представляют параметры оконных операторов.

Политики окон

Оконные операторы создают потоки окон, которые необходимы в качестве выходных данных для любой операции, работающей со множествами. Помимо определения самого окна (через время или количество), автор запроса может задавать следующее: 1) как операция над окнами будет влиять на время существования событий, содержащихся в окне, когда они передаются в операцию с множествами; 2) как должны корректироваться сроки существования результирующих событий операции.

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

Входные политики

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

Входную политику указывать не обязательно. Для удобства класс WindowInputPolicy предоставляет статическое свойство, которое возвращает соответствующий экземпляр (WindowInputPolicy.ClipToWindow).

Выходные политики

В этом выпуске StreamInsight поддерживает следующие выходные политики.

  • Окна моментальных снимков: Время окончания результирующих событий отсекается по времени окончания для окна.

  • «Прыгающие» окна поддерживают следующие две выходные политики:

    • Результирующие события — это точечные события, выровненные по отношению ко времени конца окна.

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

  • Окна количества. Результирующее событие преобразуется в точечное событие в конце окна.

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

  • SnapshotWindowOutputPolicy.Clip (значение по умолчанию, если не указано иное)

  • HoppingWindowOutputPolicy.ClipToWindowEnd

  • HoppingWindowOutputPolicy.PointAlignToWindowEnd (значение по умолчанию, если не указано иное)

  • CountWindowOutputPolicy.PointAlignToWindowEnd (значение по умолчанию, если не указано иное)

Ниже приведена сводка всех доступных окон и их влияние на результат операции с множествами.

Окно моментального снимка:

Выходная политика: всегда «Отсечение до конца окна»

Выходное время существования:

ClipToWindowEnd

Встроенные агрегатные функции

размер окна

TopK

размер окна

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

размер окна

Независимый от времени определяемый пользователем оператор

размер окна

Зависимая от времени определяемая пользователем агрегатная функция/определяемый пользователем оператор

отсутствует для окон моментального снимка

«Прыгающее» окно:

Выходная политика: «Отсечение до конца окна» или «PointAlignToWindowEnd»

Выходное время существования:

ClipToWindowEnd

PointAlignToWindowEnd

Встроенные агрегатные функции

размер окна

точка в конце окна

TopK

размер окна

точка в конце окна

UDA

размер окна

точка в конце окна

UDO

размер окна

Точки в конце окна

Зависимый от времени определяемый пользователем оператор

возвращенные значения времени существования, усеченные до конца окна

точки в конце окна

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

Выходная политика: всегда «Точка в конце окна»

Выходное время существования:

PointAlignToWindowEnd

Встроенные агрегатные функции

отсутствует для окон количества

TopK

отсутствует для окон количества

UDA

точка в конце окна

UDO

точки в конце окна

Зависимый от времени определяемый пользователем оператор

точки в конце окна

См. также

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

Агрегаты

TopK

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