문자열 연산자
KQL(Kusto 쿼리 언어)은 문자열 데이터 형식을 검색하기 위한 다양한 쿼리 연산자를 제공합니다. 이 문서에서는 문자열 용어가 인덱싱되는 방법을 설명하고, 문자열 쿼리 연산자를 나열하며, 성능을 최적화하기 위한 팁을 제공합니다.
문자열 용어 이해
Kusto는 string
형식의 열을 포함하여 모든 열을 인덱싱합니다. 실제 데이터에 따라 이러한 열에 대해 여러 인덱스가 작성됩니다. 이러한 인덱스는 직접 공개되지 않지만, has
, !has
, hasprefix
, !hasprefix
와 같이 이름의 일부로 has
가 포함된 string
연산자를 통해 쿼리에 사용됩니다. 이러한 연산자의 의미 체계는 열을 인코딩하는 방식에 따라 결정됩니다. 이러한 연산자는 "일반" 부분 문자열 일치를 수행하는 대신 용어와 일치합니다.
용어란?
기본적으로 각 string
값은 영숫자 문자의 최대 시퀀스로 나뉘며 각 시퀀스는 용어로 만들어집니다.
예를 들어 다음 string
에서 용어는 Kusto
, KustoExplorerQueryRun
이고 부분 문자열은 ad67d136
, c1db
, 4f9f
, 88ef
, d94f3b6b0b5a
입니다.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto는 3자 이상의 모든 용어로 구성된 용어 인덱스를 작성하고, 이 인덱스는 has
, !has
등과 같은 문자열 연산자에서 사용됩니다. 3자 미만의 용어를 찾거나 contains
연산자를 사용하는 쿼리는 열 값 검사로 돌아갑니다. 검사는 용어 인덱스에서 용어를 조회하는 것보다 훨씬 느립니다.
참고
EngineV2에서 용어는 4자 이상으로 구성됩니다.
문자열에 대한 연산자
이 문서에서는 다음과 같은 약어를 사용합니다.
- RHS = 식의 오른쪽
- LHS = 식의 왼쪽
_cs
접미사가 있는 연산자는 대/소문자를 구분합니다.
연산자 | 설명 | 대/소문자 구분 | 예제(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
더 빠른 결과를 얻으려면 영숫자가 아닌 문자로 바인딩된 기호 또는 영숫자 단어가 있는지 또는 필드의 시작 또는 끝이 있는지 테스트하는 경우 has
또는 in
을 사용합니다.
has
는 contains
, startswith
또는 endswith
보다 빠르게 작동합니다.
IPv4 주소 또는 해당 접두사를 검색하려면 이 용도로 최적화된 IPv4 주소에서 특수 연산자 중 하나를 사용합니다.
자세한 내용은 쿼리 모범 사례를 참조하세요.
예를 들어 다음 쿼리 중 첫 번째 쿼리는 더 빠르게 실행됩니다.
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
IPv4 주소의 연산자
다음 연산자 그룹은 IPv4 주소 또는 해당 접두사에서 인덱스 가속 검색을 제공합니다.
연산자 | Description | 예제(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."])) |
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기