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'