ISFIRST (Azure Stream Analytics)
1-et ad vissza, ha az esemény az első esemény egy adott rögzített intervallumon belül, vagy 0 ellenkező esetben. Az intervallumok ugyanúgy vannak igazítva, mint a ugróablakok (lásd: Átfedésmentes ablak). Az ISFIRST-et nem érintik a WHERE záradék predikátumai, a JOIN záradék illesztési feltételei vagy az aktuális lekérdezés GROUP BY záradékában található csoportosítási kifejezések. ).
Szintaxis
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
Argumentumok
timeunit
Az időtartam időegysége. Az alábbi táblázat felsorolja az összes érvényes időegység-értéket, --- mind a
nevek és rövidítések használhatók a lekérdezésben.
Timeunit | Rövidítések |
---|---|
nap | dd, d |
óra | óó |
perc | mi, n |
másodperc | ss, s |
ezredmásodperc | Ms |
mikroszekundum | Mcs |
Időtartam
Egy nagy egész szám, amely az időegységek számát adja meg az intervallumban. Például:
Az ISFIRST(perc, 15) 15 perces időközöket fog vizsgálni. Az intervallumok kezdő időpontjai a következők:
ugyanúgy van igazítva, mint a ugróablakokban (lásd: Átfedésmentes ablak (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
Az OVER záradék határozza meg azoknak az eseményeknek a részhalmazát, amelyek között ez az esemény van rangsorolva:
A PARTITION BY partition_by_expression záradék elosztja a FROM által előállított eredményhalmazt
záradékot azokra a partíciókra, amelyekre a függvényt alkalmazza. Más szóval minden eseményt összehasonlítunk
csak az olyan egyéb eseményekre, amelyek a partition_by_expression értékét osztják meg. Ha nincs megadva, mindegyik
az esemény az időintervallumon belüli összes többi eseményre vonatkozóan van rangsorolva.
A WHEN when_expression záradék a figyelembe venni kívánt események logikai feltételét adja meg.
Más szóval minden esemény csak azokhoz az eseményekhez képest van rangsorolva, amelyek megfelelnek a
when_expression. Ha maga az esemény nem felel meg when_expression, a függvény 0 értéket ad vissza.
A WHEN záradék nem kötelező.
Visszatérési típusok
bigint (az "1" vagy a "0" az "igaz" vagy a "hamis" értéket jelöli)
Általános megjegyzések
Az ISFIRST nemdeterminisztikus. Az események időbeli sorrendben vannak feldolgozva. Ha több, azonos időbélyeggel rendelkező esemény is van, a rendszer az érkezés sorrendjében dolgozza fel az eseményeket.
Az ISFIRST alkalmazása egy ablakfüggvény eredményhalmazára váratlan eredményeket eredményezhet. Az ablakfüggvények megváltoztatják az események időbélyegét, mivel minden ablakművelet az ablak végén kimeneteli az eseményt. Egy esemény aktuális időbélyege a system.timestamp() használatával érhető el, az ablakművelet után az eltér az eredeti eseményidő attribútumtól. Ha az ISFIRST nem helyezhető át az ablakművelet előtt, fontolja meg a CollectTop használatát, és rendeljen az eredeti eseményidő szerint.
Példák
Annak jelzése, hogy az érzékelő olvasási eseménye az első 10 perces ugróintervallumon belül:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
Adja meg, hogy egy esemény-e az első az eszközazonosítónkénti 10 perces ugróintervallumon belül:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
Azt jelzi, hogy az esemény-e az első olyan esemény, amelynek értéke 50-nél nagyobb 10 perces ugróintervallumon belül
eszközazonosítónként:
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'