LAST (Azure Stream Analytics)

Mit dem LAST-Analyseoperator kann das neueste Ereignis in einem Ereignisdatenstrom innerhalb definierter Einschränkungen nachschlagen. Dies ist nützlich in Szenarien wie dem Berechnen des letzten bekannten guten Werts (z. B. nicht NULL), der Suche nach dem letzten Zeitpunkt, wenn das Ereignis bestimmten Kriterien entspricht usw.

In Stream Analytics ist der Bereich von LAST (d. h. wie weit der Verlauf vom aktuellen Ereignis entfernt ist) immer auf ein endliches Zeitintervall beschränkt, wobei die LIMIT DURATION-Klausel verwendet wird. LAST kann optional so beschränkt werden, dass nur Ereignisse berücksichtigt werden, die mit dem aktuellen Ereignis für eine bestimmte Eigenschaft oder Bedingung unter Verwendung der PARTITION BY- und WHEN-Klauseln übereinstimmen. LAST ist nicht von Prädikaten in der WHERE-Klausel, Joinbedingungen in der JOIN-Klausel oder Gruppierung von Ausdrücken in der GROUP BY-Klausel der aktuellen Abfrage betroffen.

Bemerkung: LAST(<expression>, <default>) entspricht LAG(<expression>, 0, <default>) (das ist der Offsetwert, der auf "0" festgelegt ist). Beachten Sie, dass LAG(<expression>, 0, <default>) eigentlich kein gültiges Konstrukt ist, da LAG einen Offset größer oder gleich 1 annimmt. Daher müssen Sie stattdessen den LAST-Operator verwenden, der aus Gründen der Einfachheit und besseren Lesbarkeit eingeführt wurde.

Syntax

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

Argumente

scalar_expression

Der zurückzugebende Wert. Es ist entweder ein Ausdruck eines beliebigen Typs, der einen einzelnen (skalaren) Wert zurückgibt, oder der Platzhalterzeichenausdruck "*". Für "*" wird das gesamte Ereignis zurückgegeben und im Ergebnisereignis (geschachtelter Datensatz) enthalten. scalar_expression darf keine anderen analytischen oder externen Funktionen enthalten.

default

Der Wert, der zurückgegeben werden soll, wenn keine Ereignisabgleichskriterien vorhanden sind. Wenn kein Standardwert angegeben ist, wird NULL zurückgegeben. "Kein Ereignis" kann der Fall sein, wenn innerhalb des im limit_duration_clause angegebenen Zeitintervalls keine vorherigen Ereignisse vorhanden sind oder wenn das Ereignis vorhanden ist, aber nicht mit der im when_clause angegebenen Bedingung übereinstimmt. Wenn das Ereignis vorhanden ist und der Wert von scalar_expression NULL ist, wird NULL zurückgegeben. default kann eine Spalte, Unterabfrage oder ein anderer Ausdruck sein, kann aber keine anderen Analysefunktionen oder externe Funktionen enthalten. default muss den gleichen Typ wie scalar_expression haben.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY-Partitionsschlüsselklausel <> fordert nur Ereignisse an, deren Wert von
<Der Partitionsschlüssel> ist identisch mit dem des aktuellen Ereignisses, das berücksichtigt werden soll.

limit_duration_clause DURATION(<Einheit>, <Länge>):
Gibt an, wie viel des Verlaufs aus dem aktuellen Ereignis berücksichtigt werden muss. Eine ausführliche Beschreibung der unterstützten Einheiten und deren Abkürzungen finden Sie in DATEDIFF. Wenn innerhalb des DURATION-Intervalls nicht genügend übereinstimmende Ereignisse gefunden werden, wird der <Standardwert> zurückgegeben.

when_clause Gibt die boolesche Bedingung für die Ereignisse an, die in der LAST-Berechnung berücksichtigt werden sollen. Wenn innerhalb des DURATION-Intervalls keine übereinstimmenden Ereignisse gefunden werden, wird der <Standardwert> zurückgegeben. Die when_clause ist optional.

Rückgabetypen

Der Datentyp des angegebenen scalar_expression. NULL wird zurückgegeben, wenn scalar_expression

Allgemeine Hinweise

LAST 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 LAST auf den 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 Ereigniszeitattribute. Wenn LAST nicht vor dem Fenstervorgang verschoben werden kann, sollten Sie CollectTop verwenden, um nach der ursprünglichen Ereigniszeit zu sortieren.

Beispiele

Suchen Sie nach dem neuesten Sensorwert ungleich NULL:

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

Suchen Sie nach dem letzten Zeitpunkt, zu dem das Lesen größer als 50 war:

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

Weitere Informationen

ISFIRST (Azure Stream Analytics)
LAG (Azure Stream Analytics)