ISFIRST (Azure Stream Analytics)
Retourneert 1 als de gebeurtenis de eerste gebeurtenis binnen een bepaald vast interval is, of anders 0. De intervallen worden op dezelfde manier uitgelijnd als tumblingvensters (zie Tumblingvenster). ISFIRST wordt niet beïnvloed door predicaten in de WHERE-component, joinvoorwaarden in join-component of groeperingsexpressies in GROUP BY-component van de huidige query. ).
Syntaxis
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
Argumenten
tijdeenheid
Is de tijdseenheid voor de duur. De volgende tabel bevat alle geldige tijdeenheidwaarden --- beide vol
namen en afkortingen kunnen worden gebruikt in de query.
Tijdeenheid | Afkortingen |
---|---|
day | dd, d |
uur | hh |
minuut | mi, n |
seconde | ss, s |
Milliseconde | ms |
microseconde | Mcs |
Duur
Een groot geheel getal dat het aantal tijdeenheden in het interval aangeeft. Bijvoorbeeld
ISFIRST (minuut, 15) kijkt naar intervallen van 15 minuten. De begintijden van de intervallen zijn
op dezelfde manier zijn uitgelijnd als in tumblingvensters (zie Tumblingvenster (Azure Stream Analytics)).
[ OVER ( partition_by_clause [when_clause]) ]
De component OVER specificeert de subset van de gebeurtenissen waaronder deze gebeurtenis is gerangschikt:
PARTITION BY partition_by_expression component verdeelt de resultatenset die wordt geproduceerd door de FROM
component in partities waarop de functie wordt toegepast. Met andere woorden, elke gebeurtenis wordt vergeleken
alleen voor dergelijke andere gebeurtenissen die de waarde van partition_by_expression delen. Indien niet opgegeven, elke
gebeurtenis wordt gerangschikt met betrekking tot alle andere gebeurtenissen binnen het tijdsinterval.
WANNEER when_expression component een booleaanse voorwaarde opgeven voor de gebeurtenissen die moeten worden overwogen.
Met andere woorden, elke gebeurtenis wordt alleen gerangschikt in vergelijking met dergelijke andere gebeurtenissen die voldoen aan
when_expression. Als de gebeurtenis zelf niet voldoet aan when_expression, retourneert de functie 0.
De WHEN-component is optioneel.
Retourtypen
bigint (ofwel '1' of '0' die respectievelijk 'waar' of 'onwaar' vertegenwoordigen)
Algemene opmerkingen
ISFIRST is niet-deterministisch. Gebeurtenissen worden verwerkt in tijdelijke volgorde. Als er meerdere gebeurtenissen met dezelfde tijdstempel zijn, worden gebeurtenissen in de volgorde van aankomst verwerkt.
Het toepassen van ISFIRST op de resultatenset van een windowing-functie kan onverwachte resultaten opleveren. Vensterfuncties wijzigen de tijdstempel van gebeurtenissen, omdat elke vensterbewerking gebeurtenis aan het einde van het venster uitvoert. De huidige tijdstempel van een gebeurtenis kan worden geopend met system.timestamp(), na een vensterbewerking verschilt deze van het oorspronkelijke gebeurtenistijdkenmerk. Als ISFIRST niet kan worden verplaatst vóór de vensterbewerking, kunt u overwegen CollectTop te gebruiken en te ordenen op de oorspronkelijke gebeurtenistijd.
Voorbeelden
Geef aan of een sensorleesevenement de eerste tumblingintervallen van 10 minuten is:
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
Geef aan of een gebeurtenis de eerste tumblingintervallen binnen 10 minuten is per deviceid:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
Aangeven of een gebeurtenis de eerste gebeurtenis is met een waarde groter dan 50 binnen tumblingintervallen van 10 minuten
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'