Příkaz pattern

Vzor je konstrukce, která mapuje řetězcové řazené kolekce členů na tabulkové výrazy. Každý vzor musí deklarovat název vzoru a volitelně definovat mapování vzoru. Vzory, které definují mapování, vrátí při vyvolání tabulkový výraz. Jakékoli dva příkazy musí být odděleny středníkem.

Prázdné vzory jsou vzory, které jsou deklarovány, ale nedefinují mapování. Při vyvolání vrátí chybovou SEM0036 spolu s podrobnostmi o chybějících definicích vzorů v hlavičce HTTP. Aplikace střední vrstvy, které poskytují prostředí dotazovací jazyk Kusto (KQL), můžou vrácené podrobnosti používat jako součást svého procesu k obohacení výsledků dotazů KQL. Další informace najdete v tématu Práce s aplikacemi střední vrstvy.

Syntax

  • Deklarace prázdného vzoru:

    declarepatternNázev vzoru;

  • Deklarujte a definujte vzor:

    declarepattern = (Název vzoruArgName:ArgType [, ... ]) [[PathName:PathArgType]]

    {

          (ArgValue1_1 [,ArgValue2_1, ... ] ) [ .[PathValue_1] ] ={expression1};

        [ (ArgValue1_2 [,ArgValue2_2, ... ] ) [ .[PathValue_2] ] ={výraz2}; ... ]

    } ;

  • Vyvolání vzoru:

    • (Název vzoruArgValue1 [,ArgValue2 ...] ).PathValue
    • (Název vzoruArgValue1 [,ArgValue2 ...] ).["PathValue"]

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
Název vzoru string ✔️ Název vzoru.
ArgName string ✔️ Název argumentu. Vzory můžou mít jeden nebo více argumentů.
Typ Arg string ✔️ Skalární datový typ argumentu ArgName . Možné hodnoty: string
Cesta string Název argumentu cesta. Vzory nesmí mít žádnou cestu nebo jednu cestu.
Typ cesty string Typ argumentu PathArgType . Možné hodnoty: string
ArgValue string ✔️ ArgName a volitelné hodnoty řazené kolekce členů, které se mají mapovat na výraz.
PathValue string Hodnota, která se má mapovat pro PathName.
expression string ✔️ Tabulkový výraz nebo výraz lambda, který odkazuje na funkci vracející tabulková data. Příklad: Logs | where Timestamp > ago(1h)

Příklady

V každém z následujících příkladů je deklarován, definován a následně vyvolán vzor.

Definování jednoduchých vzorů

Následující příklad definuje vzor, který mapuje stavy na výraz, který vrací hlavní město.

declare pattern country = (name:string)[state:string]
{
  ("USA").["New York"] = { print Capital = "Albany" };
  ("USA").["Washington"] = { print Capital = "Olympia" };
  ("Canada").["Alberta"] = { print Capital = "Edmonton" };
};
country("Canada").Alberta

Výstup

Capital
Edmonton

Následující příklad definuje vzor, který definuje některá data aplikací s vymezeným oborem.

declare pattern App = (applicationId:string)[scope:string]  
{
    ('a1').['Data']    = { range x from 1 to 5 step 1 | project App = "App #1", Data    = x };
    ('a1').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #1", Metrics = rand() };
    ('a2').['Data']    = { range x from 1 to 5 step 1 | project App = "App #2", Data    = 10 - x };
    ('a3').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #3", Metrics = rand() };
};
union App('a2').Data, App('a1').Metrics

Výstup

Aplikace Data Metriky
Aplikace č. 2 9
Aplikace č. 2 8
Aplikace č. 2 7
Aplikace č. 2 6
Aplikace č. 2 5
Aplikace č. 1 0.53674122855537532
Aplikace č. 1 0.78304713305654439
Aplikace č. 1 0.20168860732346555
Aplikace č. 1 0.13249123867679469
Aplikace č. 1 0.19388305330563443

Normalizace

