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)