Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Med operatorn LAST analytic kan en slå upp den senaste händelsen i en händelseström inom definierade begränsningar. Det är användbart i scenarier som databehandling senast kända bra värde (t.ex. inte null), hitta senaste gången när händelsen matchade vissa kriterier osv.
I Stream Analytics är omfattningen för LAST (dvs. hur långt tillbaka i historiken från den aktuella händelsen den måste se ut) alltid begränsad till ett begränsat tidsintervall med hjälp av LIMIT DURATION-satsen. LAST kan också begränsas till att endast överväga händelser som matchar den aktuella händelsen på en viss egenskap eller ett visst villkor med hjälp av PARTITION BY- och WHEN-satserna. LAST påverkas inte av predikat i WHERE-satsen, kopplingsvillkor i JOIN-satsen eller grupperingsuttryck i GROUP BY-satsen i den aktuella frågan.
Anmärkning: LAST(<expression>, <default>) motsvarar LAG(<expression>, 0, <default>) (som är förskjutningsvärde inställt på '0'). Observera att LAG(<expression>, 0, <default>) faktiskt inte är en giltig konstruktion eftersom LAG tar en förskjutning större eller lika med 1. Därför måste du använda LAST-operatorn i stället, vilket introducerades för bekvämlighet och bättre läsbarhet.
Syntax
LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  
Argumentpunkter
scalar_expression
Värdet som ska returneras. Det är antingen ett uttryck av vilken typ som helst som returnerar ett enskilt (skalärt) värde eller jokertecknet uttrycket '*'. För *returneras hela händelsen och kommer att finnas i resultathändelsen (kapslad post). scalar_expression får inte innehålla andra analysfunktioner eller externa funktioner.
förvalt
Det värde som ska returneras när det inte finns några villkor för händelsematchning. Om inget standardvärde har angetts returneras NULL. "Ingen händelse" kan vara fallet om det inte finns några tidigare händelser inom det tidsintervall som anges i limit_duration_clause eller om händelsen finns men inte matchar villkoret som anges i when_clause. Om händelsen finns och värdet för scalar_expression är NULL returneras NULL. standardvärdet kan vara en kolumn, underfråga eller ett annat uttryck, men det kan inte innehålla andra analysfunktioner eller externa funktioner. standard måste ha exakt samma typ som scalar_expression.
ÖVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
              partition_by_clause PARTITION BY-partitionsnyckelsatser <> begär att endast händelser vars värde för
              <partitionsnyckeln> är densamma som för den aktuella händelsen.
              limit_duration_clause DURATION(<enhet>, <längd>):
Anger hur mycket av historiken från den aktuella händelsen som måste beaktas.  Se DATEDIFF för en detaljerad beskrivning av enheter som stöds och deras förkortningar.  Om det inte finns tillräckligt med matchande händelser inom varaktighetsintervallet <returneras standardvärdet> .
when_clause Anger booleskt villkor för de händelser som ska beaktas i LAST-beräkningen. Om inga matchande händelser hittas inom varaktighetsintervallet <returneras standardvärdet> . When_clause är valfritt.
Returtyper
Datatypen för den angivna scalar_expression. NULL returneras om scalar_expression
Allmänna kommentarer
LAST är icke-terministisk. Händelser bearbetas i tidsordning. Om det finns flera händelser med samma tid bearbetas stämpelhändelser i ankomstordningen.
Att tillämpa LAST på resultatuppsättningen för en fönsterfunktion kan ge oväntade resultat. Fönsterfunktioner ändrar tidsstämpeln för händelser, eftersom varje fönsteråtgärd matar ut händelsen i slutet av fönstret. Den aktuella tidsstämpeln för en händelse kan nås med system.timestamp(), efter en fönsteråtgärd skiljer den sig från det ursprungliga händelsetidsattributet. Om LAST inte kan flyttas före fönsteråtgärden bör du överväga att använda CollectTop och beställa efter den ursprungliga händelsetiden.
Exempel
Hitta den senaste sensoravläsningen som inte är null:
SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   
Hitta förra gången när läsningen var större än 50:
SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input