다음을 통해 공유


LAST(Azure Stream Analytics)

LAST 분석 연산자를 사용하면 정의된 제약 조건 내에서 이벤트 스트림에서 가장 최근의 이벤트를 조회할 수 있습니다. 마지막으로 알려진 양호한 값(예: null 아님), 이벤트가 특정 조건과 일치하는 마지막 시간을 찾는 등의 시나리오에서 유용합니다.

Stream Analytics에서 LIMIT DURATION 절을 사용하여 LAST의 scope(즉, 현재 이벤트에서 기록에서 얼마나 멀리 되돌아가야 하는지)는 항상 한정된 시간 간격으로 제한됩니다. 필요에 따라 LAST는 PARTITION BY 및 WHEN 절을 사용하여 특정 속성 또는 조건의 현재 이벤트와 일치하는 이벤트만 고려하도록 제한할 수 있습니다. LAST는 WHERE 절의 조건자, JOIN 절의 조인 조건 또는 현재 쿼리의 GROUP BY 절에 있는 그룹화 식의 영향을 받지 않습니다.

말: LAST(<expression>, <default>)는 LAG(<expression>, 0, <default>)(오프셋 값이 '0'으로 설정됨)과 같습니다. LAG는 1보다 크거나 같은 오프셋을 사용하므로 LAG(<expression>, 0, <default>)는 실제로 유효한 구문이 아닙니다. 따라서 편의성과 가독성을 높이기 위해 도입된 LAST 연산자 대신 를 사용해야 합니다.

Syntax

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

인수

scalar_expression

반환되는 값입니다. 단일(스칼라) 값 또는 와일드카드 식 ‘*’를 반환하는 모든 유형의 식입니다. '*'의 경우 전체 이벤트가 반환되고 결과 이벤트(중첩된 레코드)에 포함됩니다. scalar_expression 은 다른 분석 함수 또는 외부 함수를 포함할 수 없습니다.

default

이벤트 일치 조건이 없을 때 반환할 값입니다. 기본값이 지정되어 있지 않으면 NULL이 반환됩니다. '이벤트 없음'은 limit_duration_clause 지정된 시간 간격 내에 이전 이벤트가 없거나 이벤트가 존재하지만 when_clause 지정된 조건과 일치하지 않는 경우일 수 있습니다. 이벤트가 있고 scalar_expression 값이 NULL이면 NULL이 반환됩니다. default는 열, 하위 쿼리 또는 기타 식일 수 있지만 다른 분석 함수 또는 외부 함수를 포함할 수는 없습니다. default는 scalar_expression 형식과 정확히 동일해야 합니다.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <파티션 키> 절은 값이 인 이벤트만 요청합니다.
<파티션 키> 는 고려되는 현재 이벤트의 키와 동일합니다.

limit_duration_clause DURATION(<unit>, <length>):
현재 이벤트의 기록을 고려해야 하는 정도를 지정합니다. 지원되는 단위와 해당 약어에 대한 자세한 설명은 DATEDIFF를 참조하세요. DURATION 간격 내에 일치하는 이벤트가 충분하지 않으면 기본값>이 <반환됩니다.

when_clause 마지막 계산에서 고려할 이벤트에 대한 부울 조건을 지정합니다. DURATION 간격 <내에 일치하는 이벤트가 없으면 기본> 값이 반환됩니다. when_clause 선택 사항입니다.

반환 형식

지정된 scalar_expression의 데이터 형식입니다. NULL이 반환됩니다(scalar_expression).

일반적인 주의 사항

LAST는 비결정적입니다. 이벤트는 임시 순서 대로 처리됩니다. 동일한 타임스탬프가 있는 이벤트가 여러 개인 경우 이벤트는 도착하는 순서대로 처리됩니다.

창 함수의 결과 집합에 LAST를 적용하면 예기치 않은 결과가 발생할 수 있습니다. 창 함수는 모든 창 작업이 창 끝에 이벤트를 출력하므로 이벤트의 타임스탬프를 변경합니다. 이벤트의 현재 타임스탬프는 system.timestamp()를 사용하여 액세스할 수 있으며, 창 작업 후에는 원래 이벤트 시간 특성과 다릅니다. 창 작업 전에 LAST를 이동할 수 없는 경우 원래 이벤트 시간별로 정렬하여 CollectTop을 사용하는 것이 좋습니다.

예제

최신 비 null 센서 읽기를 찾습니다.

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

읽기가 50보다 큰 마지막 시간을 찾습니다.

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

참고 항목

ISFIRST(Azure 스트림 분석)
LAG(Azure 스트림 분석)