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


Общие сведения о функциях управления окнами Stream Analytics

При использовании потоковой передачи в реальном времени необходимо выполнять операции с теми данными, которые содержатся во временных окнах. В Stream Analytics имеется встроенная поддержка функций управления окнами. Это позволяет разработчикам выполнять сложные задания по обработке потоков с минимальными усилиями.

Существует пять видов темпоральных окон для выбора:

Функции управления окнами используются в предложении GROUP BY в синтаксических конструкциях запросов в заданиях Stream Analytics. Можно также агрегировать события в нескольких окнах с помощью функции Windows().

Все операции управления окнами выводят результаты в конце окна. При запуске задания stream analytics можно указать время начала выходных данных задания, а система автоматически извлекает предыдущие события в входящих потоках, чтобы вывести первое окно в указанное время. Например, при запуске с параметра Now он начинает выдавать данные немедленно. Результатом для окна будет единичное событие, полученное на основе выбранной агрегатной функции. Выходное событие имеет метку времени окончания окна, а все функции окна определяются фиксированной длиной.

Diagram that shows the concept of Stream Analytics window functions.

"Переворачивающееся" окно

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

Ключевыми разными способами переворачивающегося окна являются:

  • Они не повторяются.
  • Они не перекрываются.
  • Событие не может принадлежать нескольким переворачивающимся окнам.

Diagram that shows an example Stream Analytics tumbling window.

Ниже приведены входные данные для примера:

Метка CreatedAt Часовой пояс
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

Ниже приведен пример запроса:

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

Пример выходных данных:

WindowEndTime Часовой пояс Count
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

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

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

Diagram that shows an example of the hopping window.

Ниже приведены примеры данных:

Метка CreatedAt Раздел
1 2021-10-26T10:15:01 Потоковая передача
5 2021-10-26T10:15:03 Потоковая передача
4 2021-10-26T10:15:06 Потоковая передача
... ... ...

Ниже приведен пример запроса:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

Пример выходных данных:

WindowEndTime Раздел Count
2021-10-26T10:15:10 Потоковая передача 5
2021-10-26T10:15:15 Потоковая передача 3
2021-10-26T10:15:20 Потоковая передача 2
2021-10-26T10:15:25 Потоковая передача 4
2021-10-26T10:15:30 Потоковая передача 4

"Скользящее" окно

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

Diagram that shows an example of a sliding window.

Ниже приведен пример входных данных:

Метка CreatedAt Раздел
1 2021-10-26T10:15:10 Потоковая передача
5 2021-10-26T10:15:12 Потоковая передача
9 2021-10-26T10:15:15 Потоковая передача
7 2021-10-26T10:15:15 Потоковая передача
8 2021-10-26T10:15:27 Потоковая передача

Ниже приведен пример запроса:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

Выходные данные:

WindowEndTime Раздел Count
2021-10-26T10:15:15 Потоковая передача 4
2021-10-26T10:15:20 Потоковая передача 3

"Сеансовое" окно

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

  • Время ожидания
  • Максимальная длительность
  • Ключ секционирования (необязательно).

Diagram that shows a sample Stream Analytics session window.

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

Если события продолжаются в течение указанного времени ожидания, окно сеанса продолжает расширяться до достижения максимальной длительности. Интервалы проверки максимальной продолжительности задаются равными указанной максимальной длительности. Например, если максимальная длительность составляет 10, то проверка в окне превышает максимальную длительность в t = 0, 10, 20, 30 и т. д.

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

Ниже приведен пример входных данных:

Метка CreatedAt Раздел
1 2021-10-26T10:15:01 Потоковая передача
2 2021-10-26T10:15:04 Потоковая передача
3 2021-10-26T10:15:13 Потоковая передача
... ... ...

Ниже приведен пример запроса:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

Выходные данные:

WindowEndTime Раздел Count
2021-10-26T10:15:09 Потоковая передача 2
2021-10-26T10:15:24 Потоковая передача 4
2021-10-26T10:15:31 Потоковая передача 2
2021-10-26T10:15:39 Потоковая передача 1

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

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

Diagram that shows a sample Steam Analytics snapshot window.

Ниже приведен пример входных данных:

Метка CreatedAt Раздел
1 2021-10-26T10:15:04 Потоковая передача
2 2021-10-26T10:15:04 Потоковая передача
3 2021-10-26T10:15:04 Потоковая передача
... ... ...

Ниже приведен пример запроса:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Пример выходных данных:

WindowEndTime Раздел Count
2021-10-26T10:15:04 Потоковая передача 4
2021-10-26T10:15:10 Потоковая передача 2
2021-10-26T10:15:13 Потоковая передача 1
2021-10-26T10:15:22 Потоковая передача 2

Дальнейшие действия

См. следующие статьи: