창 함수 이해

완료됨

스트림 처리의 일반적인 목표는 이벤트를 임시 간격 또는 으로 집계하는 것입니다. 예를 들어 분당 소셜 미디어 게시물의 수를 계산하거나 시간당 평균 강우량을 계산할 수 있습니다.

Azure Stream Analytics에는 5가지 종류의 임시 창 작업 함수에 대한 기본 지원이 포함됩니다. 이러한 함수를 사용하면 쿼리에서 데이터가 집계되는 임시 간격을 정의할 수 있습니다. 지원하는 창 작업 함수는 연속, 도약, 슬라이딩, 세션스냅샷입니다.

연속

연속 창 함수는 데이터 스트림을 고정된 크기의 겹치지 않는 일련의 인접 시계열로 나누고, 해당 시계열에 대해 작동합니다. 이벤트는 둘 이상의 연속 창에 속하지 않습니다.

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

다음 쿼리로 표시되는 연속 창 예제는 각 1분 창에서 최대 읽기 값을 찾습니다. Stream Analytics 작업에서 창 작업 함수는 쿼리 구문의 GROUP BY 절을 사용하여 적용됩니다. 다음 쿼리의 GROUP BY절에는 1분 창 크기를 지정하는 TumblingWindow() 함수가 포함되어 있습니다.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)

도약

도약 창 함수는 예정된 겹치는 창을 모델링하고 정해진 기간만큼 시간을 앞으로 이동합니다. 창 크기보다 더 자주 겹치고 내보낼 수 있는 연속 창으로 생각하는 것이 가장 쉽습니다. 사실 연속 창은 단순히 hopsize와 같은 도약 창입니다. 도약 창을 사용하는 경우 이벤트는 두 개 이상의 창 결과 집합에 속할 수 있습니다.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

도약 창을 만들려면 세 개의 매개 변수를 지정해야 합니다. 첫 번째 매개 변수는 초, 분, 시간과 같은 시간 단위를 나타냅니다. 다음 매개 변수는 각 창이 지속되는 기간을 지정하는 창 크기를 설정합니다. 마지막 필수 매개 변수는 각 창이 이전 창을 기준으로 앞으로 이동하는 정도를 지정하는 홉 크기입니다. 오프셋 크기를 나타내는 네 번째 매개 변수를 선택적으로 사용할 수도 있습니다.

다음 쿼리는 timeunitsecond로 설정된 HoppingWindow()를 사용하는 방법을 보여줍니다. windowsize은(는) 60초이고 hopsize은(는) 30초입니다. 이 쿼리는 지난 60초 동안 발생한 최대 읽기 값을 포함하여 30초마다 이벤트를 출력합니다.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)

슬라이딩

슬라이딩 창은 창의 내용이 실제로 변경된 시점에 대한 이벤트를 생성합니다. 이 함수 모델은 고려해야 하는 창 수를 제한합니다. 고려해야 하는 창의 수를 제한하기 위해, Azure Stream Analytics에서는 이벤트가 창에서 들어오거나 나간 시점의 이벤트만 출력합니다. 따라서 모든 창에 최소 하나의 이벤트가 포함됩니다. 도약 창과 유사하게 슬라이딩 창의 이벤트는 둘 이상의 슬라이딩 창에 속할 수 있습니다.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

다음 쿼리는 SlidingWindow() 함수를 사용하여 이벤트가 발생한 각 1분 창에서 최대 읽기 값을 찾습니다.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)

세션

세션 창 함수는 데이터가 없는 기간을 필터링하여 비슷한 시간에 도착하는 이벤트를 그룹화합니다. 세 가지 주요 매개 변수인 시간 제한, 최대 기간 및 파티션 키(선택 사항)가 있습니다.

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

첫 번째 이벤트가 발생하면 세션 창이 시작됩니다. 마지막으로 수집된 이벤트에서 지정된 시간 제한 내에 다른 이벤트가 발생한다고 가정합니다. 이 경우 새 이벤트를 포함하기 위해 창이 확장됩니다. 그러나 지정된 시간 제한 내에 다른 이벤트가 발생하지 않는 경우 시간이 초과되면 창이 닫힙니다. 지정된 시간 제한 내에서 이벤트가 계속 발생하는 경우 세션 창은 최대 기간에 도달할 때까지 확장됩니다.

다음 쿼리는 timeoutsize을(를) 20초로, maximumdurationsize을(를) 60초로 하는 클릭스트림 데이터에 대한 SessionWindow을(를) 만들어 사용자 세션 길이를 측정합니다.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)

스냅샷

스냅샷 창은 동일한 타임스탬프 값을 기준으로 이벤트를 그룹으로 묶습니다. 다른 창 작업 형식과 달리 특정 창 함수는 필요하지 않습니다. 쿼리의 GROUP BY절에 System.Timestamp() 함수를 지정하여 스냅샷 창을 사용할 수 있습니다.

The diagram illustrates a stream with a series of events mapped into snapshot windows.

예를 들어 다음 쿼리는 정확히 동시에 발생하는 이벤트의 최대 읽기 값을 찾습니다.

SELECT System.TimeStamp() AS WindowTime,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()

System.Timestamp()는 동일한 타임스탬프를 기반으로 이벤트를 창으로 그룹화하므로 GROUP BY 절에서 스냅샷 창의 정의로 간주됩니다.