Sdílet prostřednictvím


LAST (Azure Stream Analytics)

Analytický operátor LAST umožňuje vyhledat nejnovější událost ve streamu událostí v rámci definovaných omezení. Je to užitečné ve scénářích, jako je výpočet poslední známé dobré hodnoty (např. ne null), vyhledání posledního času, kdy událost odpovídala určitým kritériím atd.

Ve Stream Analytics je rozsah funkce LAST (tj. jak daleko od aktuální události musí vypadat) vždy omezen na konečný časový interval pomocí klauzule LIMIT DURATION. Funkce LAST může být volitelně omezena pouze na události, které odpovídají aktuální události určité vlastnosti nebo podmínky pomocí klauzulí PARTITION BY a WHEN. Funkce LAST není ovlivněna predikáty v klauzuli WHERE, podmínkami spojení v klauzuli JOIN nebo seskupováním výrazů v klauzuli GROUP BY aktuálního dotazu.

Poznámka: LAST(<expression>, <default>) je ekvivalentem LAG(<expression>, 0, <default>) (hodnota posunu nastavená na 0). Všimněte si, že LAG(<výraz>, 0, <výchozí>) ve skutečnosti není platný konstruktor, protože LAG přebírá posun větší nebo roven 1. Proto musíte místo toho použít operátor LAST, který byl zaveden pro usnadnění a lepší čitelnost.

Syntaxe

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

Argumenty

Scalar_expression

Hodnota, která se má vrátit. Jedná se buď o výraz libovolného typu, který vrací jednu (skalární) hodnotu, nebo výraz se zástupným znakem *. Pro *se vrátí celá událost a bude obsažena ve výsledné události (vnořený záznam). scalar_expression nesmí obsahovat jiné analytické funkce ani externí funkce.

default

Hodnota, která se má vrátit, pokud neexistují žádná kritéria pro porovnávání událostí. Pokud není zadána výchozí hodnota, vrátí se hodnota NULL. K žádné události může docházet v případě, že v časovém intervalu zadaném v limit_duration_clause neexistují žádné předchozí události nebo pokud událost existuje, ale neodpovídá podmínce zadané v when_clause. Pokud událost existuje a hodnota scalar_expression je NULL, vrátí se hodnota NULL. výchozí může být sloupec, poddotaz nebo jiný výraz, ale nemůže obsahovat jiné analytické funkce nebo externí funkce. výchozí musí mít přesně stejný typ jako scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause KLAUZULE PARTITION BY <partition key> vyžaduje, aby pouze události, jejichž hodnota
<klíč oddílu je stejný jako klíč> aktuální události, kterou je třeba vzít v úvahu.

limit_duration_clause DURATION(<jednotka>, <délka>):
Určuje, jak velkou část historie z aktuální události je třeba vzít v úvahu. Podrobný popis podporovaných jednotek a jejich zkratek najdete v tématu DATEDIFF. Pokud se v intervalu DURATION nenajde dostatek odpovídajících událostí, <vrátí se výchozí> hodnota.

when_clause Určuje logickou podmínku pro události, které se mají vzít v úvahu ve výpočtu LAST. Pokud se v intervalu DURATION nenajde žádná odpovídající událost, <vrátí se výchozí> hodnota. When_clause je nepovinný.

Návratové typy

Datový typ zadaného scalar_expression. Pokud scalar_expression, vrátí se hodnota NULL.

Obecné poznámky

LAST je nedeterministické. Události se zpracovávají v dočasném pořadí. Pokud existuje několik událostí se stejným časovým razítkem, události se zpracovávají v pořadí doručení.

Použití funkce LAST na sadu výsledků funkce oken může vést k neočekávaným výsledkům . Funkce oken mění časové razítko událostí, protože každá operace okna vypíše událost na konci okna. Aktuální časové razítko události je přístupné pomocí system.timestamp() a po operaci okna se bude lišit od původního atributu času události. Pokud funkci LAST nejde přesunout před operací okna, zvažte použití funkce CollectTop, která je seřazená podle původního času události.

Příklady

Vyhledání nejnovějšího čtení senzoru bez hodnoty null:

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

Najít čas, kdy bylo čtení větší než 50:

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

Viz také

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