Udostępnij przez


Pattern statement

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A pattern is a construct that maps string tuples to tabular expressions.

Each pattern must declare a pattern name and optionally define a pattern mapping. Wzorce definiujące mapowanie zwracają wyrażenie tabelaryczne podczas wywoływania. Rozdziel wszystkie dwie instrukcje średnikami.

Puste wzorce to wzorce zadeklarowane, ale nie definiują mapowania. When invoked, they return error SEM0036 along with the details of the missing pattern definitions in the HTTP header.

Aplikacje warstwy środkowej, które zapewniają środowisko języka KQL (Kusto Query Language), mogą używać zwróconych szczegółów w ramach procesu w celu wzbogacania wyników zapytań języka KQL. Aby uzyskać więcej informacji, zobacz Praca z aplikacjami warstwy środkowej.

Syntax

  • Zadeklaruj pusty wzorzec:

    declare pattern PatternName;

  • Deklarowanie i definiowanie wzorca:

    declare pattern PatternName = (ArgName:ArgType [, ... ]) [[PathName:PathArgType]]

    {

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

        [ (ArgValue1_2 [,ArgValue2_2, ... ] ) [ .[PathValue_2] ] ={expression2}; ... ]

    } ;

  • Wywołaj wzorzec:

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

Learn more about syntax conventions.

Parameters

Name Typ Required Description
PatternName string ✔️ Nazwa wzorca.
ArgName string ✔️ Nazwa argumentu. Wzorce mogą mieć co najmniej jeden argument.
ArgType string ✔️ The scalar data type of the ArgName argument. Możliwe wartości: string
PathName string Nazwa argumentu ścieżki. Wzorce nie mogą mieć ścieżki ani jednej ścieżki.
PathArgType string The type of the PathArgType argument. Możliwe wartości: string
ArgValue string ✔️ The ArgName and optional PathName tuple values to be mapped to an expression.
PathValue string The value to map for PathName.
expression string ✔️ Wyrażenie tabelaryczne lub lambda odwołujące się do funkcji zwracającej dane tabelaryczne. Na przykład: Logs | where Timestamp > ago(1h)

Examples

W przykładach w tej sekcji pokazano, jak używać składni, aby ułatwić rozpoczęcie pracy.

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. Może być konieczne zmodyfikowanie nazwy tabeli w przykładowym zapytaniu, aby było zgodne z tabelą w obszarze roboczym.

Definiowanie prostego wzorca

W tym przykładzie zdefiniowano wzorzec mapujący stany na wyrażenie zwracające jego stolicę/główne miasto.

Uruchom zapytania

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

Output

Capital
Edmonton

Definiowanie wzorca o określonym zakresie

W tym przykładzie zdefiniowano wzorzec określający zakres danych i metryk danych aplikacji. Wzorzec jest wywoływany w celu zwrócenia unii danych.

Uruchom zapytania

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

Output

App Data Metrics
App #2 9
App #2 8
App #2 7
App #2 6
App #2 5
App #1 0.53674122855537532
App #1 0.78304713305654439
App #1 0.20168860732346555
App #1 0.13249123867679469
App #1 0.19388305330563443

Normalization

Istnieją odmiany składni dotyczące wywoływania wzorców. Na przykład następująca unia zwraca pojedyncze wyrażenie wzorca, ponieważ wszystkie wywołania są tego samego wzorca.

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

No wildcards

Nie ma specjalnego traktowania dla symboli wieloznacznych w wzorcu. Na przykład następujące zapytanie zwraca jedno brakujące wywołanie wzorca.

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

błąd semantyczny danych wyjściowych

Nie zadeklarowano co najmniej jednego odwołania do wzorca. Wykryte odwołania do wzorca: ["app('ApplicationX').[" *']"]

Praca z aplikacjami warstwy środkowej

Aplikacja warstwy środkowej zapewnia swoim użytkownikom możliwość korzystania z języka KQL i chce ulepszyć środowisko, wzbogacając wyniki zapytania o rozszerzone dane z wewnętrznej usługi.

W tym celu aplikacja udostępnia użytkownikom instrukcję wzorca zwracającą dane tabelaryczne, których użytkownicy mogą używać w zapytaniach. Argumenty wzorca to klucze, których aplikacja będzie używać do pobierania danych wzbogacania.

Gdy użytkownik uruchamia zapytanie, aplikacja nie analizuje samego zapytania, ale używa błędu zwróconego przez pusty wzorzec, aby pobrać wymagane klucze. Dlatego poprzedza zapytanie z pustą deklaracją wzorca, wysyła je do klastra do przetwarzania, a następnie analizuje zwrócony nagłówek HTTP, aby pobrać wartości brakujących argumentów wzorca. Aplikacja używa tych wartości do wyszukiwania danych wzbogacania i tworzy nową deklarację, która definiuje odpowiednie mapowanie danych wzbogacania.

Na koniec aplikacja poprzedza nową definicję zapytania, ponownie wysyła ją do przetwarzania i zwraca wynik otrzymany do użytkownika.

Example

W przykładach wzorzec jest zadeklarowany, zdefiniowany, a następnie wywoływany.

Deklarowanie pustego wzorca

W tym przykładzie aplikacja warstwy środkowej wzbogaca zapytania o lokalizacje długości/szerokości geograficznej. Aplikacja używa usługi wewnętrznej do mapowania adresów IP na lokalizacje długości/szerokości geograficznej i udostępnia wzorzec o nazwie map_ip_to_longlat. Po uruchomieniu zapytania zwraca błąd z brakującymi definicjami wzorca:

map_ip_to_longlat("10.10.10.10")

Deklarowanie i definiowanie wzorca

The application does not parse this query and hence does not know which IP address (10.10.10.10) was passed to the pattern. Dlatego poprzedza zapytanie użytkownika pustą deklaracją wzorca map_ip_to_longlat i wysyła je do przetwarzania:

declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")

Aplikacja otrzymuje następujący błąd w odpowiedzi.

Nie zadeklarowano co najmniej jednego odwołania do wzorca. Wykryte odwołania do wzorca: ["map_ip_to_longlat('10.10.10.10')"]

Wywoływanie wzorca

The application inspects the error, determines that the error indicates a missing pattern reference, and retrieves the missing IP address (10.10.10.10). Używa ona adresu IP do wyszukiwania danych wzbogacania w usłudze wewnętrznej i tworzy nowy wzorzec definiujący mapowanie adresu IP na odpowiednie dane długości geograficznej i szerokości geograficznej. Nowy wzorzec jest poprzedzany zapytaniem użytkownika i uruchamiany ponownie.

Tym razem zapytanie powiedzie się, ponieważ dane wzbogacania są teraz zadeklarowane w zapytaniu, a wynik jest wysyłany do użytkownika.

Uruchom zapytania

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

Output

Lat Long
37.405992 -122.078515