Share via


Pattern utasítás

A minta olyan szerkezet, amely a sztringeket táblázatos kifejezésekhez rendeli. Minden mintának deklarálnia kell egy mintanevet, és opcionálisan meg kell adnia egy mintaleképezést. A leképezést definiáló minták a meghíváskor egy táblázatos kifejezést ad vissza. A két utasítást pontosvesszővel kell elválasztani.

Az üres minták olyan minták, amelyek deklaráltak, de nem határoznak meg leképezést. A meghíváskor hibát adnak vissza SEM0036 , valamint a hiányzó mintadefiníciók részleteit a HTTP-fejlécben. A Kusto lekérdezésnyelv (KQL) élményt nyújtó középrétegbeli alkalmazások a KQL-lekérdezés eredményeinek bővítéséhez használhatják a visszaadott adatokat a folyamat részeként. További információ: A középső rétegbeli alkalmazások használata.

Syntax

  • Üres minta deklarálása:

    declarepatternPatternName;

  • Minta deklarálása és definiálása:

    declarepatternPatternName = (ArgName:ArgType [, ... ]) [[PathName:PathArgType]]

    {

          (ArgValue1_1 [,ArgValue2_1, ... ] ) [ .[PathValue_1] ] ={kifejezés1};

        [ (ArgValue1_2 [,ArgValue2_2, ... ] ) [ .[PathValue_2] ] ={kifejezés2}; ... ]

    } ;

  • Minta meghívása:

    • PatternName(ArgValue1 [,ArgValue2 ...] ).PathValue
    • PatternName(ArgValue1 [,ArgValue2 ...] ).["PathValue"]

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
PatternName string ✔️ A minta neve.
ArgName string ✔️ Az argumentum neve. A minták egy vagy több argumentumot tartalmazhatnak.
ArgType string ✔️ Az ArgName argumentum skaláris adattípusa. Lehetséges értékek: string
Elérési_út string Az elérési út argumentum neve. A mintákhoz nem tartozhat elérési út vagy egy elérési út.
PathArgType string A PathArgType argumentum típusa. Lehetséges értékek: string
ArgValue string ✔️ A kifejezésre leképezendő ArgName és opcionális PathName rekordértékek.
PathValue string A PathName függvényhez leképzendő érték.
expression string ✔️ Táblázatos vagy lambda kifejezés, amely táblázatos adatokat visszaadó függvényre hivatkozik. Például: Logs | where Timestamp > ago(1h)

Példák

Az alábbi példák mindegyikében a rendszer deklarál, definiál, majd meghív egy mintát.

Egyszerű minták definiálása

Az alábbi példa egy olyan mintát határoz meg, amely a fővárosát/fő városát visszaadó kifejezéshez rendeli az állapotokat.

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

Kimenet

Tőke
Edmonton

Az alábbi példa egy olyan mintát határoz meg, amely meghatároz néhány hatókörrel rendelkező alkalmazásadatokat.

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

Kimenet

Alkalmazás Adatok Mérőszámok
Alkalmazás #2 9
Alkalmazás #2 8
Alkalmazás #2 7
Alkalmazás #2 6
Alkalmazás #2 5
Alkalmazás #1 0.53674122855537532
Alkalmazás #1 0.78304713305654439
Alkalmazás #1 0.20168860732346555
Alkalmazás #1 0.13249123867679469
Alkalmazás #1 0.19388305330563443

Normalizálás

A minták meghívásához szintaxisváltozatok tartoznak. Az alábbi unió például egyetlen mintakifejezést ad vissza, mivel az összes meghívás azonos mintával rendelkezik.

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"]

Nincsenek helyettesítő karakterek

A helyettesítő karaktereknek nincs különleges kezelése a mintában. A következő lekérdezés például egyetlen hiányzó mintahívást ad vissza.

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

Szemantikai hibát ad vissza

Egy vagy több mintahivatkozás nincs deklarálva. Észlelt mintahivatkozások: ["app('ApplicationX').[ *']"]

A középső szintű alkalmazásokkal végzett munka

A középső szintű alkalmazások lehetővé teszik a felhasználók számára a KQL használatát, és a lekérdezési eredményeket a belső szolgáltatásból származó bővített adatokkal bővítik.

Ennek érdekében az alkalmazás egy mintautasítást biztosít a felhasználóknak, amely táblázatos adatokat ad vissza, amelyeket a felhasználók használhatnak a lekérdezéseikben. A minta argumentumai azok a kulcsok, amelyeket az alkalmazás használni fog a bővítési adatok lekéréséhez. Amikor a felhasználó futtatja a lekérdezést, az alkalmazás nem elemzi magát a lekérdezést, hanem azt tervezi, hogy egy üres minta által visszaadott hibát használja a szükséges kulcsok lekéréséhez. Ezért a lekérdezést az üres mintadeklarációval előreküldi, elküldi a fürtnek feldolgozásra, majd elemzi a visszaadott HTTP-fejlécet a hiányzó mintaargumentumok értékeinek lekéréséhez. Az alkalmazás ezeket az értékeket használja a bővítési adatok kereséséhez, és létrehoz egy új deklarációt, amely meghatározza a megfelelő bővítési adatok leképezését. Végül az alkalmazás az új definíciót a felhasználó lekérdezésére írja elő, újraküldi feldolgozásra, és visszaadja a felhasználónak kapott eredményt.

Példa

A következő példában egy középső szintű alkalmazás lehetővé teszi a lekérdezések hosszúsági/szélességi helyekkel való bővítését. Az alkalmazás egy belső szolgáltatással leképezi az IP-címeket a hosszúsági/szélességi helyekre, és egy erre a célra szolgáló map_ip_to_longlat mintát biztosít. Tegyük fel, hogy az alkalmazás a következő lekérdezést kapja meg a felhasználótól:

map_ip_to_longlat("10.10.10.10")

Az alkalmazás nem elemzi ezt a lekérdezést, ezért nem tudja, hogy melyik IP-címet (10.10.10.10) adták át a mintának. Ezért a felhasználói lekérdezést egy üres map_ip_to_longlat mintadeklarációval előreküldi, és elküldi feldolgozásra:

declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")

Az alkalmazás a következő hibaüzenetet kapja válaszként.

Egy vagy több mintahivatkozás nincs deklarálva. Észlelt mintahivatkozások: ["map_ip_to_longlat('10.10.10.10')"]

Az alkalmazás megvizsgálja a hibát, megállapítja, hogy a hiba hiányzó mintahivatkozást jelez, és lekéri a hiányzó IP-címet (10.10.10.10). Az IP-cím használatával megkeresi a bővítési adatokat a belső szolgáltatásban, és létrehoz egy új mintát, amely meghatározza az IP-cím megfeleltetését a megfelelő hosszúsági és szélességi adatokhoz. Az új minta elő van állítva a felhasználó lekérdezéséhez, és újra fut. Ezúttal a lekérdezés sikeres lesz, mert a bővítési adatok deklarálva lesznek a lekérdezésben, és az eredményt a rendszer elküldi a felhasználónak.

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")

Kimenet

Lat Long
37.405992 -122.078515

Ez a képesség nem támogatott az Azure Monitorban.