ISFIRST (Azure Stream Analytics)
Zwraca wartość 1, jeśli zdarzenie jest pierwszym zdarzeniem w danym stałym interwale lub 0 w przeciwnym razie. Interwały są wyrównane tak samo jak okna wirowania (zobacz Okno wirowania). IsFIRST nie ma wpływu na predykaty w klauzuli WHERE, warunków sprzężenia w klauzuli JOIN lub wyrażeń grupowania w klauzuli GROUP BY bieżącego zapytania. ).
Składnia
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
Argumenty
timeunit
Jest jednostką czasu na czas trwania. Poniższa tabela zawiera listę wszystkich prawidłowych wartości jednostek czasu --- obu pełnych
nazwy i skróty mogą być używane w zapytaniu.
Timeunit | Skróty |
---|---|
dzień | dd, d |
godzina | hh |
minuta | mi, n |
sekunda | ss, s |
Milisekundy | Pani |
mikrosekundy | Mcs |
Długość
Duża liczba całkowita określająca liczbę nitów czasowych w interwale. Na przykład
ISFIRST (minuta, 15) przyjrzy się 15-minutowym interwałom. Czasy rozpoczęcia interwałów to
wyrównane w taki sam sposób jak w oknach wirowania (zobacz Tumbling Window (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
Klauzula OVER określa podzestaw zdarzeń, wśród których to zdarzenie jest klasyfikowane:
KLAUZULA PARTITION BY partition_by_expression dzieli zestaw wyników generowany przez element FROM
klauzula do partycji, do których jest stosowana funkcja. Innymi słowy, każde zdarzenie jest porównywane
tylko do takich innych zdarzeń, które mają swoją wartość partition_by_expression. Jeśli nie zostanie określona, każda z nich
zdarzenie jest klasyfikowane w odniesieniu do wszystkich innych zdarzeń w przedziale czasu.
KLAUZULA WHEN when_expression określa warunek logiczny dla zdarzeń, które mają być brane pod uwagę.
Innymi słowy, każde zdarzenie jest klasyfikowane tylko w porównaniu z takimi innymi zdarzeniami, które spełniają wymagania
when_expression. Jeśli samo zdarzenie nie spełnia when_expression, funkcja zwraca wartość 0.
Klauzula WHEN jest opcjonalna.
Typy zwracane
bigint (odpowiednio "1" lub "0" reprezentujące "true" lub "false")
Uwagi ogólne
ISFIRST jest nieokreślony. 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 ISFIRST 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ść pliku ISFIRST przed operacją okna, rozważ użycie funkcji CollectTop, porządkowanie według oryginalnego czasu zdarzenia.
Przykłady
Wskaż, czy zdarzenie odczytu czujnika jest pierwszym w ciągu 10 minut interwałów wirowania:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
Określ, czy zdarzenie jest pierwszym w ciągu 10 minut interwałów wirowania na urządzenie:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
Wskazuje, czy zdarzenie jest pierwszym zdarzeniem o wartości większej niż 50 w ciągu 10 minut interwałów wirowania
per deviceid:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading > 50 AND devicetype = 'thermostat') as firstAbove,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading < 50 AND devicetype = 'thermostat') as firstUnder
FROM Input
WHERE
devicetype = 'thermostat'
Zobacz też
LAG (Azure Stream Analytics)
OSTATNI (Azure Stream Analytics)