OSTATNI (Azure Stream Analytics)

Operator ANALIZY LAST umożliwia wyszukiwanie ostatniego zdarzenia w strumieniu zdarzeń w ramach zdefiniowanych ograniczeń. Jest to przydatne w scenariuszach, takich jak przetwarzanie ostatniej znanej dobrej wartości (np. nie null), znalezienie czasu ostatniego, gdy zdarzenie spełnia określone kryteria itp.

W usłudze Stream Analytics zakres LAST (czyli jak daleko do historii z bieżącego zdarzenia, które musi wyglądać) jest zawsze ograniczony do skończonego interwału czasu przy użyciu klauzuli LIMIT DURATION. Opcja LAST może być ograniczona tylko do zdarzeń, które pasują do bieżącego zdarzenia w określonej właściwości lub warunku przy użyciu klauzul PARTITION BY i WHEN. Last nie ma wpływu na predykaty w klauzuli WHERE, warunki sprzężenia w klauzuli JOIN lub wyrażenia grupowania w klauzuli GROUP BY bieżącego zapytania.

Uwaga: LAST(<expression>, <default>) jest odpowiednikiem wartości LAG(<expression>, 0, <default>) (czyli wartości przesunięcia ustawionej na wartość "0"). Należy pamiętać, że wartość LAG(<wyrażenie>, 0, <domyślna>) nie jest prawidłową konstrukcją, ponieważ opóźnienie przyjmuje przesunięcie większe lub równe 1. Dlatego należy zamiast tego użyć operatora LAST, który został wprowadzony dla wygody i lepszej czytelności.

Składnia

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

Argumenty

Scalar_expression

Zwracana wartość. Jest to wyrażenie dowolnego typu zwracające pojedynczą (skalarną) wartość lub wyrażenie wieloznaczne "*". W przypadku ciągu "*" całe zdarzenie zostanie zwrócone i będzie zawarte w zdarzeniu wynikowym (rekord zagnieżdżony). scalar_expression nie może zawierać innych funkcji analitycznych ani funkcji zewnętrznych.

default

Wartość, która ma być zwracana, gdy nie ma kryteriów dopasowania zdarzeń. Jeśli nie określono wartości domyślnej, zwracana jest wartość NULL. "Brak zdarzenia" może mieć miejsce, jeśli nie ma wcześniejszych zdarzeń w przedziale czasu określonym w limit_duration_clause lub zdarzenie istnieje, ale nie jest zgodne z warunkiem określonym w when_clause. Jeśli zdarzenie istnieje, a wartość scalar_expression ma wartość NULL, zwracana jest wartość NULL. wartość domyślna może być kolumną, podquerią lub innym wyrażeniem, ale nie może zawierać innych funkcji analitycznych ani funkcji zewnętrznych. wartość domyślna musi mieć dokładnie taki sam typ jak scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause KLAUZULA PARTITION BY <partition key> żąda tylko zdarzeń, których wartość
<klucz> partycji jest taki sam jak w przypadku bieżącego zdarzenia, które należy uwzględnić.

limit_duration_clause DURATION(<jednostka>, <długość>):
Określa, ile historii z bieżącego zdarzenia należy uwzględnić. Zobacz DATEDIFF, aby uzyskać szczegółowy opis obsługiwanych jednostek i ich skrótów. Jeśli w interwale CZASU znaleziono za mało pasujących zdarzeń, <zwracana jest wartość domyślna> .

when_clause Określa warunek logiczny dla zdarzeń, które mają być brane pod uwagę w obliczeniach LAST. Jeśli w interwale CZASU znaleziono żadne pasujące zdarzenia, <zwracana jest wartość domyślna> . When_clause jest opcjonalny.

Typy zwracane

Typ danych określonego scalar_expression. Wartość NULL jest zwracana, jeśli scalar_expression

Uwagi ogólne

LAST jest nieokreślone. Zdarzenia są przetwarzane w kolejności czasowej. Jeśli istnieje kilka zdarzeń z tymi samymi zdarzeniami sygnatury czasowej, są przetwarzane w kolejności przyjazdu.

Zastosowanie funkcji LAST w zestawie wyników funkcji okien może spowodować nieoczekiwane wyniki. Funkcje okien zmieniają sygnaturę czasową zdarzeń, ponieważ każda operacja okna generuje zdarzenie na końcu okna. Dostęp do bieżącej sygnatury czasowej zdarzenia można uzyskać za pomocą atrybutu system.timestamp(), po operacji okna różni się od oryginalnego atrybutu czasu zdarzenia. Jeśli nie można przenieść last przed operacją okna, rozważ użycie funkcji CollectTop, porządkowanie według oryginalnego czasu zdarzenia.

Przykłady

Znajdź najnowszy odczyt czujnika o wartości innej niż null:

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

Znajdź ostatni raz, gdy odczyt był większy niż 50:

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

Zobacz też

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