Felhasználó által definiált Azure Stream Analytics JavaScript-összesítések
Az Azure Stream Analytics támogatja a JavaScriptben írt, felhasználó által definiált aggregátumokat (UDA), így összetett állapotalapú üzleti logikát valósíthat meg. Az UDA-on belül teljes mértékben szabályozhatja az állapotadatok struktúráját, az állapotfelhalmozást, az állapotok dekumulációját és az összesített eredmények számítását. A cikk bemutatja a két különböző JavaScript UDA-felületet, a UDA létrehozásának lépéseit, valamint az UDA használatát ablakalapú műveletekkel a Stream Analytics-lekérdezésben.
JavaScript felhasználó által definiált összesítések
A felhasználó által definiált összesítés egy időablak-specifikáción felül az adott ablakban lévő események összesítésére és egyetlen eredményérték létrehozására szolgál. A Stream Analytics kétféle UDA-felületet támogat ma, a AccumulateOnly és a AccumulateDeaccumulate felületet. Az UDA mindkét típusát használhatja a csúszás, a felhúzás, a csúszás és a munkamenetablak. A AccumulateDeaccumulate UDA jobban teljesít, mint a AccumulateOnly UDA a Hopping, a Sliding és a Session Window együttes használatakor. A használt algoritmus alapján választhatja ki a két típus egyikét.
Halmozott összesítések
A AccumulateOnly aggregátumok csak új eseményeket halmozhatnak fel az állapotukba, az algoritmus nem teszi lehetővé az értékek deakkumulációját. Ezt az összesített típust akkor válassza, ha az állapotértékből származó eseményinformációk deakkumulálása lehetetlen. Az Alábbiakban az AccumulatOnly-összesítésekhez készült JavaScript-sablon található:
// 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 aggregátumok
A AccumulateDeaccumulate aggregátumok lehetővé teszik egy korábbi halmozott érték deaccumulációját az állapotból, például eltávolíthat egy kulcs-érték párot az eseményértékek listájából, vagy kivonhat egy értéket az összegösszesítés állapotából. Az alábbiakban a AccumulateDeaccumulate összesítések JavaScript-sablonja található:
// 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 – JavaScript-függvény deklarációja
Minden JavaScript UDA függvényobjektum-deklarációval van definiálva. Az alábbiakban az UDA-definíció főbb elemeit követjük.
Függvény aliasa
A függvény aliasa az UDA-azonosító. Amikor a Stream Analytics-lekérdezésben meghívják, mindig használjon UDA aliast egy "uda" előtaggal együtt.
Függvény típusa
UDA esetén a függvénytípusnak JavaScript UDA-nak kell lennie.
Kimeneti típus
Egy adott típus, amelyet a Stream Analytics-feladat támogatott, vagy "Bármely", ha a lekérdezésben szereplő típust szeretné kezelni.
Függvénynév
A függvényobjektum neve. A függvény nevének meg kell egyeznie az UDA aliasával.
Metódus – init()
Az init() metódus inicializálja az aggregátum állapotát. Ezt a metódust az ablak indításakor hívjuk meg.
Metódus – halmoz()
A halmozási() metódus kiszámítja az UDA-állapotot az előző állapot és az aktuális eseményértékek alapján. Ezt a metódust akkor nevezzük, ha egy esemény egy időablakba lép (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW vagy Standard kiadás SSIONWINDOW).
Metódus – deaccumulate()
A deaccumulate() metódus újraszámítja az állapotot az előző állapot és az aktuális eseményértékek alapján. Ezt a metódust akkor hívjuk meg, ha egy esemény elhagyja a SLIDINGWINDOW vagy Standard kiadás SSIONWINDOW függvényt.
Metódus – deaccumulateState()
A deaccumulateState() metódus újraszámítja az állapotot az előző állapot és a ugrás állapota alapján. Ezt a metódust akkor hívjuk meg, ha egy eseménykészlet elhagyja a HOPPINGWINDOW-t.
Metódus – computeResult()
A computeResult() metódus az aktuális állapot alapján ad vissza összesített eredményt. Ezt a metódust egy időablak végén hívjuk meg (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW vagy Standard kiadás SSIONWINDOW).
JavaScript UDA által támogatott bemeneti és kimeneti adattípusok
JavaScript UDA-adattípusok esetén tekintse meg a JavaScript UDF-ek integrálásának Stream Analytics és JavaScript típusú konvertálását ismertető szakaszt.
JavaScript UDA hozzáadása az Azure Portalról
Az alábbiakban bemutatjuk, hogyan hozhat létre UDA-t a Portálról. Az alábbi példában a számítási idő súlyozott átlagait használjuk.
Most hozzunk létre egy JavaScript UDA-t egy meglévő ASA-feladat alatt a következő lépésekkel.
Jelentkezzen be az Azure Portalra, és keresse meg a meglévő Stream Analytics-feladatot.
Ezután válassza ki a függvényhivatkozást a JOB TOPOLOGY alatt.
Új függvény hozzáadásához válassza a Hozzáadás lehetőséget.
Az Új függvény nézetben válassza a JavaScript UDA-t függvénytípusként, majd megjelenik egy alapértelmezett UDA-sablon a szerkesztőben.
Töltse ki a "TWA" kifejezést UDA-aliasként, és módosítsa a függvény implementációját az alábbiak szerint:
// 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; } }
A "Mentés" gomb kiválasztása után az UDA megjelenik a függvénylistában.
Válassza ki az új "TWA" függvényt, és ellenőrizheti a függvénydefiníciót.
JavaScript UDA meghívása ASA-lekérdezésben
Az Azure Portalon szerkessze a lekérdezést, és hívja meg a TWA() függvényt egy "uda" előtaggal. Példa:
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)
Lekérdezés tesztelése az UDA használatával
Hozzon létre egy helyi JSON-fájlt az alábbi tartalommal, töltse fel a fájlt a Stream Analytics-feladatba, és tesztelje a fenti lekérdezést.
[
{"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}
]
Segítség kérése
További segítségért próbálja ki a Microsoft Q&A kérdésoldalát az Azure Stream Analyticshez.
Következő lépések
- Az Azure Stream Analytics bemutatása
- Get started using Azure Stream Analytics (Bevezetés az Azure Stream Analytics használatába)
- Scale Azure Stream Analytics jobs (Azure Stream Analytics-feladatok méretezése)
- Az Azure Stream Analytics lekérdezési nyelvi referenciája
- Azure Stream Analytics felügyeleti REST API-referencia