다음을 통해 공유


세션 창(Azure Stream Analytics)

비슷한 시간에 도착하는 세션 창 그룹 이벤트로, 데이터가 없는 기간을 필터링합니다. 세션 창 함수에는 시간 제한, 최대 기간 및 분할 키(선택 사항)의 세 가지 기본 매개 변수가 있습니다.

다음 다이어그램에서는 일련의 이벤트가 있는 스트림과 5분 제한 시간 및 최대 기간 10분의 세션 창에 매핑되는 방법을 보여 줍니다.

Stream Analytics 세션 창

세션 창은 첫 번째 이벤트가 발생할 때 시작합니다. 마지막으로 수집된 이벤트에서 지정된 시간 제한 내에 다른 이벤트가 발생하는 경우 창은 새 이벤트를 포함하도록 확장됩니다. 그렇지 않으면 시간 제한 내에 이벤트가 발생하지 않는 경우 창은 시간 제한에 닫힙니다.

지정된 시간 제한 내에서 이벤트가 계속 발생하는 경우 세션 창은 최대 지속 시간에 도달할 때까지 확장을 유지합니다. 최대 기간 검사 간격은 지정된 최대 기간과 동일한 크기로 설정됩니다. 예를 들어 최대 기간이 10인 경우 창이 최대 기간을 초과하는지 확인하면 t = 0, 10, 20, 30 등에서 발생합니다. 즉, 세션 창의 실제 기간은 최대 2회 최대 최대 2회까지 가능할 수 있습니다.

따라서 다음 조건이 충족되면 세션 창이 수학적으로 종료됩니다.

세션 창 종료 조건

파티션 키가 제공되는 경우 이벤트는 키와 함께 그룹화되고 세션 창은 각 그룹에 독립적으로 적용됩니다. 이는 다른 사용자 또는 디바이스에 대해 서로 다른 세션 창이 필요한 경우에 유용합니다.

Syntax

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

참고

세션 창은 위의 두 가지 방법으로 사용할 수 있습니다.

인수

timeunit windowsize의 시간 단위입니다. 다음 표에는 유효한 모든 timeunit 인수가 나와 있습니다.

Timeunit 약어
dd, d
hour hh
minute mi, n
second ss, s
밀리초 ms
microsecond mcs

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)을 포함하는 출력을 생성합니다.