KQL 쿼리 유형

완료됨

이전 단원에서 KQL 쿼리의 구조에 대해 알아보았습니다. 이제 KQL 쿼리의 다양한 부분과 형식에 대해 자세히 살펴보겠습니다.

이 단원에서는 쿼리 문과 함수에 대한 개요를 제공합니다. KQL에서는 하나 이상의 쿼리 문으로 구성됩니다. 이런 문은 나중에 사용할 수 있도록 명시적으로 저장되지 않는 한 사용되는 특정 쿼리에만 영향을 줍니다. 쿼리 문의 가장 일반적인 형식은 테이블 형식 식 문Let 문입니다. 광범위한 기본 제공 함수 라이브러리 외에도 KQL은 단일 쿼리에 사용하기 위해 저장하거나 정의할 수 있는 사용자 정의 함수를 허용합니다.

테이블 형식 식 명령문

대부분의 쿼리는 하나 이상의 테이블 형식 식 문입니다. 즉 입력과 출력 모두 테이블 또는 테이블 형식 데이터 세트로 구성되어 있습니다. 이런 테이블 형식 식 문은 테이블 형식 입력으로 시작하고 테이블 형식 출력을 반환하는 연산자를 포함합니다.

간단한 연산자(예: count, sort, where)부터 보다 복잡한 연산자(예: parse, join, render)에 이르기까지 KQL에서 제공하는 다양한 연산자가 있습니다.

예를 들어 다음 쿼리에는 테이블 형식 식 문이 4개 포함되어 있습니다.

StormEvents // tabular expression statement 1
| where EventType == "Flood" // tabular expression statement 2
| sort by DamageProperty asc // tabular expression statement 3
| take 10 // tabular expression statement 4

let 문

let 문은 이름과 식 간의 바인딩을 정의합니다. let 문을 사용하면 긴 쿼리를 이해하기 쉬운 작은 명명된 부분으로 분할할 수 있습니다.

예를 들어, 다음 쿼리에서 let 문을 사용하여 스칼라 값을 정의했습니다.

let n = 10;  // number
let place = "VIRGINIA";  // string
let cutoff = ago(12345d); // datetime 
StormEvents 
| where StartTime > cutoff and State == place 
| take n

기본 제공 함수

기본 제공 함수는 수정할 수 없는 KQL에서 정의한 하드 코딩된 함수입니다. KQL에는 사용 가능한 풍부한 함수 라이브러리가 있으며, 이는 공식 KQL 설명서에서 찾을 수 있습니다. 함수는 간단한 정렬과 일치부터 복잡한 통계 및 지리 공간적 함수에 이르기까지 다양합니다.

예를 들어 다음 strcat() 함수는 문자열 인수를 연결합니다.

print str = strcat("hello", " ", "world")

사용자 정의 함수

사용자 정의 함수는 이름에서 알 수 있듯이 사용자가 정의합니다. 사용자 정의 함수는 두 가지 형식으로 나눌 수 있습니다.

  • 저장 함수: 테이블과 유사하게 저장되고 관리되는 데이터베이스 스키마 엔터티인 사용자 정의 함수입니다. 다양한 제품은 다양한 방법으로 함수를 저장합니다.

    예를 들어 Azure Data Explorer의 다음 쿼리는 매개 변수를 사용하는 함수를 저장합니다.

    .create function
    with (docstring = 'Demo function with parameter', folder='Demo')
     MyFunction2(myLimit: long)  {StormEvents | take myLimit}
    

    Azure Monitor 및 Microsoft Sentinel과 같은 다른 환경에서는 UI를 통해 쿼리를 저장할 수 있습니다.

  • 쿼리 정의 함수: 단일 쿼리의 범위 내에서 정의되고 사용되는 사용자 정의 함수입니다. 이러한 함수의 정의는 let 문을 통해 수행됩니다.

    예를 들어 다음 쿼리는 f 함수를 정의한 다음 사용합니다.

    let f=(a: string, b: string) {
        strcat(a, " (la la la) ", b)
    };
    print f("hello", "world")