다음을 통해 공유


스냅샷 창(Azure Stream Analytics)

스냅샷 창은 타임 스탬프를 포함하는 이벤트를 그룹화합니다. 특정 창 함수(예: Sessionwindow()등을 요구하는 창 유형과는 달리, 시스템을 추가하여 스냅샷 창에 적용할 수 있음. Timestamp()를 절 별로 그룹에 적용할 수 있음.

다음 다이어그램에서는 일련의 이벤트가 있는 스트림과 해당 이벤트가 스냅샷 창에 매핑되는 방법을 보여 줍니다.

스냅샷 창 다이어그램

System.Timestamp()는 GROUP BY 절에서 키 열 또는 스냅샷 창 정의로 간주할 수 있습니다. 타임스탬프의 같음에 따라 이벤트를 창으로 그룹화하기 때문입니다. 다른 창 함수와 결합하면 System.Timestamp()가 창 정의가 아닌 키로 처리됩니다. SYSTEM.Timestamp()는 GROUP BY 절에서 여러 창 함수를 사용하는 경우와 달리 다른 창 함수와 함께 사용할 때 오류를 생성하지 않습니다. GROUP BY에서 System.Timestamp() 및 창 함수를 모두 사용하면 결과를 일괄 처리할 수 있습니다.

System.Timestamp()를 포함하는 식은 창으로 간주되지 않습니다. 예를 들어 " GROUP BY DATEPART(minute, System.Timestamp()) 창을 지정해야 함" 오류와 함께 가 실패합니다.

구문

System.Timestamp()

예제

기본 예제

다음 예제에서는 정확히 동시에 발생하는 동일한 토픽 형식의 트윗 수를 반환합니다.

SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

연속 창 스냅샷 예제

스냅샷 창의 일반적인 사용법은 아래의 TumblingWindow와 같은 이전 창 함수를 통해 단일 타임스탬프에 그룹화된 후 이벤트를 집계하는 것입니다.

다음 예제에서는 30분 간격 내에 동일한 사용자가 동일한 토픽 형식의 트윗 수를 반환합니다.

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

동일한 간격 내에 사용자 수와 토픽당 총 트윗 수를 찾으려면 이전 쿼리의 결과를 사용할 수 있습니다. 연속 창 결과에는 모두 30분 경계에 맞춰진 타임스탬프가 있기 때문에 스냅샷 창을 사용하여 타임스탬프 값이 모두 같기 때문에 각 경계에서 이벤트를 반환할 수 있습니다.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

이전 쿼리는 동일한 30분 간격 내에 토픽당 사용자 수와 총 트윗을 반환했습니다. 2시간당 한 번씩 동일한 결과를 얻으려면 GROUP BY 절에 2시간 연속 창을 추가합니다.

다음 쿼리는 각 2시간 기간의 끝에 있는 4개의 30분 간격의 결과를 반환합니다.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

집계 창 예제

System.Timestamp()를 집계 Windows() 구문의 창 중 하나로 사용할 수 있습니다.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())