다음을 통해 공유


TIMESTAMP BY(Azure Stream Analytics)

모든 데이터 스트림 이벤트에는 연결된 타임스탬프가 있습니다. 기본적으로 이벤트 허브 및 IoT Hub 이벤트는 이벤트 허브 또는 IoT Hub 의해 수신된 시간을 기준으로 타임스탬프가 지정됩니다. Blob Storage의 이벤트는 Blob의 마지막으로 수정된 시간에 의해 타임스탬프가 지정됩니다. 작업을 다시 시작하거나 다시 실행하는 경우 이벤트의 타임스탬프는 변경되지 않습니다.

많은 스트리밍 애플리케이션은 도착 시간이 아니라 이벤트가 발생한 정확한 타임스탬프를 사용해야 합니다. 예를 들어 Point of Sales 애플리케이션에서 결제 이벤트가 이벤트 수집 서비스에 도달하는 시간이 아니라 결제가 기록된 시간에 해당하는 이벤트 타임스탬프가 필요할 수 있습니다. 또한 지역 분산 시스템 및 네트워크 대기 시간은 예측할 수 없는 도착 시간에 영향을 주므로 스트리밍 애플리케이션에서 애플리케이션 시간을 보다 안정적으로 사용할 수 있습니다. 이러한 경우 TIMESTAMP BY 절을 사용하면 사용자 지정 타임스탬프 값을 지정할 수 있습니다. 값은 이벤트 페이로드 또는 DATETIME 형식의 식에 있는 모든 필드일 수 있습니다. ISO 8601 형식을 준수하는 문자열 값도 지원됩니다.

사용자 지정 타임스탬프(TIMESTAMP BY 절)를 사용하면 Azure Stream Analytics에서 다음 두 가지 이유로 타임스탬프와 관련하여 이벤트를 순서대로 수집할 수 있습니다.

  • 개별 이벤트 생산자는 시스템 클록이 다르고 왜곡될 수 있습니다.
  • 개별 이벤트 생산자의 이벤트는 전송 중에 지연될 수 있습니다(예: 생산자 사이트에서 네트워크 사용 불가).

이벤트 생산자 간의 장애는 클 수 있지만 단일 생산자의 이벤트 내 장애는 일반적으로 작거나 존재하지 않습니다. 쿼리가 각 이벤트 생산자의 데이터만 독립적으로 처리하는 경우 생산자 간의 시간 기울이기를 관리하는 것보다 자체 타임라인 각 생산자의 이벤트를 처리하는 것이 더 효율적입니다. Azure Stream Analytics는 독립 타임라인에서 이벤트를 처리할 수 있도록 OVER <over spec> 하위 절을 지정하여 하위 스트림을 지원합니다. OVER 절 사용이 작업 처리에 미치는 영향은 'OVER 절이 이벤트 순서 지정과 상호 작용'을 참조하세요.

구문

TIMESTAMP BY scalar_expression [OVER <over spec> ]  
      
<over spec> ::= 
      { column_name | expression } [,...n ]  

설명

이벤트 타임스탬프 검색

System.Timestamp() 속성을 사용하여 쿼리의 모든 부분에서 SELECT 문에서 이벤트 타임스탬프를 검색할 수 있습니다.

OVER 절은 이벤트 순서와 상호 작용합니다.

OVER 절을 사용하면 Azure Stream Analytics에서 이벤트 처리의 여러 측면이 수정됩니다.

  1. 최대 순서 초과 허용 오차는 over 사양>의 단일 값 튜플 <내에 적용됩니다. 즉, 이벤트는 동일한 이벤트 생산자의 다른 이벤트와 관련하여 순서가 너무 많은 경우에만 순서가 벗어난 것으로 간주됩니다.

    instance 경우 동일한 이벤트 생산자의 이벤트가 항상 정렬되고 즉시 처리될 경우 '0' 값을 사용할 수 있습니다. 반면에 여기에서 큰 값을 사용하면 순서가 다른 이벤트가 어셈블될 때까지 기다리는 동안 처리 지연이 발생합니다.

  2. OVER가 사용되지 않은 것처럼 최대 지연 도착 허용 오차가 전역적으로 적용됩니다. 즉, 선택한 타임스탬프(TIMESTAMP BY 절)가 도착 시간과 너무 멀리 떨어져 있으면 이벤트가 늦게 도착하는 것으로 간주됩니다.

    여기서 큰 값을 사용하면 처리 지연이 발생하지 않으며 이벤트는 즉시(또는 최대 순서 초과 허용 오차에 따라) 처리됩니다. 며칠의 값은 불합리하지 않습니다. 그러나 매우 긴 값을 사용하면 작업을 처리하는 데 필요한 메모리 양에 영향을 줄 수 있습니다.

  3. 각 이벤트 생산자에 대한 출력 이벤트는 계산될 때 생성됩니다. 즉, 출력 이벤트에 순서가 다른 타임스탬프가 있을 수 있습니다. 그러나 오버 사양>의 <단일 값 튜플 내에서 순서가 지정됩니다.

