Pattern 문

패턴은 문자열 튜플을 테이블 형식 식에 매핑하는 구문입니다. 각 패턴은 패턴 이름을 선언 하고 필요에 따라 패턴 매핑을 정의 해야 합니다. 매핑을 정의하는 패턴은 호출될 때 테이블 형식 식을 반환합니다. 두 문은 세미콜론으로 구분해야 합니다.

빈 패턴은 선언되지만 매핑을 정의하지 않는 패턴입니다. 호출되면 HTTP 헤더에서 누락된 패턴 정의의 세부 정보와 함께 오류 SEM0036 반환합니다. KQL(Kusto 쿼리 언어) 환경을 제공하는 중간 계층 애플리케이션은 반환된 세부 정보를 프로세스의 일부로 사용하여 KQL 쿼리 결과를 보강할 수 있습니다. 자세한 내용은 중간 계층 애플리케이션 작업을 참조하세요.

Syntax

  • 빈 패턴을 선언합니다.

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

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
PatternName string ✔️ 패턴의 이름입니다.
ArgName string ✔️ 인수의 이름입니다. 패턴에는 하나 이상의 인수가 있을 수 있습니다.
ArgType string ✔️ ArgName 인수의 스칼라 데이터 형식입니다. 가능한 값: string
PathName string path 인수의 이름입니다. 패턴에는 경로 또는 경로가 하나도 있을 수 없습니다.
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

출력

데이터 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

표준화

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

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

와일드카드 없음

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

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 헤더를 구문 분석하여 누락된 패턴 인수의 값을 검색합니다. 애플리케이션은 이러한 값을 사용하여 보강 데이터를 조회하고 적절한 보강 데이터 매핑을 정의하는 새 선언을 빌드합니다. 마지막으로, 애플리케이션은 사용자의 쿼리에 새 정의를 더하고, 처리를 위해 다시 보내며, 수신한 결과를 사용자에게 반환합니다.

예제

다음 예제에서 중간 계층 애플리케이션은 경도/위도 위치로 쿼리를 보강하는 기능을 제공합니다. 애플리케이션은 내부 서비스를 사용하여 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")

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

하나 이상의 패턴 참조가 선언되지 않았습니다. 감지된 패턴 참조: ["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에서 지원되지 않습니다.