POUŽÍT (Azure Stream Analytics)
Operátor APPLY umožňuje vyvolat funkci s hodnotou tabulky pro každý řádek vrácený výrazem vnější tabulky dotazu. Funkce s hodnotou tabulky funguje jako správný vstup a výraz vnější tabulky funguje jako levý vstup. Pravý vstup se vyhodnocuje pro každý řádek z levého vstupu a vytvořené řádky se zkombinují pro konečný výstup. Seznam sloupců vytvořených operátorem APPLY je sada sloupců v levém vstupu následovaná seznamem sloupců vrácených správným vstupem.
Existují dvě formy POUŽÍT: KŘÍŽOVÉ POUŽITÍ a VNĚJŠÍ POUŽÍT.
FUNKCE CROSS APPLY vrátí pouze řádky z vnější tabulky, které vytvoří sadu výsledků z funkce s hodnotou tabulky. Výsledek křížové použít nelze použít jako cílovou hodnotu TIMESTAMP BY. Můžete ale použít jednu úlohu Azure Stream Analytics, která provádí křížové použití, a druhou úlohu k provedení funkce TIMESTAMP BY.
Funkce OUTER APPLY vrátí oba řádky, které vytvářejí sadu výsledků, a řádky, které ne, s hodnotami NULL ve sloupcích vytvořených funkcí s hodnotou tabulky.
V Azure Stream Analytics jsou k dispozici dvě funkce s hodnotou tabulky, které usnadňují práci s poli Pole a Typ záznamu. Jsou to GetArrayElements a GetRecordProperties.
Syntaxe
<input> {CROSS | OUTER} APPLY <elements_selector>
<input> ::= input_name | input_alias
<elements_selector> ::=
{GetArrayElements | GetRecordProperties} (<column_name>) AS element_name
Argumenty
input_name | input_alias
Název nebo alias vstupního streamu.
Column_name
Název sloupce vstupního streamu.
element_name
Název nového sloupce obsahujícího výsledek funkce s hodnotou tabulky.
Návratové typy
Výstupem je záznam obsahující počáteční datovou část a záznam "element_name", který obsahuje výsledek funkce s hodnotou tabulky.
Výsledkem funkce GetArrayElements bude záznam se dvěma poli:
ArrayIndex: index elementu v poli
ArrayValue: hodnota elementu v poli.
Výsledkem funkce GetRecordProperties bude záznam se dvěma poli:
PropertyName: název vlastnosti v záznamu.
PropertyValue: hodnota vlastnosti v záznamu.
Příklady
V tomto příkladu při rozšíření scénáře mýtného spouštění předpokládáme, že auta mohou mít více než jednu registrační značku (např. auto tažné přívěsem by měly dvě). Křížové/vnější použití lze použít ke zploštění tohoto pole, tj. získání jednoho řádku na registrační značku.
CREATE TABLE input(TollId nvarchar(max), EntryTime datetime, Licenses array)
SELECT e.TollId, e.EntryTime, flat.ArrayValue AS licensePlate
FROM input AS e
CROSS APPLY GetArrayElements(e.Licenses) AS flat
Dotaz lze upravit tak, aby používal vnější použití, aby bylo možné sledovat také vozidla bez registrační značky.
SELECT e.TollId, e.EntryTime,
flat.ArrayValue AS licensePlate, flat.ArrayIndex AS licensePlateIndex
FROM input AS e
OUTER APPLY GetArrayElements(e.Licenses) AS flat
Další příklad použití vnořených polí (pole polí).
WITH firstQuery AS (
SELECT input.TollId, input.EntryTime,
flat.ArrayIndex AS i1, flat.ArrayValue AS licenses
FROM input
CROSS APPLY GetArrayElements(input.ArrayOfArray) AS flat)
SELECT firstQuery.TollId, firstQuery.EntryTime, firstQuery.i1,
flat2.ArrayIndex AS i2, flat2.ArrayValue AS license
FROM firstQuery
CROSS APPLY GetArrayElements(firstQuery.licenses) AS flat2