Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
✅ Поток событий Azure Stream Analytics ✅ Fabric
События группы сеансов, поступающие в аналогичное время, отфильтровывают периоды времени, в которых нет данных. Функция окна сеанса имеет три основных параметра: время ожидания, максимальная длительность и ключ секционирования (необязательно).
На следующей схеме показан поток с рядом событий и их сопоставление с окнами сеанса в течение 5 минут и максимальной продолжительности 10 минут.
Окно сеанса начинается при возникновении первого события. Если другое событие происходит в течение указанного времени ожидания от последнего приема события, окно расширяется, чтобы включить новое событие. В противном случае, если события не происходят в течение времени ожидания, окно закрывается во время ожидания.
Если события продолжаются в течение указанного времени ожидания, окно сеанса будет продолжать расширяться до достижения максимальной длительности. Обратите внимание, что для интервалов проверки максимальной длительности задан тот же размер, что и указанная максимальная длительность. Например, если максимальная длительность составляет 10, то проверки, если окно превышает максимальную длительность, произойдет в t = 0, 10, 20, 30 и т. д. Это означает, что фактическое время окна сеанса может быть до двухкратного максимального значенияDuration.
Таким образом, математически окно сеанса заканчивается, если выполняется следующее условие:
Если указан ключ секции, события группируются вместе по этому ключу, и окно сеанса применяется к каждой группе независимо. Это полезно для случаев, когда вам нужны разные окна сеансов для разных пользователей или устройств.
Синтаксис
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Замечание
Окно сеанса можно использовать двумя способами.
Аргументы
timeunit Единица времени для окна. В следующей таблице перечислены все допустимые аргументы timeunit.
| Timeunit | Аббревиатуры |
|---|---|
| день | дд, д |
| час | Чч |
| минута | mi, n |
| секунда | ss, s |
| миллисекунда | мс |
| микросекунда | mcs |
время ожидания
Большое целое число, описывающее размер пробела в окне сеанса. Данные, происходящие в пределах размера пробела, группируются в одном окне.
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).