Delen via


LAST (Azure Stream Analytics)

Met de analyseoperator LAST kan de meest recente gebeurtenis in een gebeurtenisstroom worden opgezoekd binnen gedefinieerde beperkingen. Het is handig in scenario's zoals het berekenen van de laatst bekende goede waarde (bijvoorbeeld niet null), het vinden van de laatste keer wanneer de gebeurtenis aan bepaalde criteria voldoet, enzovoort.

In Stream Analytics is het bereik van LAST (dat wil gezegd, hoe ver terug in de geschiedenis van de huidige gebeurtenis het moet kijken) altijd beperkt tot een eindig tijdsinterval, met behulp van de component LIMIETDUUR. LAST kan optioneel worden beperkt tot alleen gebeurtenissen die overeenkomen met de huidige gebeurtenis op een bepaalde eigenschap of voorwaarde met behulp van de partition BY- en WHEN-componenten. LAST wordt niet beïnvloed door predicaten in de WHERE-component, joinvoorwaarden in join-component of groeperingsexpressies in de GROUP BY-component van de huidige query.

Opmerking: LAST(<expressie>, <standaard>) is gelijk aan LAG(<expressie>, 0, <standaard>) (dit is een offsetwaarde die is ingesteld op '0'). Houd er rekening mee dat LAG(<expressie>, 0, <standaard>) eigenlijk geen geldige constructie is, omdat LAG een offset heeft die groter is dan of gelijk is aan 1. Daarom moet u in plaats daarvan de LAST-operator gebruiken, die is geïntroduceerd voor het gemak en betere leesbaarheid.

Syntaxis

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

Argumenten

scalar_expression

De waarde die moet worden geretourneerd. Het is een expressie van elk type die één (scalaire) waarde retourneert of de jokertekenexpressie '*'. Voor *wordt de hele gebeurtenis geretourneerd en opgenomen in de resultaatgebeurtenis (geneste record). scalar_expression mag geen andere analytische functies of externe functies bevatten.

standaardinstelling

De waarde die moet worden geretourneerd wanneer er geen criteria voor gebeurteniskoppeling zijn. Als er geen standaardwaarde is opgegeven, wordt NULL geretourneerd. 'Geen gebeurtenis' kan het geval zijn als er geen eerdere gebeurtenissen zijn binnen het tijdsinterval dat is opgegeven in de limit_duration_clause of als de gebeurtenis bestaat maar niet overeenkomt met de voorwaarde die is opgegeven in de when_clause. Als de gebeurtenis bestaat en de waarde van scalar_expression NULL is, wordt NULL geretourneerd. standaard kan een kolom, subquery of andere expressie zijn, maar deze kan geen andere analytische functies of externe functies bevatten. standaard moet exact hetzelfde type hebben als scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <partitiesleutel> component vraagt dat alleen gebeurtenissen waarvan de waarde van
<de partitiesleutel> is dezelfde als die van de huidige gebeurtenis die moet worden overwogen.

limit_duration_clause DUUR(<eenheid>; <lengte>):
Hiermee geeft u op hoeveel van de geschiedenis van de huidige gebeurtenis moet worden overwogen. Zie DATEDIFF voor een gedetailleerde beschrijving van ondersteunde eenheden en hun afkortingen. Als er niet voldoende overeenkomende gebeurtenissen worden gevonden binnen het DUUR-interval, wordt de <standaardwaarde> geretourneerd.

when_clause Hiermee geeft u de booleaanse voorwaarde op voor de gebeurtenissen die moeten worden overwogen in DE LAATSTE berekening. Als er geen overeenkomende gebeurtenissen worden gevonden binnen het DUUR-interval, wordt de <standaardwaarde> geretourneerd. De when_clause is optioneel.

Retourtypen

Het gegevenstype van de opgegeven scalar_expression. NULL wordt geretourneerd als scalar_expression

Algemene opmerkingen

LAST is niet-deterministisch. Gebeurtenissen worden in tijdelijke volgorde verwerkt. Als er meerdere gebeurtenissen met dezelfde tijdstempel zijn, worden gebeurtenissen verwerkt in de volgorde van aankomst.

Het toepassen van LAST op de resultatenset van een vensterfunctie kan onverwachte resultaten opleveren. Vensterfuncties veranderen de tijdstempel van gebeurtenissen, omdat elke vensterbewerking gebeurtenis aan het einde van het venster uitvoert. De huidige tijdstempel van een gebeurtenis kan worden geopend met system.timestamp(), na een vensterbewerking verschilt deze van het oorspronkelijke gebeurtenistijdkenmerk. Als LAST niet kan worden verplaatst vóór de vensterbewerking, kunt u CollectTop gebruiken, waarbij u rangschikt op de oorspronkelijke tijd van de gebeurtenis.

Voorbeelden

De meest recente niet-null-sensorlezing zoeken:

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

Zoek de laatste keer dat het lezen groter was dan 50:

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

Zie ook

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