Общие сведения о функциях окна

Завершено

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

Azure Stream Analytics включает встроенную поддержку пяти видов темпоральных функций окон. Эти функции позволяют определить временные интервалы, в которые данные агрегируются в запросе. Поддерживаемые функции окна — это переворачивающиеся, прыжки, скольжения, сеансаи моментальных снимков.

Кувырканье

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

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

Пример "Переворачивающееся окно", представленный приведенным ниже запросом, находит максимальное значение чтения в каждом окне за одну минуту. Функции окна применяются в заданиях Stream Analytics с помощью предложения GROUP BY синтаксиса запроса. Предложение GROUP BY в следующем запросе содержит функцию TumblingWindow(), которая задает размер окна в одну минуту.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)

Прыгание

Скользящие функции окон моделируют запланированные перекрывающиеся окна, переходя вперед по фиксированному периоду. Проще всего подумать о них как о скользящих окнах, которые могут перекрываться и выводиться чаще, чем размер окна. На самом деле, неперекрывающиеся окна — это просто разновидность скользящих окон, у которых hop равно его size. При использовании скользящих окон события могут принадлежать нескольким результатирующим наборам окон.

Схема иллюстрирует поток с рядом событий, захваченных в 60-секундных пересекающихся окнах, которые происходят каждые 30 секунд.

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

Следующий запрос демонстрирует использование HoppingWindow(), в котором timeunit задано значение second. windowsize составляет 60 секунд, а hopsize составляет 30 секунд. Этот запрос выводит событие каждые 30 секунд, содержащее максимальное значение измерения, которое наблюдалось за последние 60 секунд.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)

Скользящий

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

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

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

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)

Сеанс

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

Схема иллюстрирует поток с серией событий, распределенных по окнам сеансов с тайм-аутом 20 секунд и максимальной продолжительностью 60 секунд.

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

Следующий запрос измеряет длину сеанса пользователя путем создания SessionWindow из данных кликстрима с timeoutsize в 20 секунд и maximumdurationsize в 60 секунд.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)

Снимок

Снимок группирует события Windows по одинаковым значениям метки времени. В отличие от других типов окон, определенная функция окна не требуется. Вы можете использовать окно моментального снимка, указав функцию System.Timestamp() в предложении GROUP BY запроса.

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

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

SELECT System.TimeStamp() AS WindowTime,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()

System.Timestamp() рассматривается в предложении GROUP BY как определение окна снимка, так как оно группирует события в окно на основе совпадения временных меток.