Existují varianty syntaxe pro vyvolání vzorů. Například následující sjednocení vrátí výraz s jedním vzorem, protože všechna volání mají stejný vzor.

declare pattern app = (applicationId:string)[eventType:string]
{
    ("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
    ("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union
  app("ApplicationX").StartEvents,
  app('ApplicationX').StartEvents,
  app("ApplicationX").['StartEvents'],
  app("ApplicationX").["StartEvents"]

Bez zástupných znaků

Neexistuje žádné zvláštní zacházení se zástupnými znakůymimi. Například následující dotaz vrátí jeden chybějící vzor vyvolání.

declare pattern app = (applicationId:string)[eventType:string]
{
    ("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
    ("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union app("ApplicationX").["*"]
| count

Vrátí sémantickou chybu.

Některé odkazy na vzor nebyly deklarovány. Zjištěné odkazy na vzory: ["app('ApplicationX').[' *']"]

Práce s aplikacemi střední vrstvy

Aplikace střední vrstvy poskytuje uživatelům možnost používat KQL a chce vylepšit prostředí rozšířením výsledků dotazu o rozšířená data z interní služby.

Za tímto účelem aplikace poskytuje uživatelům příkaz pattern, který vrací tabulková data, která mohou uživatelé použít ve svých dotazech. Argumenty vzoru jsou klíče, které aplikace použije k načtení dat rozšiřování. Když uživatel spustí dotaz, aplikace neanalyzuje samotný dotaz, ale místo toho plánuje využít chybu vrácenou prázdným vzorem k načtení klíčů, které vyžaduje. Takže dotaz předepište prázdnou deklaraci vzoru, odešle ho do clusteru ke zpracování a pak parsuje vrácenou hlavičku HTTP, aby načetla hodnoty chybějících argumentů vzoru. Aplikace používá tyto hodnoty k vyhledání dat rozšiřování a vytvoří novou deklaraci, která definuje příslušné mapování dat rozšiřování. Aplikace nakonec předefinuje novou definici dotazu uživatele, znovu ji odešle ke zpracování a vrátí uživateli výsledek, který obdrží.

Příklad

V následujícím příkladu aplikace střední vrstvy poskytuje možnost rozšířit dotazy o umístění zeměpisné délky a zeměpisné šířky. Aplikace používá interní službu k mapování IP adres na umístění zeměpisné délky a zeměpisné šířky a poskytuje vzor volaný map_ip_to_longlat pro tento účel. Předpokládejme, že aplikace získá od uživatele následující dotaz:

map_ip_to_longlat("10.10.10.10")

Aplikace neanalyzuje tento dotaz, a proto neví, která IP adresa (10.10.10.10) byla předána vzoru. Takže se dotaz uživatele předepište prázdnou map_ip_to_longlat deklarací vzoru a odešle ho ke zpracování:

declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")

Aplikace obdrží v odpovědi následující chybu.

Nejméně jeden vzor odkazů nebyl deklarován. Zjištěné odkazy na vzor: ["map_ip_to_longlat('10.10.10.10')"]

Aplikace zkontroluje chybu, zjistí, že chyba značí chybějící odkaz na vzor, a načte chybějící IP adresu (10.10.10.10. 10). Používá IP adresu k vyhledání dat o rozšiřování ve své interní službě a vytvoří nový vzor definující mapování IP adresy na odpovídající data zeměpisné délky a zeměpisné šířky. Nový vzor se předehodí na dotaz uživatele a spustí se znovu. Tentokrát je dotaz úspěšný, protože data o rozšiřování jsou teď v dotazu deklarována a výsledek se odešle uživateli.

declare pattern map_ip_to_longlat = (address:string)
{
  ("10.10.10.10") = { print Lat=37.405992, Long=-122.078515 }
};
map_ip_to_longlat("10.10.10.10")

Výstup

Lat Long
37.405992 -122.078515

Tato funkce není ve službě Azure Monitor podporovaná.