다음을 통해 공유


Windows(Azure Stream Analytics)

창은 특정 창 정의에 따라 다양한 시간 간격에 걸쳐 이벤트를 집계하는 방법을 제공합니다. 텀블링, 호핑, 슬라이딩세션의 네 가지 시간 창 중에서 선택할 수 있습니다.

Windows() 함수는 이 개념을 확장하여 여러 창 정의의 결과를 동시에 계산합니다. Windows() 함수를 사용하면 둘 이상의 창 정의를 지정할 수 있습니다. 쿼리 논리는 이러한 각 창 정의에 대해 계산되며 결과는 모든 창 결과의 합산입니다.

Windows() 함수의 결과에는 여러 창의 조합이 포함되어 있으므로 서로 다른 결과를 구분해야 합니다. 시스템 함수 System.Window()를 사용하여 액세스할 수 있는 각 창에 ID를 할당하여 이 작업을 수행 합니다. Id. System.Window() 는 ID가 필드인 레코드를 반환합니다.

Windows를 정의하는 방법에는 두 가지가 있습니다.

  • Window() 함수인 Window( ID , window_definition )를 사용하여 고유 ID를 할당합니다. 여기서 ID는 window_definition ID이며 Windows 구문 내에서 고유한 대/소문자를 구분하지 않는 varchar(max) 값입니다.

  • ID가 없는 경우 System.Window(). ID 는 null 값을 생성합니다.

Syntax

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

참고

Windows 구문은 중첩할 수 없습니다. ID는 모든 창 정의에 제공되거나 없음으로 지정되어야 합니다.

Windows () 에서 와 같이 "window"라는 단어가 반복되지 않도록 사용할 수 있는 "연속"과 같은 Windows(Window('MyWindow', TumblingWindow(…짧은 창 정의 이름이 있습니다. 단축된 이름은 Windows 구문 외부에서도 사용할 수 있습니다.

System.Window()를 사용하는 것은 오류가 아닙니다. Windows 구문이 없는 ID이지만 창에 ID가 지정되지 않아 해당 값은 null이 됩니다.

Window() 함수를 사용하여 창 정의를 지정하는 경우 모든 창 정의는 Window() 함수를 사용해야 하며 대/소문자를 구분하지 않는 모든 ID는 고유해야 합니다. Null은 허용되지 않습니다.

System.Window() 함수

System.Window() 함수는 GROUP BY 문의 SELECT 절에서만 그룹화 시간 창에 대한 메타데이터를 검색하는 데 사용할 수 있습니다.

함수는 이벤트가 속한 창의 ID를 보유하는 단일 필드 ID를 포함하는 Record 형식의 값을 반환합니다.

예제

창 ID 없이 10, 20, 30, 40, 50 및 60분 동안의 각 기간 동안 자동차를 계산하는 창을 만듭니다.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        TumblingWindow(minute, 10), 
        TumblingWindow(minute, 20), 
        TumblingWindow(minute, 30), 
        TumblingWindow(minute, 40), 
        TumblingWindow(minute, 50), 
        TumblingWindow(minute, 60)) 

1분 홉과 4개의 다른 기간(1분, 15분, 30분 및 60분)으로 창을 만듭니다.

SELECT 
    System.Window().Id, 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        Window('1 min', TumblingWindow(minute, 1)), 
        Window('15 min', HoppingWindow(minute, 15, 1)), 
        Window('30 min', HoppingWindow(minute, 30, 1)), 
        Window('60 min', HoppingWindow(minute, 60, 1))) 

다른 크기의 창을 만들고 참조 테이블에 지정된 창 기간에 따라 결과를 필터링합니다.

WITH HoppingWindowResults AS
( 
    SELECT 
        System.Window().Id, 
        TollId, 
        COUNT(*) 
    FROM Input TIMESTAMP BY EntryTime 
    GROUP BY 
        TollId, 
        Windows( 
            Window('H10', Hopping(minute, 10, 5)), 
            Window('H20', Hopping(minute, 20, 5)), 
            Window('H30', Hopping(minute, 30, 5)), 
            Window('H40', Hopping(minute, 40, 5)), 
            Window('H50', Hopping(minute, 50, 5)), 
            Window('H60', Hopping(minute, 60, 5))) 
) 
 
SELECT HoppingWindowResults.* 
FROM HoppingWindowResults 
JOIN ReferenceTable ON  
    HoppingWindowResults.TollId = ReferenceTable.TollId 
    AND HoppingWindowResults.Id = ReferenceTable.windowId  

추가 정보