Door de gebruiker gedefinieerde Java script-functies Azure Stream Analytics
Azure Stream Analytics ondersteunt door de gebruiker gedefinieerde aggregaties (UDA) die zijn geschreven in Java script, kunt u complexe stateful bedrijfs logica implementeren. Binnen UDA hebt u volledige controle over de status gegevens structuur, status accumulatie, status decumulatie en cumulatieve resultaat berekening. In het artikel worden de twee verschillende java script UDA-interfaces geïntroduceerd, stappen voor het maken van een UDA en het gebruik van UDA met op Windows gebaseerde bewerkingen in Stream Analytics query.
Door de gebruiker gedefinieerde Java script-samen stellingen
Een door de gebruiker gedefinieerde statistische functie wordt bovenop een tijd venster specificatie gebruikt om een aggregatie over de gebeurtenissen in dat venster te genereren en een enkele resultaat waarde te produceren. Er zijn twee typen UDA-interfaces die Stream Analytics ondersteunen: vandaag, AccumulateOnly en AccumulateDeaccumulate. Beide typen UDA kunnen worden gebruikt door Tumblingvenstertriggers, verspringen, schuiven en het sessie venster. AccumulateDeaccumulate UDA werkt beter dan AccumulateOnly UDA wanneer het wordt gebruikt in combi natie met het venster voor verspringen, schuiven en sessies. U kiest een van de twee typen op basis van het algoritme dat u gebruikt.
AccumulateOnly-aggregaties
AccumulateOnly-aggregaties kunnen alleen nieuwe gebeurtenissen in de staat van de status verzamelen. het algoritme staat geen deaccumulatie van waarden toe. Kies dit aggregatie type wanneer het niet mogelijk is om een gebeurtenis informatie van de status waarde uit te voeren. Hieronder volgt de Java script-sjabloon voor AccumulatOnly-aggregaties:
// Sample UDA which state can only be accumulated.
function main() {
this.init = function () {
this.state = 0;
}
this.accumulate = function (value, timestamp) {
this.state += value;
}
this.computeResult = function () {
return this.state;
}
}
AccumulateDeaccumulate-aggregaties
Met AccumulateDeaccumulate aggregaties wordt de ontdubbeling van een vorige verzamelde waarde uit de status mogelijk, zoals het verwijderen van een sleutel-waardepaar uit een lijst met gebeurtenis waarden, of het aftrekken van een waarde uit een status van Sum aggregate. Hieronder volgt de Java script-sjabloon voor AccumulateDeaccumulate-aggregaties:
// Sample UDA which state can be accumulated and deaccumulated.
function main() {
this.init = function () {
this.state = 0;
}
this.accumulate = function (value, timestamp) {
this.state += value;
}
this.deaccumulate = function (value, timestamp) {
this.state -= value;
}
this.deaccumulateState = function (otherState){
this.state -= otherState.state;
}
this.computeResult = function () {
return this.state;
}
}
UDA-java script-functie declaratie
Elke Java script-UDA wordt gedefinieerd door een functie object declaratie. Hier volgen de belangrijkste elementen in een UDA-definitie.
Functiealias
De functie alias is de UDA-id. Gebruik in Stream Analytics query altijd UDA-alias in combi natie met een ' UDA '. 'com.microsoft.intune.mam'.
Functie type
Voor UDA moet het functie type Java script-UDA zijn.
Uitvoertype
Een specifiek type dat Stream Analytics taak wordt ondersteund of ' any ' als u het type wilt afhandelen in uw query.
Functienaam
De naam van dit functie object. De functie naam moet overeenkomen met de UDA-alias.
Methode-init ()
De methode init () initialiseert de status van de aggregatie. Deze methode wordt aangeroepen wanneer het venster wordt gestart.
Methode – cumulatief ()
De methode accumule () berekent de UDA-status op basis van de vorige status en de huidige gebeurtenis waarden. Deze methode wordt aangeroepen wanneer een gebeurtenis een tijd venster binnengaat (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW of SESSIONWINDOW).
Methode – deaccumulatie ()
De methode decumulatie () berekent de status opnieuw op basis van de vorige status en de huidige gebeurtenis waarden. Deze methode wordt aangeroepen wanneer een gebeurtenis een SLIDINGWINDOW of SESSIONWINDOW verlaat.
Methode – deaccumulateState ()
De methode deaccumulateState () berekent de status opnieuw op basis van de vorige status en de status van een hop. Deze methode wordt aangeroepen wanneer een set gebeurtenissen een HOPPINGWINDOW verlaat.
Methode – computeResult ()
De methode computeResult () retourneert een aggregatie resultaat op basis van de huidige status. Deze methode wordt aan het einde van een tijd venster aangeroepen (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW of SESSIONWINDOW).
Java script UDA ondersteunde invoer-en uitvoer gegevens typen
Raadpleeg voor Java script UDA-gegevens typen sectie Stream Analytics en Java script-type conversie van Java script-udf's integreren.
Een Java script-UDA toevoegen vanuit de Azure Portal
Hieronder vindt u een overzicht van het proces voor het maken van een UDA vanuit de portal. Het voor beeld dat hier wordt gebruikt, is het berekenen van tijd gewogen gemiddelden.
Nu gaan we een Java script-UDA maken onder een bestaande ASA-taak door de volgende stappen uit te voeren.
Meld u aan bij Azure Portal en zoek de bestaande Stream Analytics taak.
Klik vervolgens op de koppeling functies onder taak topologie.
Klik op het pictogram toevoegen om een nieuwe functie toe te voegen.
Selecteer in de nieuwe functie weergave Java script UDA als het functie type. vervolgens ziet u een standaard UDA-sjabloon in de editor.
Vul "TWA" in als de UDA-alias en wijzig de functie-implementatie als volgt:
// Sample UDA which calculate Time-Weighted Average of incoming values. function main() { this.init = function () { this.totalValue = 0.0; this.totalWeight = 0.0; } this.accumulate = function (value, timestamp) { this.totalValue += value.level * value.weight; this.totalWeight += value.weight; } // Uncomment below for AccumulateDeaccumulate implementation /* this.deaccumulate = function (value, timestamp) { this.totalValue -= value.level * value.weight; this.totalWeight -= value.weight; } this.deaccumulateState = function (otherState){ this.state -= otherState.state; this.totalValue -= otherState.totalValue; this.totalWeight -= otherState.totalWeight; } */ this.computeResult = function () { if(this.totalValue == 0) { result = 0; } else { result = this.totalValue/this.totalWeight; } return result; } }Wanneer u op de knop ' opslaan ' klikt, wordt uw UDA weer gegeven in de lijst met functies.
Klik op de nieuwe functie "TWA", u kunt de functie definitie controleren.
Java script-UDA aanroepen in ASA-query
In Azure Portal en open uw taak, bewerkt u de query en roept u de functie TWA () aan met het voor voegsel Uda. Bijvoorbeeld:
WITH value AS
(
SELECT
NoiseLevelDB as level,
DurationSecond as weight
FROM
[YourInputAlias] TIMESTAMP BY EntryTime
)
SELECT
System.Timestamp as ts,
uda.TWA(value) as NoseDoseTWA
FROM value
GROUP BY TumblingWindow(minute, 5)
Query's testen met UDA
Maak een lokaal JSON-bestand met onderstaande inhoud, upload het bestand naar Stream Analytics-taak en test hierboven de query.
[
{"EntryTime": "2017-06-10T05:01:00-07:00", "NoiseLevelDB": 80, "DurationSecond": 22.0},
{"EntryTime": "2017-06-10T05:02:00-07:00", "NoiseLevelDB": 81, "DurationSecond": 37.8},
{"EntryTime": "2017-06-10T05:02:00-07:00", "NoiseLevelDB": 85, "DurationSecond": 26.3},
{"EntryTime": "2017-06-10T05:03:00-07:00", "NoiseLevelDB": 95, "DurationSecond": 13.7},
{"EntryTime": "2017-06-10T05:03:00-07:00", "NoiseLevelDB": 88, "DurationSecond": 10.3},
{"EntryTime": "2017-06-10T05:05:00-07:00", "NoiseLevelDB": 103, "DurationSecond": 5.5},
{"EntryTime": "2017-06-10T05:06:00-07:00", "NoiseLevelDB": 99, "DurationSecond": 23.0},
{"EntryTime": "2017-06-10T05:07:00-07:00", "NoiseLevelDB": 108, "DurationSecond": 1.76},
{"EntryTime": "2017-06-10T05:07:00-07:00", "NoiseLevelDB": 79, "DurationSecond": 17.9},
{"EntryTime": "2017-06-10T05:08:00-07:00", "NoiseLevelDB": 83, "DurationSecond": 27.1},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 91, "DurationSecond": 17.1},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 115, "DurationSecond": 7.9},
{"EntryTime": "2017-06-10T05:09:00-07:00", "NoiseLevelDB": 80, "DurationSecond": 28.3},
{"EntryTime": "2017-06-10T05:10:00-07:00", "NoiseLevelDB": 55, "DurationSecond": 18.2},
{"EntryTime": "2017-06-10T05:10:00-07:00", "NoiseLevelDB": 93, "DurationSecond": 25.8},
{"EntryTime": "2017-06-10T05:11:00-07:00", "NoiseLevelDB": 83, "DurationSecond": 11.4},
{"EntryTime": "2017-06-10T05:12:00-07:00", "NoiseLevelDB": 89, "DurationSecond": 7.9},
{"EntryTime": "2017-06-10T05:15:00-07:00", "NoiseLevelDB": 112, "DurationSecond": 3.7},
{"EntryTime": "2017-06-10T05:15:00-07:00", "NoiseLevelDB": 93, "DurationSecond": 9.7},
{"EntryTime": "2017-06-10T05:18:00-07:00", "NoiseLevelDB": 96, "DurationSecond": 3.7},
{"EntryTime": "2017-06-10T05:20:00-07:00", "NoiseLevelDB": 108, "DurationSecond": 0.99},
{"EntryTime": "2017-06-10T05:20:00-07:00", "NoiseLevelDB": 113, "DurationSecond": 25.1},
{"EntryTime": "2017-06-10T05:22:00-07:00", "NoiseLevelDB": 110, "DurationSecond": 5.3}
]
Hulp vragen
Voor meer informatie kunt u onze micro soft Q&een vraag pagina voor Azure stream Analytics.