다음을 통해 공유


ISFIRST(Azure 스트림 분석)

이벤트가 지정된 고정 간격 내의 첫 번째 이벤트인 경우 1을 반환하고, 그렇지 않으면 0을 반환합니다. 간격은 연속 창과 동일한 방식으로 정렬됩니다( 연속 창 참조). ISFIRST는 WHERE 절의 조건자, JOIN 절의 조인 조건 또는 현재 쿼리의 GROUP BY 절에 있는 그룹화 식의 영향을 받지 않습니다. ).

Syntax

ISFIRST ( timeunit  , duration )   
    [ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]  
  

인수

timeunit

기간 에 대한 시간 단위입니다. 다음 표에는 모두 가득 --- 모든 유효한 시간 단위 값이 나와 있습니다.
쿼리에서 이름 및 약어를 사용할 수 있습니다.

Timeunit 약어
dd, d
hour hh
minute mi, n
second ss, s
밀리초 ms
microsecond mcs

duration

간격의 timeunit 수를 지정하는 큰 정수입니다. 예를 들어
ISFIRST(분, 15)는 15분 간격을 확인합니다. 간격의 시작 시간은 다음과 같습니다.
연속 창과 동일한 방식으로 정렬됩니다( 연속 창 참조(Azure Stream Analytics)).

[ OVER ( partition_by_clause [when_clause]) ]

OVER 절은 이 이벤트의 순위가 지정된 이벤트의 하위 집합을 지정합니다.

PARTITION BY partition_by_expression 절은 FROM에서 생성된 결과 집합을 나눕니다.
절을 함수가 적용되는 파티션으로 변환합니다. 즉, 각 이벤트를 비교합니다.
partition_by_expression 값을 공유하는 다른 이벤트에만 해당합니다. 지정하지 않으면 각각
이벤트는 시간 간격 내의 다른 모든 이벤트와 관련하여 순위가 매겨집니다.

WHEN when_expression 절은 고려할 이벤트에 대한 부울 조건을 지정합니다.
즉, 각 이벤트는 만족하는 다른 이벤트에 비해 순위만 지정됩니다.
when_expression. 이벤트 자체가 when_expression 충족하지 않으면 함수는 0을 반환합니다.
WHEN 절은 선택 사항입니다.

반환 형식

bigint(각각 'true' 또는 'false'를 나타내는 '1' 또는 '0')

일반적인 주의 사항

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

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

예제

센서 읽기 이벤트가 10분 연속 간격 내에 첫 번째인지 여부를 나타냅니다.

SELECT  
       reading,  
       ISFIRST(mi, 10) as first  
FROM Input  

이벤트가 deviceid당 10분 연속 간격 내에 첫 번째인지 여부를 나타냅니다.

SELECT  
       deviceid,  
       reading,  
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first  
FROM Input  

이벤트가 10분 연속 간격 내에 값이 50보다 큰 첫 번째 이벤트인지 여부를 나타냅니다.
deviceid당:

SELECT
       deviceid,
       reading,
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading > 50 AND devicetype = 'thermostat') as firstAbove,
       ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading < 50 AND devicetype = 'thermostat') as firstUnder
FROM Input
WHERE
       devicetype = 'thermostat'

참고 항목

LAG(Azure 스트림 분석)
LAST(Azure Stream Analytics)