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 .

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ů.