Dela via


ISFIRST (Azure Stream Analytics)

Returnerar 1 om händelsen är den första händelsen inom ett visst fast intervall, eller 0 på annat sätt. Intervallen justeras på samma sätt som rullande fönster (se Rullande fönster). ISFIRST påverkas inte av predikat i WHERE-satsen, kopplingsvillkor i JOIN-satsen eller grupperingsuttryck i GROUP BY-satsen i den aktuella frågan. ).

Syntax

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

Argument

timeunit

Är tidsenheten för varaktigheten. I följande tabell visas alla giltiga tidsenhetsvärden --- båda fullständiga
namn och förkortningar kan användas i frågan.

Tidsenhet Förkortningar
day dd, d
timme hh
minut mi, n
sekund ss, s
Millisekund Ms
mikrosekunder Mcs

Varaktighet

Ett stort heltal som anger antalet timeunits i intervallet. Till exempel,
ISFIRST(minut, 15) kommer att titta på 15-minutersintervall. Starttiderna för intervallen är
justeras på samma sätt som i rullande fönster (se Rullande fönster (Azure Stream Analytics)).

[ ÖVER ( partition_by_clause [when_clause]) ]

OVER-satsen anger delmängden av de händelser som händelsen rangordnas bland:

PARTITION BY partition_by_expression-satsen delar upp resultatuppsättningen som genereras av FROM
-sats i partitioner som funktionen tillämpas på. Med andra ord jämförs varje händelse
endast till sådana andra händelser som delar värdet av partition_by_expression. Om inget anges, var och en
händelsen rangordnas med avseende på alla andra händelser inom tidsintervallet.

WHEN when_expression-satsen anger ett booleskt villkor för de händelser som ska beaktas.
Med andra ord rangordnas varje händelse endast jämfört med sådana andra händelser som uppfyller
when_expression. Om själva händelsen inte uppfyller when_expression returnerar funktionen 0.
WHEN-satsen är valfri.

Returtyper

bigint (antingen "1" eller "0" som representerar "sant" respektive "falskt" )

Allmänna kommentarer

ISFIRST är icke-deterministiskt. Händelser bearbetas i tidsordning. Om det finns flera händelser med samma tid behandlas stämpelhändelser i ankomstordningen.

Om du tillämpar ISFIRST på resultatuppsättningen för en fönsterfunktion kan det ge oväntade resultat. Fönsterfunktionerna ändrar tidsstämpeln för händelser, eftersom varje fönsteråtgärd matar ut händelsen i slutet av fönstret. Den aktuella tidsstämpeln för en händelse kan nås med system.timestamp(), efter en fönsteråtgärd skiljer den sig från det ursprungliga attributet för händelsetid. Om ISFIRST inte kan flyttas före fönsteråtgärden bör du överväga att använda CollectTop och beställa efter den ursprungliga händelsetiden.

Exempel

Ange om en sensorläsningshändelse är den första inom 10 minuters rullande intervall:

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

Ange om en händelse är den första inom 10 minuters rullande intervall per deviceid:

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

Ange om en händelse är den första händelsen med ett värde som är större än 50 inom 10 minuters rullande intervall
per 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'

Se även

LAG (Azure Stream Analytics)
LAST (Azure Stream Analytics)