다음을 통해 공유


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. 매핑을 정의하는 패턴은 호출될 때 테이블 형식 식을 반환합니다. 두 문을 세미콜론으로 구분합니다.

빈 패턴은 선언되지만 매핑을 정의하지 않는 패턴입니다. When invoked, they return error SEM0036 along with the details of the missing pattern definitions in the HTTP header.

KQL(Kusto Query Language) 환경을 제공하는 중간 계층 애플리케이션은 반환된 세부 정보를 프로세스의 일부로 사용하여 KQL 쿼리 결과를 보강할 수 있습니다. 자세한 내용은 중간 계층 애플리케이션작업을 참조하세요.

Syntax

  • 빈 패턴을 선언합니다.

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

Learn more about syntax conventions.

Parameters

Name Type Required Description
PatternName string ✔️ 패턴의 이름입니다.
ArgName string ✔️ 인수의 이름입니다. 패턴에는 하나 이상의 인수가 있을 수 있습니다.
ArgType string ✔️ The scalar data type of the ArgName argument. 가능한 값: string
PathName string 경로 인수의 이름입니다. 패턴에는 경로 또는 경로가 하나도 있을 수 없습니다.
PathArgType string The type of the PathArgType argument. 가능한 값: 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 ✔️ 테이블 형식 데이터를 반환하는 함수를 참조하는 테이블 형식 또는 람다 식입니다. 예: Logs | where Timestamp > ago(1h)

Examples

이 섹션의 예제에서는 구문을 사용하여 시작하는 방법을 보여 줍니다.

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. 작업 영역의 테이블과 일치하도록 예제 쿼리에서 테이블 이름을 수정해야 할 수 있습니다.

간단한 패턴 정의

이 예제에서는 수도/주요 도시를 반환하는 식에 상태를 매핑하는 패턴을 정의합니다.

쿼리 실행

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

범위가 지정된 패턴 정의

이 예제에서는 애플리케이션 데이터의 데이터 및 메트릭 범위를 지정하는 패턴을 정의합니다. 패턴은 데이터 통합을 반환하기 위해 호출됩니다.

쿼리 실행

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

패턴을 호출하기 위한 구문 변형이 있습니다. 예를 들어 다음 공용 구조체는 모든 호출이 동일한 패턴이므로 단일 패턴 식을 반환합니다.

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

패턴에서 와일드 카드에 주어진 특별한 치료는 없습니다. 예를 들어 다음 쿼리는 누락된 단일 패턴 호출을 반환합니다.

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

출력 의미 체계 오류

하나 이상의 패턴 참조가 선언되지 않았습니다. 감지된 패턴 참조: ["app('ApplicationX').[' *']"]

중간 계층 애플리케이션 작업

중간 계층 애플리케이션은 사용자에게 KQL을 사용할 수 있는 기능을 제공하고 내부 서비스의 보강된 데이터로 쿼리 결과를 보강하여 환경을 향상시키고자 합니다.

이를 위해 애플리케이션은 사용자가 쿼리에서 사용할 수 있는 테이블 형식 데이터를 반환하는 패턴 문을 사용자에게 제공합니다. 패턴의 인수는 애플리케이션이 보강 데이터를 검색하는 데 사용하는 키입니다.

사용자가 쿼리를 실행할 때 애플리케이션은 쿼리 자체를 구문 분석하지 않고 빈 패턴으로 반환된 오류를 사용하여 필요한 키를 검색합니다. 따라서 쿼리 앞에 빈 패턴 선언이 추가되고 처리를 위해 클러스터로 보낸 다음 반환된 HTTP 헤더를 구문 분석하여 누락된 패턴 인수의 값을 검색합니다. 애플리케이션은 이러한 값을 사용하여 보강 데이터를 조회하고 적절한 보강 데이터 매핑을 정의하는 새 선언을 작성합니다.

마지막으로, 애플리케이션은 쿼리에 새 정의를 앞에 추가하고 처리를 위해 다시 보내며 사용자에게 받은 결과를 반환합니다.

Example

예제에서 패턴은 선언, 정의 및 호출됩니다.

빈 패턴 선언

이 예제에서 중간 계층 애플리케이션은 경도/위도 위치로 쿼리를 보강합니다. 애플리케이션은 내부 서비스를 사용하여 IP 주소를 경도/위도 위치에 매핑하고 map_ip_to_longlat이라는 패턴을 제공합니다. 쿼리가 실행되면 패턴 정의가 누락된 오류를 반환합니다.

map_ip_to_longlat("10.10.10.10")

패턴 선언 및 정의

The application does not parse this query and hence does not know which IP address (10.10.10.10) was passed to the pattern. 따라서 사용자 쿼리 앞에 빈 map_ip_to_longlat 패턴 선언이 추가되고 처리를 위해 보냅니다.

declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")

애플리케이션은 응답에서 다음 오류를 수신합니다.

하나 이상의 패턴 참조가 선언되지 않았습니다. 감지된 패턴 참조: ["map_ip_to_longlat('10.10.10.10')"]

패턴 호출

The application inspects the error, determines that the error indicates a missing pattern reference, and retrieves the missing IP address (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")

Output

Lat Long
37.405992 -122.078515