OVER (Azure Stream Analytics)
Dla każdego wiersza klauzula OVER określa grupowanie wierszy przed zastosowaniem skojarzonej funkcji agregującej lub analitycznej.
Klauzulę OVER można używać w dowolnym miejscu, w którym jest dozwolona funkcja skalarna. Można na przykład użyć klauzuli OVER w klauzulach SELECT, WHERE, JOIN lub GROUP BY.
Klauzula OVER grupuje wiersze bezpośrednio z danych wejściowych zapytania. Nie ma to wpływu na predykaty w klauzuli WHERE, warunków dołączenia w klauzuli JOIN lub warunków grupowania w klauzuli GROUP BY.
Obecnie następujące funkcje agregujące są obsługiwane za pomocą klauzuli OVER:
- SUM
- AVG
- MIN
- MAX
Składnia
OVER ([<PARTITION BY clause>] <LIMIT DURATION clause> [<WHEN clause>])
<PARTITION BY clause> ::== PARTITION BY partition_key, ... [n]
<LIMIT DURATION clause> ::== LIMIT DURATION (unit, length)
<WHEN clause> ::== WHEN boolean_expression
Argumenty
<PARTITION BY, klauzula>
Określa, że tylko wiersze z tym samym <partition_key> będą brane pod uwagę dla funkcji agregującej lub analitycznej.
<KLAUZULA LIMIT DURATION>
Określa, ile historii z bieżącego wiersza znajduje się w grupie. Zobacz DATEDIFF , aby uzyskać szczegółowy opis obsługiwanych jednostek i ich skrótów.
<WHEN, KLAUZULA>
Określa warunek logiczny dla wierszy do ujęć w grupie.
Uwagi ogólne
Zastosowanie funkcji agregującej lub analitycznej z funkcją OVER 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.
Przykłady
Oblicz średnią temperaturę w ciągu ostatnich 5 minut na czujnik:
SELECT AVG(temperature) OVER (PARTITION BY id LIMIT DURATION (minute, 5))
FROM input
Zgłaszanie alertu, jeśli zasób był w złej kondycji w ciągu ostatniej godziny:
SELECT 1 AS alert
FROM input
WHERE MAX(healthy) OVER (PARTITION BY id LIMIT DURATION (hour, 1)) = 0