Uživatelem definované funkce jazyka JavaScript v Azure Stream Analytics

Azure Stream Analytics podporuje uživatelem definované funkce, které jsou napsané v jazyce JavaScript. S bohatou sadou metod řetězců, RegExp, Math, Array a Date , které poskytuje jazyk JavaScript, je snazší vytvořit složitou transformaci dat s Stream Analytics úlohami.

Přehled

Uživatelsky definované funkce jazyka JavaScript podporují bezstavové, jenom výpočetní skalární funkce, které nevyžadují externí připojení. Návratovou hodnotou funkce může být jenom skalární (jediná) hodnota. Po přidání uživatelem definované funkce jazyka JavaScript do úlohy lze danou funkci použít kdekoli v dotazu jako integrovanou skalární funkci.

Některé scénáře, ve kterých můžou být uživatelem definované funkce jazyka JavaScript užitečné:

  • Analýza a manipulace s řetězci, které obsahují funkce s regulárními výrazy, například Regexp_Replace() a Regexp_Extract()
  • Kódování a dekódování dat, například převod z binárního kódování na šestnáctkové kódování
  • Provádění matematickýchch výpočtů pomocí matematických funkcí JavaScriptu
  • Provádění operací pole jako řazení, spojení, hledání a vyplnění

Tady je několik věcí, které se uživatelsky definovanou funkcí jazyka JavaScript v Stream Analytics nedají provést:

  • Volání externích koncových bodů REST, například provádění reverzního vyhledávání IP nebo přijímání referenčních dat z externího zdroje
  • Provádění vlastní serializace nebo deserializace formátu událostí u vstupů nebo výstupů
  • Vytváření vlastních agregací

I když funkce jako Date. GETDATE () nebo Math. Random () nejsou v definici Functions blokované, neměli byste je používat. Tyto funkce nevrátí stejný výsledek pokaždé, když je zavoláte, a služba Azure Stream Analytics neudržuje deník vyvolání funkcí a vrácené výsledky. Vrátí-li funkce jiný výsledek pro stejné události, není zaručena opakovatelnost při restartování úlohy vámi nebo službou Stream Analytics.

Přidání uživatelem definované funkce jazyka JavaScript do úlohy

Poznámka

Tyto kroky fungují na úlohách Stream Analytics nakonfigurovaných pro spouštění v cloudu. Pokud je vaše úloha Stream Analytics nakonfigurovaná tak, aby běžela na Azure IoT Edge, místo toho použijte Visual Studio a zapište uživatelsky definovanou funkci pomocí jazyka C#.

Pokud chcete vytvořit uživatelsky definovanou funkci JavaScriptu v úloze Stream Analytics, vyberte v části topologie úlohy možnost funkce . Pak z rozevírací nabídky + Přidat vyberte JavaScript UDF .

Přidat JavaScript UDF

Pak je nutné zadat následující vlastnosti a vybrat Uložit.

Vlastnost Popis
Alias funkce Zadejte název pro vyvolání funkce v dotazu.
Typ výstupu Typ, který se vrátí uživatelem definovanou funkcí jazyka JavaScript do dotazu Stream Analytics.
Definice funkce Implementace funkce JavaScriptu, která se spustí pokaždé, když se vaše UDF vyvolá z dotazu.

Testování a řešení potíží s JavaScript UDF

Logiku JavaScriptu pro systém souborů JavaScript můžete testovat a ladit v jakémkoli prohlížeči. Ladění a testování logiky těchto uživatelsky definovaných funkcí se v současnosti na portálu Stream Analytics nepodporuje. Jakmile funkce funguje podle očekávání, můžete ji přidat do Stream Analytics úlohy, jak je uvedeno výše, a pak ji vyvolat přímo z dotazu. Logiku dotazu můžete testovat pomocí JavaScriptu UDF pomocí Stream Analyticsch nástrojů pro Visual Studio.

Chyby jazyka JavaScript za běhu se považují za závažné a zobrazují se prostřednictvím protokolu aktivit. Pokud chcete protokol načíst, přejděte na portálu Azure Portal na příslušnou úlohu a vyberte Protokol aktivit.

Volání uživatelem definované funkce jazyka JavaScript v dotazu

Funkci JavaScriptu můžete v dotazu snadno vyvolat pomocí aliasu funkce s předponou UDF. Tady je příklad JavaScriptu UDF, který převede hexadecimální hodnoty na celé číslo vyvolané v Stream Analytics dotazu.

    SELECT
        time,
        UDF.hex2Int(offset) AS IntOffset
    INTO
        output
    FROM
        InputStream

Podporované objekty jazyka JavaScript

Uživatelem definované funkce jazyka JavaScript v Azure Stream Analytics podporují standardní předdefinované objekty jazyka JavaScript. Seznam těchto objektů najdete v tématu Globální objekty.

Převod typů pro Stream Analytics a JavaScript

