✅ Azure Stream Analytics ✅ Fabric Eventstream
LAG 분석 연산자를 사용하면 특정 제약 조건 내에서 이벤트 스트림에서 "이전" 이벤트를 조회할 수 있습니다. 변수 증가율을 계산하거나, 변수가 임계값을 초과하는 경우 또는 조건이 true가 되거나 중지되는 경우를 감지하는 데 매우 유용합니다.
Stream Analytics에서는 LIMIT DURATION 절을 사용하여 LAG의 범위(즉, 현재 이벤트와 기록에서 얼마나 멀리 떨어져 있는지)가 항상 유한한 시간 간격으로 제한됩니다. 선택적으로 LAG는 PARTITION BY 및 WHEN 절을 사용하여 특정 속성 또는 조건에서 현재 이벤트와 일치하는 이벤트만 고려하도록 제한할 수 있습니다.
LAG는 WHERE 절의 조건자, JOIN 절의 조인 조건 또는 현재 쿼리의 GROUP BY 절에 있는 그룹화 식의 영향을 받지 않습니다. 이는 해당 절보다 평가되기 때문입니다.
문법
LAG(<scalar_expression >, [<offset >], [<default>])
OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])
예를 들면 다음과 같습니다.
LAG(reading) OVER (LIMIT DURATION(hour, 3))
LAG(name, 2, 'none such') OVER (PARTITION BY userId LIMIT DURATION(minute, 2))
주장들
scalar_expression
지정한 오프셋에 따라 반환할 값입니다. 단일(스칼라) 값을 반환하는 모든 형식의 식이거나 와일드카드 식 '*'입니다. '*'의 경우 지정된 오프셋에 따른 전체 이벤트가 반환되고 결과 이벤트(중첩 레코드)에 포함됩니다.
scalar_expression 다른 분석 함수 또는 외부 함수를 포함할 수 없습니다.
오프셋
값을 가져올 현재 이벤트에서 다시 발생하는 이벤트 수입니다. 지정하지 않으면 기본값은 1입니다. 즉, 이전 이벤트를 반환합니다. 오프셋은 1보다 크거나 같은 정수여야 합니다. 이벤트는 임시 순서로 처리됩니다. 동일한 타임스탬프를 가진 여러 이벤트가 있는 경우 도착 순서대로 처리됩니다.
기본값
지정된 오프셋에 이벤트가 없을 때 반환할 값입니다. 기본값이 지정되어 있지 않으면 NULL이 반환됩니다. '지정된 오프셋에 이벤트가 없음'은 사례 1)이 될 수 있습니다. 지금까지 표시된 해당 이벤트의 수가 지정된 오프셋보다 작으면 2) 지정된 오프셋의 이벤트가 지정된 limit_duration_clause 3) 이벤트가 존재하지만 when_clause 지정된 부울 조건과 일치하지 않는 경우입니다.
지정된 오프셋의 이벤트가 있고 scalar_expression 값이 NULL이면 NULL입니다.
가 반환됩니다. default는 열, 하위 쿼리 또는 기타 식일 수 있지만 다른 식은 포함할 수 없습니다.
분석 함수 또는 외부 함수. 기본값은 >와 정확히 동일한 형식이어야 합니다.
scalar_expression.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause PARTITION BY <파티션 키> 절은 값이 있는 이벤트만 요청합니다.
<파티션 키> 는 고려되는 현재 이벤트의 키와 동일합니다. 예를 들면 다음과 같습니다.
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
는 현재 이벤트와 동일한 센서의 이전 판독값을 반환합니다(이전 1시간 내에 발생한 경우).
limit_duration 절 DURATION(<unit>, <length>)
현재 이벤트에서 고려해야 하는 기록의 양을 지정합니다. 지원되는 단위 및 약어에 대한 자세한 설명은 DATEDIFF를 참조하세요. DURATION 간격 내에 일치하는 이벤트가 충분하지 않으면 기본>값이 <반환됩니다.
when_clause
LAG 계산에서 고려할 이벤트에 대한 부울 조건을 지정합니다. DURATION 간격 내에 일치하는 이벤트가 충분하지 않으면 기본>값이 <반환됩니다. when_clause 선택 사항입니다.
반환 형식
지정된 scalar_expression 데이터 형식입니다. scalar_expression 경우 NULL이 반환됩니다.
일반 설명
LAG는 비결정적입니다. 이벤트는 임시 순서로 처리됩니다. 동일한 타임스탬프를 가진 여러 이벤트가 있는 경우 도착 순서대로 처리됩니다.
창 함수의 결과 집합에 LAG를 적용하면 예기치 않은 결과가 발생할 수 있습니다. 창 함수는 모든 창 작업이 창 끝에 이벤트를 출력하므로 이벤트의 타임스탬프를 변경합니다. 이벤트의 현재 타임스탬프는 system.timestamp()를 사용하여 액세스할 수 있습니다. 창 작업 후에는 원래 이벤트 시간 특성과 다릅니다. 창 작업 전에 LAG를 이동할 수 없는 경우 원래 이벤트 시간별로 순서를 지정하여 CollectTop을 사용하는 것이 좋습니다.
예시
센서당 증가율을 계산합니다.
SELECT sensorId,
growth = reading -
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM input
이전 null이 아닌 센서 읽기를 찾습니다.
SELECT
sensorId,
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)
FROM input
특정 센서 유형에 대한 이전 null이 아닌 센서 판독값을 찾습니다.
WITH filterSensor AS
(
SELECT *
FROM input
WHERE input.sensorType = 4 AND sensorId IS NOT NULL
)
SELECT
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM filterSensor
변수가 임계값을 초과하는 시기를 결정합니다.
SELECT
sensorId, reading
FROM input
WHERE
devicetype = 'thermostat'
AND reading > 100
AND LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat') <= 100
또한 참조하십시오
ISFIRST
마지막