ISFIRST (Azure Stream Analytics)
Vrátí hodnotu 1, pokud je událost první událostí v daném pevném intervalu, nebo 0 v opačném případě. Intervaly jsou zarovnané stejně jako přeskakující okna (viz Přeskakující okno). Funkce ISFIRST 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. ).
Syntaxe
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
Argumenty
timeunit
Je jednotka času pro dobu trvání. Následující tabulka uvádí všechny platné hodnoty časových jednotek --- plné
v dotazu lze použít názvy a zkratky.
Časová nit | Zkratky |
---|---|
day | dd, d |
hour | hh |
minute | mi, n |
second | ss, s |
Milisekund | Paní |
mikrosekundy | Mcs |
Doba trvání
Velké celé číslo, které určuje počet časových intervalů. Příklad:
Funkce ISFIRST(minuta; 15) se podívá na 15minutové intervaly. Počáteční časy intervalů jsou
zarovnané stejným způsobem jako v přeskakovaných oknech (viz Přeskakující okno (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
Klauzule OVER určuje podmnožinu událostí, mezi které je tato událost zařazena:
KLAUZULE PARTITION BY partition_by_expression vyděluje sadu výsledků vygenerované parametrem FROM.
do oddílů, na které je funkce použita. Jinými slovy, každá událost se porovnává
pouze k takovým jiným událostem, které sdílejí její hodnotu partition_by_expression. Pokud není zadáno, každý
událost je seřazena s ohledem na všechny ostatní události v časovém intervalu.
KDYŽ when_expression klauzule určuje logickou podmínku pro události, které se mají vzít v úvahu.
Jinými slovy, každá událost je seřazena pouze ve srovnání s jinými událostmi, které vyhovují
when_expression. Pokud samotná událost nevyhovuje when_expression, vrátí funkce hodnotu 0.
Klauzule WHEN je volitelná.
Návratové typy
bigint (buď "1", nebo "0" představující "true" nebo "false")
Obecné poznámky
ISFIRST 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 ISFIRST 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 ISFIRST nejde přesunout před operací okna, zvažte použití Funkce CollectTop a řazení podle původního času události.
Příklady
Určete, jestli je událost čtení senzoru první během 10minutových intervalů přeskakování:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
Určete, jestli je událost první během 10minutových intervalů přeskakování podle id zařízení:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
Určení, jestli je událost první událostí s hodnotou větší než 50 během 10minutových intervalů přeskakování
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'