Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Stream Analytics podporuje uživatelem definované agregace (UDA) napsané v JavaScriptu. Umožňuje implementovat složitou stavovou obchodní logiku. V rámci UDA máte úplnou kontrolu nad strukturou dat stavu, akumulací stavu, deakumulací stavu a výpočtem agregovaných výsledků. Tento článek představuje dvě různá rozhraní UDA JavaScriptu, postup vytvoření UDA a použití UDA s operacemi založenými na okně v dotazu Stream Analytics.
Uživatelem definované agregace JavaScriptu
Uživatelem definovaná agregace se používá nad specifikací časového intervalu k agregaci událostí v daném okně a vytvoření jedné výsledné hodnoty. Existují dva typy rozhraní UDA, které dnes Stream Analytics podporuje: AccumulateOnly a AccumulateDeaccumulate. Oba typy UDA lze použít pro Tumbling Window, Hopping Window, Sliding Window a Session Window. AccumulateDeaccumulate UDA funguje lépe než AccumulateOnly UDA při použití společně se skákáním, posuvným a oknem relace. Na základě algoritmu, který používáte, zvolíte jeden ze dvou typů.
Kumulované agregace
Agregáty AccumulateOnly mohou pouze přidávat nové události do svého stavu, algoritmus neumožňuje deakumulaci hodnot. Tento agregační typ zvolte, když není možné oddělit informace o události od hodnoty stavu. Následuje javascriptová šablona pro agregace AccumulateOnly:
// 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;
}
}
Kumulované agregace
Akumulované agregáty umožňují deakumulaci předchozí akumulované hodnoty ze stavu, například odstranění dvojice klíč-hodnota ze seznamu hodnot událostí nebo odčtení hodnoty z celkového stavu. Následuje javascriptová šablona pro agregace AccumulateDeaccumulate:
// 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 – Deklarace funkce JavaScriptu
Každá javascriptová UDA je definována deklarací objektu function. Následuje hlavní prvky v definici UDA.
Alias funkce
Funkční alias je identifikátor UDA. Při zavolání v dotazu Stream Analytics vždy používejte alias UDA společně s předponou "uda".
Typ funkce
Pro UDA by měl být typ funkce JavaScript UDA.
Typ výstupu
Konkrétní typ, který úloha Stream Analytics podporuje, nebo Jakýkoli, pokud chcete zpracovat typ v dotazu.
Název funkce
Název tohoto objektu funkce. Název funkce by měl odpovídat aliasu UDA.
Metoda – init()
Init() metoda inicializuje stav agregace. Tato metoda se volá při spuštění okna.
Metoda – kumulovat()
Metoda kumuluje stav UDA na základě předchozího stavu a aktuálních hodnot událostí. Tato metoda se volá, když událost vstoupí do časového okna (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW nebo SESSIONWINDOW).
Metoda – deakumulovat()
Metoda deaccumulate() přepočítá stav na základě předchozího stavu a aktuálních hodnot událostí. Tato metoda se volá, když událost opustí okno typu SLIDINGWINDOW nebo SESSIONWINDOW.
Metoda – deaccumulateState()
Metoda deaccumulateState() přepočítá stav na základě předchozího stavu a stavu skoku. Tato metoda se volá, když sada událostí opustí HOPPINGWINDOW.
Metoda – computeResult()
Metoda computeResult() vrátí agregovaný výsledek na základě aktuálního stavu. Tato metoda se volá na konci časového okna (TUMBLINGWINDOW, HOPPINGWINDOW, SLIDINGWINDOW nebo SESSIONWINDOW).
Podpora vstupních a výstupních datových typů UDA v JavaScriptu
Pro typy dat JavaScript UDA se podívejte na oddíl Stream Analytics a konverze typů JavaScriptu v Integrace JavaScript UDF.
Přidání UDA JavaScriptu z Azure Portalu
Níže si projdeme proces vytvoření UDA z portálu. Příklad, který zde používáme, je výpočet průměrů vážených podle času.
Nyní vytvořme JavaScriptové UDA v rámci existující úlohy ASA pomocí následujících kroků.
Přihlaste se k webu Azure Portal a vyhledejte existující úlohu Stream Analytics.
Pak vyberte odkaz na funkce v části TOPOLOGIE ÚLOHY.
Pokud chcete přidat novou funkci, vyberte Přidat .
V zobrazení Nová funkce vyberte jako typ funkce JavaScript UDA a pak se v editoru zobrazí výchozí šablona UDA.
Jako alias UDA vyplňte "TWA" a změňte implementaci funkce následujícím způsobem:
// 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; } }Jakmile vyberete tlačítko Uložit, vaše UDA se zobrazí v seznamu funkcí.
Vyberte novou funkci TWA, můžete zkontrolovat definici funkce.
Volání JavaScriptu UDA v dotazu ASA
V Azure portálu otevřete úlohu, upravte dotaz a volejte funkci TWA() s mandátní předponou "uda". Příklad:
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)
Testování dotazu s využitím UDA
Vytvořte místní soubor JSON s následujícím obsahem, nahrajte soubor do úlohy Stream Analytics a otestujte výše uvedený dotaz.
[
{"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}
]
Získání pomoci
Pokud potřebujete další pomoc, vyzkoušejte naši stránku pro otázky MicrosoftU pro Azure Stream Analytics.