Общие сведения о функциях управления окнами Stream Analytics
При использовании потоковой передачи в реальном времени необходимо выполнять операции с теми данными, которые содержатся во временных окнах. В Stream Analytics имеется встроенная поддержка функций управления окнами. Это позволяет разработчикам выполнять сложные задания по обработке потоков с минимальными усилиями.
Существует пять видов темпоральных окон для выбора:
Функции управления окнами используются в предложении GROUP BY в синтаксических конструкциях запросов в заданиях Stream Analytics. Можно также агрегировать события в нескольких окнах с помощью функции Windows().
Все операции управления окнами выводят результаты в конце окна. При запуске задания stream analytics можно указать время начала выходных данных задания, а система автоматически извлекает предыдущие события в входящих потоках, чтобы вывести первое окно в указанное время. Например, при запуске с параметра Now он начинает выдавать данные немедленно. Результатом для окна будет единичное событие, полученное на основе выбранной агрегатной функции. Выходное событие имеет метку времени окончания окна, а все функции окна определяются фиксированной длиной.
"Переворачивающееся" окно
Используйте функции "Переворачивающееся окно", чтобы сегментировать поток данных в отдельные сегменты времени и выполнять функцию против них.
Ключевыми разными способами переворачивающегося окна являются:
- Они не повторяются.
- Они не перекрываются.
- Событие не может принадлежать нескольким переворачивающимся окнам.
Ниже приведены входные данные для примера:
Метка | 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 |
"Прыгающее" окно
Функции прыгающего окна смещаются вперед на фиксированный отрезок времени. Их можно легко представить как переворачивающиеся окна, которые могут перекрываться и создаваться чаще, чем размер окна. События могут принадлежать к нескольким результирующим наборам "прыгающего" окна. Если для "прыгающего" окна указать длину прыжка, точно совпадающую с размером окна, оно будет полностью идентично "переворачивающемуся" окну.
Ниже приведены примеры данных:
Метка | 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 |
"Скользящее" окно
Скользящие окна, в отличие от переворачивающегося или прыжкового окна, выходные события только для точек во времени, когда содержимое окна фактически изменяется. Иными словами, когда событие входит в окно или выходит из него. Таким образом, у каждого окна есть по меньшей мере одно событие. Подобно прыжкам окна, события могут принадлежать нескольким скользящим окнам.
Ниже приведен пример входных данных:
Метка | 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 |
"Сеансовое" окно
События группы окон сеанса , поступающие в аналогичное время, отфильтровывают периоды времени, в которых нет данных. Он имеет три основных параметра:
- Время ожидания
- Максимальная длительность
- Ключ секционирования (необязательно).
"Сеансовое" окно начинается, когда происходит первое событие. Если в течение указанного времени ожидания после последнего полученного события происходит еще одно событие, то окно расширяется для включения этого нового события. В противном случае, если в течение времени ожидания события отсутствуют, то по истечении этого времени окно закрывается.
Если события продолжаются в течение указанного времени ожидания, окно сеанса продолжает расширяться до достижения максимальной длительности. Интервалы проверки максимальной продолжительности задаются равными указанной максимальной длительности. Например, если максимальная длительность составляет 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.
Ниже приведен пример входных данных:
Метка | 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 |
Дальнейшие действия
См. следующие статьи: