다음을 통해 공유


문자열 연산자

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

KQL(Kusto 쿼리 언어)은 문자열 데이터 형식을 검색하기 위한 다양한 쿼리 연산자를 제공합니다. 다음 문서에서는 문자열 용어를 인덱싱하고, 문자열 쿼리 연산자를 나열하고, 성능을 최적화하기 위한 팁을 제공합니다.

문자열 용어 이해

Kusto는 형식 string의 열을 포함하여 모든 열을 인덱싱합니다. 실제 데이터에 따라 이러한 열에 대해 여러 인덱스가 빌드됩니다. 이러한 인덱스는 직접 공개되지 않지만, has, !has, hasprefix, !hasprefix와 같이 이름의 일부로 has가 포함된 string 연산자를 통해 쿼리에 사용됩니다. 이러한 연산자의 의미 체계는 열이 인코딩되는 방식에 따라 결정됩니다. 이러한 연산자는 "일반" 부분 문자열 일치를 수행하는 대신 용어를 일치 합니다.

용어란?

기본적으로 각 string 값은 영숫자 문자의 최대 시퀀스로 나뉘며 각 시퀀스는 용어로 만들어집니다.

예를 들어 다음string에서 용어는 Kusto, KustoExplorerQueryRun및 다음 부분 문자열입니다. ad67d136, , c1db4f9f, 88efd94f3b6b0b5a.

Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun

Kusto는 3자 이상의 모든 용어로 구성된 용어 인덱스를 작성하며, 이 인덱스는 문자열 연산자(예: has!has)에서 사용됩니다. 쿼리가 3자보다 작은 용어를 찾거나 연산자를 contains 사용하는 경우 쿼리는 열의 값 검색으로 되돌아갑니다. 검색은 용어 인덱스에서 용어를 조회하는 것보다 훨씬 느립니다.

문자열의 연산자

이 문서에서는 다음과 같은 약어를 사용합니다.

  • RHS = 식의 오른쪽
  • LHS = 식의 왼쪽

접미사가 있는 _cs 연산자는 대/소문자를 구분합니다.

Operator 설명 대/소문자 구분 예제(수율 true)
== 같음 "aBc" == "aBc"
!= 같지 않음 "abc" != "ABC"
=~ 같음 아니요 "abc" =~ "ABC"
!~ 같지 않음 아니요 "aBc" !~ "xyz"
contains RHS가 LHS의 하위 시퀀스로 발생 아니요 "FabriKam" contains "BRik"
!contains RHS는 LHS에서 발생하지 않습니다. 아니요 "Fabrikam" !contains "xyz"
contains_cs RHS가 LHS의 하위 시퀀스로 발생 "FabriKam" contains_cs "Kam"
!contains_cs RHS는 LHS에서 발생하지 않습니다. "Fabrikam" !contains_cs "Kam"
endswith RHS는 LHS의 닫는 하위 시퀀스입니다. 아니요 "Fabrikam" endswith "Kam"
!endswith RHS는 LHS의 닫는 하위 시퀀스가 아닙니다. 아니요 "Fabrikam" !endswith "brik"
endswith_cs RHS는 LHS의 닫는 하위 시퀀스입니다. "Fabrikam" endswith_cs "kam"
!endswith_cs RHS는 LHS의 닫는 하위 시퀀스가 아닙니다. "Fabrikam" !endswith_cs "brik"
has RHS(오른쪽)는 LHS(왼쪽)의 전체 용어입니다. 아니요 "North America" has "america"
!has RHS는 LHS의 전체 용어가 아닙니다. 아니요 "North America" !has "amer"
has_all 모든 요소와 동일 has 하지만 작동합니다. 아니요 "North and South America" has_all("south", "north")
has_any 요소와 동일 has 하지만 모든 요소에서 작동합니다. 아니요 "North America" has_any("south", "north")
has_cs RHS는 LHS의 전체 용어입니다. "North America" has_cs "America"
!has_cs RHS는 LHS의 전체 용어가 아닙니다. "North America" !has_cs "amer"
hasprefix RHS는 LHS의 용어 접두사입니다. 아니요 "North America" hasprefix "ame"
!hasprefix RHS가 LHS에서 용어 접두사가 아님 아니요 "North America" !hasprefix "mer"
hasprefix_cs RHS는 LHS의 용어 접두사입니다. "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS가 LHS에서 용어 접두사가 아님 "North America" !hasprefix_cs "CA"
hassuffix RHS가 LHS에서 용어 접미사임 아니요 "North America" hassuffix "ica"
!hassuffix RHS는 LHS의 용어 접미사가 아닙니다. 아니요 "North America" !hassuffix "americ"
hassuffix_cs RHS가 LHS에서 용어 접미사임 "North America" hassuffix_cs "ica"
!hassuffix_cs RHS는 LHS의 용어 접미사가 아닙니다. "North America" !hassuffix_cs "icA"
in 모든 요소와 같음 "abc" in ("123", "345", "abc")
!in 어떤 요소와도 같지 않음 "bca" !in ("123", "345", "abc")
in~ 모든 요소와 같음 아니요 "Abc" in~ ("123", "345", "abc")
!in~ 어떤 요소와도 같지 않음 아니요 "bCa" !in~ ("123", "345", "ABC")
matches regex LHS에는 RHS에 대한 일치 항목이 포함되어 있습니다. "Fabrikam" matches regex "b.*k"
startswith RHS는 LHS의 초기 하위 시퀀스입니다. 아니요 "Fabrikam" startswith "fab"
!startswith RHS는 LHS의 초기 하위 시퀀스가 아닙니다. 아니요 "Fabrikam" !startswith "kam"
startswith_cs RHS는 LHS의 초기 하위 시퀀스입니다. "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS는 LHS의 초기 하위 시퀀스가 아닙니다. "Fabrikam" !startswith_cs "fab"

성능 팁

성능을 향상시키려면 동일한 작업을 수행하는 두 개의 연산자가 있는 경우 대/소문자를 구분하는 연산자를 사용합니다. 예시:

  • 사용 ==안 하며 =~
  • 사용 in안 하며 in~
  • 사용 hassuffix_cs안 하며 hassuffix

더 빠른 결과를 위해 영숫자가 아닌 문자로 바인딩된 기호 또는 영숫자 단어의 존재 여부 또는 필드의 시작 또는 끝을 테스트하는 경우 사용하거나 in사용합니다has. has는 , startswith또는 endswith.보다 contains더 빠르게 작동합니다.

IPv4 주소 또는 해당 접두사를 검색하려면 이 용도로 최적화된 IPv4 주소에서 특수 연산자 중 하나를 사용합니다.

자세한 내용은 쿼리 모범 사례를 참조하세요.

예를 들어 이러한 쿼리 중 첫 번째 쿼리는 더 빠르게 실행됩니다.

StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count

IPv4 주소의 연산자

다음 연산자 그룹은 IPv4 주소 또는 해당 접두사에서 인덱스 가속 검색을 제공합니다.

Operator 설명 예제(수율 true)
has_ipv4 LHS에는 RHS가 나타내는 IPv4 주소가 포함되어 있습니다. has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3")
has_ipv4_prefix LHS에는 RHS가 나타내는 접두사와 일치하는 IPv4 주소가 포함되어 있습니다. has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.")
has_any_ipv4 LHS에는 RHS에서 제공하는 IPv4 주소 중 하나가 포함되어 있습니다. has_any_ipv4("Source address is 10.1.2.3:1234", dynamic(["10.1.2.3", "127.0.0.1"]))
has_any_ipv4_prefix LHS에는 RHS에서 제공하는 접두사 중 하나와 일치하는 IPv4 주소가 포함되어 있습니다. has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))