ISFIRST (Azure Stream Analytics)

Gibt 1 zurück, wenn das Ereignis das erste Ereignis innerhalb eines bestimmten festen Intervalls ist, andernfalls 0. Die Intervalle werden auf die gleiche Weise ausgerichtet wie tumbling-Fenster (siehe Tumbling Window). ISFIRST ist nicht von Prädikaten in der WHERE-Klausel, Joinbedingungen in der JOIN-Klausel oder Gruppierungsausdrücken in der GROUP BY-Klausel der aktuellen Abfrage betroffen. ).

Syntax

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

Argumente

timeunit

Ist die Zeiteinheit für die Dauer. In der folgenden Tabelle sind alle gültigen Zeiteinheitswerte --- beide vollständig aufgeführt.
Namen und Abkürzungen können in der Abfrage verwendet werden.

Timeunit Abkürzungen
day dd, d
hour hh
minute mi, n
second ss, s
Millisekunde ms
Mikrosekunde mcs

duration

Eine große ganze Zahl, die die Anzahl der Timeunits im Intervall angibt. Beispiel:
ISFIRST(minute, 15) untersucht 15-Minuten-Intervalle. Die Startzeiten der Intervalle sind
auf die gleiche Weise ausgerichtet wie bei tumbling-Fenstern (siehe Tumbling Window (Azure Stream Analytics)).

[ OVER ( partition_by_clause [when_clause]) ]

Die OVER-Klausel gibt die Teilmenge der Ereignisse an, unter denen dieses Ereignis eingestuft wird:

PARTITION BY partition_by_expression-Klausel dividiert das von from erzeugte Resultset.
-Klausel in Partitionen, auf die die Funktion angewendet wird. Anders ausgedrückt: Jedes Ereignis wird verglichen.
nur für solche anderen Ereignisse, die den Wert von partition_by_expression teilen. Wenn keine Angabe erfolgt, wird jede
-Ereignis wird in Bezug auf alle anderen Ereignisse innerhalb des Zeitintervalls eingestuft.

WHEN when_expression-Klausel gibt eine boolesche Bedingung für die zu berücksichtigenden Ereignisse an.
Anders ausgedrückt: Jedes Ereignis wird nur im Vergleich zu solchen anderen Ereignissen eingestuft, die erfüllen.
when_expression. Wenn das Ereignis selbst when_expression nicht erfüllt, gibt die Funktion 0 zurück.
Die WHEN-Klausel ist optional.

Rückgabetypen

bigint (entweder "1" oder "0", das "true" bzw. "false" darstellt)

Allgemeine Hinweise

ISFIRST ist nicht deterministisch. Ereignisse werden in der zeitlichen Reihenfolge verarbeitet. Treten mehrere Ereignisse mit dem gleichen Zeitstempel auf, so werden Ereignisse in der eingetroffenen Reihenfolge verarbeitet.

Das Anwenden von ISFIRST auf das Resultset einer Windowingfunktion kann zu unerwarteten Ergebnissen führen. Windowingfunktionen ändern den Zeitstempel von Ereignissen, da jeder Fenstervorgang das Ereignis am Ende des Fensters ausgibt. Auf den aktuellen Zeitstempel eines Ereignisses kann mit system.timestamp()zugegriffen werden. Nach einem Fenstervorgang unterscheidet er sich vom ursprünglichen Ereigniszeitattribut. Wenn ISFIRST nicht vor dem Fenstervorgang verschoben werden kann, sollten Sie collectTopverwenden, um nach der ursprünglichen Ereigniszeit zu sortieren.

Beispiele

Geben Sie an, ob ein Sensormessereignis das erste innerhalb von 10-Minuten-Intervallen ist:

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

Geben Sie an, ob ein Ereignis das erste innerhalb von 10-Minuten-Intervallen pro deviceid ist:

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

Geben Sie an, ob es sich bei einem Ereignis um das erste Ereignis mit einem Wert größer als 50 innerhalb von 10-Minuten-Intervallen handelt.
pro Geräte-ID:

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'

Weitere Informationen

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