pattern ステートメント
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
パターン は、文字列のタプルを表形式の式にマップするコンストラクトです。 各パターンでは、 パターン名を 宣言し、必要に応じてパターン マッピングを 定義する 必要があります。 マッピングを定義するパターンは、呼び出されると表形式の式を返します。 2 つのステートメントは、セミコロンで区切る必要があります。
空のパターン は、宣言されているが、マッピングを定義していないパターンです。 呼び出されると、 エラー SEM0036 と、HTTP ヘッダーに不足しているパターン定義の詳細が返されます。 Kusto クエリ言語 (KQL) エクスペリエンスを提供する中間層アプリケーションでは、返された詳細をプロセスの一部として使用し、KQL クエリの結果を高めることができます。 詳細については、中間層アプリケーションの操作 を参照してください。
構文
空のパターンを宣言します。
declare
pattern
PatternName;
パターンを宣言して定義します。
declare
pattern
PatternName =(
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
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
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 |