Mezi typy podporovanými dotazovacím jazykem Stream Analytics a jazykem JavaScript existují rozdíly. Tato tabulka uvádí mapování převodu mezi těmito dvěma jazyky:

Stream Analytics JavaScript
bigint Číslo (JavaScript může používat celá čísla jenom do hodnoty 2^53)
DateTime Datum (JavaScript podporuje jenom milisekundy)
double Číslo
nvarchar(MAX) Řetězec
Záznam Objekt
Pole Pole
NULL Null

Převody z jazyka JavaScript do Stream Analytics:

JavaScript Stream Analytics
Číslo Bigint (pokud je číslo zaokrouhlené a je v rozsahu long.MinValue a long.MaxValue; jinak typ double)
Date (Datum) DateTime
Řetězec nvarchar(MAX)
Objekt Záznam
Pole Pole
Null, Nedefinováno NULL
Jakýkoli jiný typ (například funkce nebo chyba) Nepodporuje se (výsledkem je chyba za běhu)

Jazyk JavaScript rozlišuje velká a malá písmena a velká a malá písmena polí objektu v kódu JavaScriptu musí odpovídat velikosti písmen polí v příchozích datech. Úlohy s úrovní kompatibility 1,0 budou převádět pole z příkazu SQL SELECT na malá písmena. V části úroveň kompatibility 1,1 a vyšší budou mít pole z příkazu SELECT stejná velká písmena jako zadaná v dotazu SQL.

Další vzory uživatelem definovaných funkcí jazyka JavaScript

Zápis vnořeného řetězce JSON do výstupu

Pokud máte krok následného zpracování, který jako vstup používá výstup úlohy Stream Analytics a vyžaduje formát JSON, můžete do výstupu zapsat řetězec JSON. V dalším příkladu se volá funkce JSON.stringify(), která sbalí všechny dvojice název/hodnota ve vstupu a pak je zapíše jako jedinou hodnotu řetězce do výstupu.

Definice uživatelem definované funkce jazyka JavaScript:

function main(x) {
return JSON.stringify(x);
}

Vzorový dotaz:

SELECT
    DataString,
    DataValue,
    HexValue,
    UDF.jsonstringify(input) As InputEvent
INTO
    output
FROM
    input PARTITION BY PARTITIONID

Přetypování řetězce na objekt JSON, který se má zpracovat

Máte-li pole řetězce, které je JSON a chcete ho převést na objekt JSON pro zpracování v jazyce JavaScript UDF, můžete použít funkci JSON. Parse () pro vytvoření objektu JSON, který se pak dá použít.

Definice uživatelem definované funkce jazyka JavaScript:

function main(x) {
var person = JSON.parse(x);  
return person.name;
}

Vzorový dotaz:

SELECT
    UDF.getName(input) AS Name
INTO
    output
FROM
    input

Pro zpracování chyb použít try/catch

Bloky try/catch vám pomůžou identifikovat problémy se špatnými vstupními daty, která se předávají do JavaScriptu UDF.

Definice uživatelem definované funkce jazyka JavaScript:

function main(input, x) {
    var obj = null;

    try{
        obj = JSON.parse(x);
    }catch(error){
        throw input;
    }
    
    return obj.Value;
}

Vzorový dotaz: předejte celý záznam jako první parametr, aby se mohl vrátit, pokud dojde k chybě.

SELECT
    A.context.company AS Company,
    udf.getValue(A, A.context.value) as Value
INTO
    output
FROM
    input A

toLocaleString – ()

Metoda toLocaleString – v jazyce JavaScript může být použita k vrácení řetězce citlivého na jazyk, který představuje data pro datum a čas, kdy je tato metoda volána. I když Azure Stream analýzy přijímá pouze datum a čas UTC jako systémové časové razítko, tato metoda se dá použít k přetajnení systémového časového razítka do jiného národního prostředí a časového pásma. Tato metoda odpovídá stejnému chování implementace jako ta, která je k dispozici v aplikaci Internet Explorer.

Definice uživatelem definované funkce jazyka JavaScript:

function main(datetime){
    const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
    return event.toLocaleDateString('de-DE', options);
}

Vzorový dotaz: předání hodnoty DateTime jako vstupní hodnoty

SELECT
    udf.toLocaleString(input.datetime) as localeString
INTO
    output
FROM
    input

Výstupem tohoto dotazu bude vstupní hodnota DateTime v de-de s poskytnutými možnostmi.

Samstag, 28. Dezember 2019

Protokolování uživatele

Mechanismus protokolování umožňuje zachytit vlastní informace, když je úloha spuštěná. Data protokolu můžete použít k ladění nebo vyhodnocení správnosti vlastního kódu v reálném čase. Tento mechanismus je k dispozici prostřednictvím metody Console. log ().

console.log('my error message');

Ke zprávám protokolu můžete přistupovat prostřednictvím diagnostických protokolů.

Další kroky