Freigeben über


LETZTE

✅ Azure Stream Analytics ✅ Fabric Eventstream

Der LAST-Analyseoperator ermöglicht es einem, das neueste Ereignis in einem Ereignisdatenstrom innerhalb definierter Einschränkungen nachzuschlagen. Es ist in den Szenarien nützlich, z. B. beim Berechnen des letzten bekannten guten Werts (z. B. nicht null), beim letzten Ermitteln, wann das Ereignis bestimmten Kriterien entspricht usw.

In Stream Analytics ist der Umfang von LAST (d. h., wie weit zurück im Verlauf des aktuellen Ereignisses es aussehen muss) immer auf ein endliches Zeitintervall beschränkt, wobei die LIMIT DURATION-Klausel verwendet wird. LAST kann optional nur auf Ereignisse beschränkt werden, die mit dem aktuellen Ereignis für eine bestimmte Eigenschaft oder Bedingung übereinstimmen, mithilfe der PARTITION BY- und WHEN-Klauseln. LAST wird von Prädikaten in WHERE-Klausel, Verknüpfungsbedingungen in JOIN-Klausel oder Gruppierungsausdrücken in GROUP BY-Klausel der aktuellen Abfrage nicht beeinflusst.

Bemerkung: LAST(<Ausdruck, <Standard>) entspricht lag(<expression>>, 0, <default>) (das offset value set to '0'). Beachten Sie, dass LAG(<Ausdruck>, 0, <Standard>) tatsächlich kein gültiges Konstrukt ist, da LAG einen Offset größer oder gleich 1 nimmt. Daher müssen Sie stattdessen LAST-Operator verwenden, der zur Vereinfachung 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 handelt sich entweder um einen Ausdruck eines beliebigen Typs, der einen einzelnen (skalaren) Wert oder den Wildcardausdruck '*' zurückgibt. Für '*' wird das gesamte Ereignis zurückgegeben und im Ergebnisereignis (geschachtelter Datensatz) enthalten sein. scalar_expression dürfen keine anderen Analysefunktionen oder externen Funktionen enthalten.

Vorgabe

Der Wert, der zurückgegeben werden soll, wenn keine Kriterien für den Ereignisabgleich vorhanden sind. Wenn kein Standardwert angegeben ist, wird NULL zurückgegeben. "Kein Ereignis" kann der Fall sein, wenn es keine vorherigen Ereignisse innerhalb des im limit_duration_clause angegebenen Zeitintervalls gibt oder das Ereignis vorhanden ist, aber nicht mit der in der when_clause angegebenen Bedingung übereinstimmt. Wenn das Ereignis vorhanden ist und der Wert von scalar_expression NULL ist, wird NULL zurückgegeben. Der Standardwert kann eine Spalte, Unterabfrage oder ein anderer Ausdruck sein, jedoch keine anderen Analysefunktionen oder externen Funktionen enthalten. Der Standardwert 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
<Partitionsschlüssel> ist identisch mit dem des aktuellen Ereignisses.

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

when_clause Gibt eine boolesche Bedingung für die Ereignisse an, die in der LAST-Berechnung berücksichtigt werden sollen. Wenn keine übereinstimmenden Ereignisse innerhalb des DURATION-Intervalls 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 zeitlicher Reihenfolge verarbeitet. Wenn mehrere Ereignisse mit demselben Zeitstempelereignisse in der Reihenfolge der Ankunft verarbeitet werden.

Das Anwenden von LAST auf das Resultset einer Fensterfunktion kann zu unerwarteten Ergebnissen führen. Fensterfunktionen ändern den Zeitstempel von Ereignissen, da jedes Fenstervorgang das Ereignis am Ende des Fensters ausgibt. Auf den aktuellen Zeitstempel eines Ereignisses kann mit "system.timestamp()" zugegriffen werden, nachdem ein Fenstervorgang ausgeführt wurde, unterscheidet es sich vom ursprünglichen Ereigniszeit-Attribut. Wenn LAST nicht vor dem Fenstervorgang verschoben werden kann, erwägen Sie die Verwendung von CollectTop, sortierung nach der ursprünglichen Ereigniszeit.

Beispiele

Letzte Nicht-Null-Sensorlesewert finden:

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

Suchen Sie das letzte Mal, wenn die Lesezeit größer als 50 war:

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

Siehe auch

ISFIRST
ZURÜCKBLEIBEN