Azure Stream Analytics - это способ управления окнами сеансов:
Окна сеансов группируют события, которые приходят в одинаковое время, отфильтровывая периоды времени, когда данных нет.Функция окна сеанса имеет три основных параметра: время ожидания, максимальная продолжительность и ключ разделения (необязательно).
Следующая диаграмма иллюстрирует поток с серией событий и то, как они отображаются в окна сеанса продолжительностью 5 минут,и максимальная продолжительность 10 минут.
Окно сеанса начинается, когда происходит первое событие.Если в течение указанного тайм-аута происходит последнее событие от последнего принятого события, то окно расширяется, чтобы включить новое событие.В противном случае, если в течение тайм-аута не происходит никаких событий, окно закрывается в течение тайм-аута.
Если события продолжаются в течение указанного тайм-аута, окно сеанса будет продолжать расширяться, пока не будет достигнута максимальная продолжительность.Обратите внимание, что максимальные интервалы проверки продолжительности имеют такой же размер, как и указанная максимальная продолжительность.Например, если максимальная длительность равна 10, то проверки того, превышает ли окно максимальную длительность, будут происходить при t = 0, 10, 20, 30 и т. Д.
Таким образом, математически наше окно сеанса заканчивается, есливыполняется следующее условие:
Окно сеанса Stream Analytics 5 минут ожидания и максимум 10 минут
Когда предоставляется ключ разделения, события группируются по ключу, и окно сеанса применяется к каждомугруппа независимо.Это полезно в тех случаях, когда вам нужны разные окна сеансов для разных пользователей или устройств.
Вот синтаксис :
SESSIONWINDOW(timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
SESSIONWINDOW(Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Пояснение:
timeoutsize
Большое целое число, которое описывает размер промежутка окна сеанса.Данные, которые встречаются в пределах размера промежутка, группируются в одном и том же окне.
maxdurationsize
Если общий размер окна превышает указанный maxDurationSize в контрольной точке, то окно закрывается и новыйокно открывается в той же точке.В настоящее время размер интервала проверки равен maxDurationSize.
partitionkey
Необязательный параметр, который указывает ключ, над которым работает окно сеанса.Если указано, окно будет группировать только события одного и того же ключа.
Примеры : JSON:
[
// time: the timestamp when the user clicks on the link
// user_id: the id of the user
// url: the url the user clicked on
{
"time": "2017-01-26T00:00:00.0000000z",
"user_id": 0,
"url": "www.example.com/a.html"
},
{
"time": "2017-01-26T00:00:20.0000000z",
"user_id": 0,
"url": "www.example.com/b.html"
},
{
"time": "2017-01-26T00:00:55.0000000z",
"user_id": 1,
"url": "www.example.com/c.html"
},
// ...
]
КомуЧтобы измерить продолжительность каждого пользовательского сеанса, вы можете использовать следующий запрос:
CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
user_id,
MIN(time) AS window_start,
System.Timestamp AS window_end,
DATEDIFF(s, MIN(time), System.Timestamp) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)
Предыдущий запрос создает окно сеанса с тайм-аутом 2 минуты, максимальной продолжительностью 60 минут и ключом разделения.из user_id.Это означает, что для каждого user_id будут созданы независимые окна сеансов.Для каждого окна этот запрос будет генерировать выходные данные, которые содержат user_id, время начала окна (window_start), конец окна (window_end) и общую продолжительность сеанса пользователя (duration_in_seconds).
Это очень просто, просто начните с самого начала, если вы застряли.