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:
declare
pattern
Název vzoru;
Deklarujte a definujte vzor:
declare
pattern
=(
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á.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro