ISFIRST (Azure Stream Analytics)
Gibt 1 zurück, wenn das Ereignis das erste Ereignis innerhalb eines bestimmten festen Intervalls ist, oder andernfalls 0. Die Intervalle werden auf die gleiche Weise ausgerichtet wie rollierende Fenster (siehe Rollierendes Fenster). 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 Zeiteinheitenwerte --- 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 Zeiteinheiten im Intervall angibt. Beispiel:
ISFIRST(Minute, 15) betrachtet 15-Minuten-Intervalle. Die Startzeiten der Intervalle sind
wird auf die gleiche Weise ausgerichtet wie in rollierenden Fenstern (siehe Rollierendes Fenster (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
Die OVER-Klausel gibt die Teilmenge der Ereignisse an, unter denen dieses Ereignis rangiert:
PARTITION BY partition_by_expression-Klausel dividiert das vom 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 ihren Wert von partition_by_expression teilen. Wenn nicht angegeben,
event wird in Bezug auf alle anderen Ereignisse innerhalb des Zeitintervalls bewertet.
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 anderen Ereignissen bewertet, die erfüllen.
when_expression. Wenn das Ereignis selbst nicht when_expression erfüllt, gibt die Funktion 0 zurück.
Die WHEN-Klausel ist optional.
Rückgabetypen
bigint (entweder "1" oder "0" für "true" bzw. "false")
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 Fensterfunktion kann zu unerwarteten Ergebnissen führen. Fensterfunktionen ändern den Zeitstempel von Ereignissen, da jeder Fenstervorgang ein 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 Ereigniszeit-Attribut. Wenn ISFIRST vor dem Fenstervorgang nicht verschoben werden kann, erwägen Sie die Verwendung von CollectTop nach der ursprünglichen Ereigniszeit.
Beispiele
Geben Sie an, ob ein Sensorleseereignis innerhalb von 10-Minuten-Tumblingintervallen das erste ist:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
Geben Sie an, ob ein Ereignis das erste innerhalb von 10-Minuten-Tumblingintervallen pro deviceid ist:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
Angeben, ob es sich bei einem Ereignis um das erste Ereignis mit einem Wert größer als 50 innerhalb von 10-Minuten-Intervallen handelt
pro 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'