제한 사항

TIMESTAMP BY OVER 절에는 다음과 같은 사용 제한 사항이 있습니다.

  1. TIMESTAMP BY OVER 절은 쿼리의 모든 입력에 사용되거나 쿼리에 사용되지 않아야 합니다.

  2. TIMESTAMP BY OVER 절은 완전 병렬 작업 또는 단일 파티션 작업에서만 지원됩니다.

  3. 입력 스트림에 둘 이상의 파티션이 있는 경우 OVER 절을 PARTITION BY 절과 함께 사용해야 합니다. PartitionId 열은 TIMESTAMP BY OVER 열의 일부로 지정해야 합니다.

  4. TIMESTAMP BY OVER 절을 사용하는 경우 스트림 간에 조인할 때 절의 열 이름을 GROUP BY 문 및 모든 JOIN 조건자의 그룹화 키로 사용해야 합니다.

  5. SELECT 문 또는 다른 쿼리 절에서 만든 열은 TIMESTAMP BY 절에서 사용할 수 없으며 입력 페이로드의 필드를 사용해야 합니다. 예를 들어 CROSS APPLY 의 결과는 TIMESTAMP BY의 대상 값으로 사용할 수 없습니다. 그러나 CROSS APPLY를 수행하는 하나의 Azure Stream Analytics 작업을 사용하고 두 번째 작업을 사용하여 TIMESTAMP BY를 수행할 수 있습니다.

  6. TIMESTAMP BY는 System.Timestamp()의 값을 설정하므로 TIMESTAMP BY에서 System.Timestamp()를 사용할 수 없습니다.

예제

예제 1 - 페이로드에서 타임스탬프 필드에 액세스

페이로드의 필드를 이벤트 타임스탬프로 사용 EntryTime

SELECT  
      EntryTime,  
      LicensePlate,  
      State   
FROM input TIMESTAMP BY EntryTime  

예제 2 - 페이로드의 UNIX 시간을 이벤트 타임스탬프로 사용

UNIX 시스템은 1970년 1월 1일 목요일 00:00:00 UTC(협정 세계시) 이후 경과된 시간(밀리초)으로 정의된 POSIX(또는 Epoch) 시간을 사용하는 경우가 많습니다.

이 예제에서는 Epoch 시간을 포함하는 숫자 'epochtime' 필드를 이벤트 타임스탬프로 사용하는 방법을 보여줍니다.

SELECT  
      System.Timestamp(),  
      LicensePlate,  
      State  
FROM input TIMESTAMP BY DATEADD(millisecond, epochtime, '1970-01-01T00:00:00Z')  

예제 3 – 다른 유형의 타임스탬프

두 가지 유형의 이벤트 'A'와 'B'를 포함하는 다른 유형의 데이터 스트림을 처리한다고 상상해 보십시오. 이벤트 'A'에는 'timestampA' 필드에 타임스탬프 데이터가 있고 이벤트 'B'에는 'timestampB' 필드에 타임스탬프가 있습니다.

이 예제에서는 두 가지 유형의 이벤트/타임스탬프를 모두 사용할 수 있도록 TIMESTAMP BY를 작성하는 방법을 보여 줍니다.

SELECT  
      System.Timestamp(),  
      eventType,  
      eventValue,  
FROM input TIMESTAMP BY  
      (CASE eventType   
            WHEN 'A' THEN timestampA  
            WHEN 'B' THEN timestampB  
      ELSE NULL END) 

예제 4 - 분할된 쿼리에서 여러 타임라인 처리

다른 수신자 스테이션 ID에 시간 정책을 적용하지 않고 다른 보낸 사람(유료 스테이션)의 데이터를 처리합니다. 입력 데이터는 TollId에 따라 분할됩니다.

SELECT
      TollId,
      COUNT(*) AS Count
FROM input
      TIMESTAMP BY EntryTime OVER TollId, PartitionId
      PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

참고 항목

System.Timestamp()
시간차 정책
Azure Stream Analytics의 시간 처리 이해
Unix 시간