pattern ステートメント

パターン は、文字列のタプルを表形式の式にマップするコンストラクトです。 各パターンでは、 パターン名を 宣言し、必要に応じてパターン マッピングを 定義する 必要があります。 マッピングを定義するパターンは、呼び出されると表形式の式を返します。 2 つのステートメントは、セミコロンで区切る必要があります。

空のパターン は、宣言されているが、マッピングを定義していないパターンです。 呼び出されると、 エラー SEM0036 と、HTTP ヘッダーに不足しているパターン定義の詳細が返されます。 Kusto クエリ言語 (KQL) エクスペリエンスを提供する中間層アプリケーションでは、返された詳細をプロセスの一部として使用し、KQL クエリの結果を高めることができます。 詳細については、中間層アプリケーションの操作 を参照してください。

構文

  • 空のパターンを宣言します。

    declarepatternPatternName;

  • パターンを宣言して定義します。

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

    {

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

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

    } ;

  • パターンを呼び出します。

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

構文規則について詳しく知る。

パラメーター

名前 必須 説明
PatternName string ✔️ パターンの名前。
ArgName string ✔️ 引数の名前。 パターンでは、1 つ以上の引数が指定できます。
ArgType string ✔️ Argname 引数のスカラー データ型。 使用可能な値: string
PathName string パス引数の名前。 パターンでは、パスなし、または 1 つのパスが指定できます。
PathArgType string PathArgType 引数の型。 使用可能な値: string
ArgValue string ✔️ にマップされる ArgName と省略可能な PathName タプル 値。
PathValue string PathName にマップする値。
式 (expression) string ✔️ 表形式データを返す関数を参照する表形式またはラムダ式。 例: Logs | where Timestamp > ago(1h)

次の各例では、パターンが宣言、定義、および呼び出されます。

単純なパターンを定義する

次の例では、州を首都/主要都市を返す式にマップするパターンを定義します。

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

出力

資本
エドモントン

次の例では、スコープ付きアプリケーション データを定義するパターンを定義します。

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

出力

アプリ データ メトリック
アプリ #2 9
アプリ #2 8
アプリ #2 7
アプリ #2 6
アプリ #2 5
アプリ #1 0.53674122855537532
アプリ #1 0.78304713305654439
アプリ #1 0.20168860732346555
アプリ #1 0.13249123867679469
アプリ #1 0.19388305330563443

正規化

パターンを呼び出すための構文のバリエーションがあります。 たとえば、次の共用体は、すべての呼び出しが同じパターンであるため、 1 つのパターン式を返します。

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

ワイルドカードなし

パターン内のワイルドカードには特別な扱いはありません。 たとえば、次のクエリでは、不足しているパターン呼び出しが 1 つ返されます。

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

セマンティック エラーを返します

パターン参照が 1 つ以上宣言されませんでした。 検出されたパターン参照: ["app('ApplicationX').['*']"]

中間層アプリケーションの操作

中間層アプリケーションでは、ユーザーに KQL を使用するための機能を提供し、内部サービスからの強化されたデータを使用してクエリの結果を高めることにより、エクスペリエンスが向上します。

このため、本アプリケーションを使用して、ユーザーがクエリで使用できる表形式のデータを返す pattern ステートメントがユーザーに提供されます。 パターンの引数は、アプリケーションが強化データを取得するために使用されるキーです。 ユーザーがクエリを実行すると、アプリケーションはクエリ自体を解析するのではなく、空のパターンから返されたエラーを活用して必要とするキーを取得することになります。 そのため、空のパターン宣言でクエリの前にクエリを追加し、処理のためにクラスターに送信し、返された HTTP ヘッダーを解析して、不足しているパターン引数の値を取得します。 アプリケーションでは、これらの値を使用してエンリッチメント データを検索し、適切なエンリッチメント データ マッピングを定義する新しい宣言を作成します。 最後に、アプリケーションを使用して、ユーザーのクエリに新しい定義を追加し、処理を実行するために再送信して、それによってユーザーが受け取る結果が返されます。

次の例では、中間層アプリケーションを使用して、経度/緯度の場所でクエリを強化する機能を提供しています。 アプリケーションでは、内部サービスを使用して、IP アドレスを経度/緯度の場所にマップし、この目的で map_ip_to_longlat と呼ばれるパターンを提供します。 アプリケーションがユーザーから次のクエリを取得していると仮定しましょう。

map_ip_to_longlat("10.10.10.10")

アプリケーションではこのクエリが解析されないため、パターンに渡された IP アドレス (10.10.10.10) が識別されません。 そのため、それは、空の map_ip_to_longlat パターン宣言をユーザー クエリの先頭に追加して、処理を実行するために送信します。

declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")

アプリケーションでは、これに応えて次のエラーを受信します。

パターン参照が 1 つ以上宣言されませんでした。 検出されたパターン参照: ["map_ip_to_longlat('10.10.10.10')"]

アプリケーションではエラーを検査して、そのエラーが不足しているパターン参照を示すことを確認し、不足している IP アドレス (10.10.10.10) を取得します。 この例では、IP アドレスを使用して内部サービスの強化データを検索し、対応する経度と緯度データの IP アドレスのマッピングを定義する新しいパターンを作成しています。 新しいパターンをユーザーのクエリの先頭に追加して、再度実行します。 今回は、強化データをクエリで宣言し、結果をユーザーに送信するため、クエリが成功します。

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

出力

Lat Long
37.405992 -122.078515

この機能については、Azure Monitor ではサポートされていません。