Strängoperatorer
Kusto-frågespråk (KQL) erbjuder olika frågeoperatorer för sökning av strängdatatyper. I följande artikel beskrivs hur strängtermer indexeras, visar en lista över strängfrågeoperatorer och ger tips för att optimera prestanda.
Förstå strängtermer
Kusto indexerar alla kolumner, inklusive kolumner av typen string
. Flera index skapas för sådana kolumner, beroende på faktiska data. Dessa index exponeras inte direkt, men används i frågor med operatorerna string
som har has
som en del av deras namn, till exempel has
, !has
, hasprefix
, !hasprefix
. Semantiken för dessa operatorer styrs av hur kolumnen kodas. I stället för att göra en "vanlig" delsträngsmatchning matchar dessa operatorer villkoren.
Vad är en term?
Som standard delas varje string
värde upp i maximala sekvenser med alfanumeriska tecken, och var och en av dessa sekvenser görs till en term.
I följande string
är till exempel termerna Kusto
, KustoExplorerQueryRun
och följande delsträngar: ad67d136
, , c1db
4f9f
, 88ef
, , d94f3b6b0b5a
.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto skapar ett termindex som består av alla termer som är tre tecken eller fler, och det här indexet används av strängoperatorer som has
, !has
och så vidare. Om frågan letar efter en term som är mindre än tre tecken eller använder en contains
operator återgår frågan till att skanna värdena i kolumnen. Genomsökningen är mycket långsammare än att söka upp termen i termindexet.
Anteckning
I EngineV2 består en term av fyra eller flera tecken.
Operatorer på strängar
Följande förkortningar används i den här artikeln:
- RHS = höger sida av uttrycket
- LHS = vänster sida av uttrycket
Operatorer med suffix _cs
är skiftlägeskänsliga.
Operator | Beskrivning | Case-Sensitive | Exempel (ger true ) |
---|---|---|---|
== |
Lika med | Ja | "aBc" == "aBc" |
!= |
Inte lika med | Ja | "abc" != "ABC" |
=~ |
Lika med | Inga | "abc" =~ "ABC" |
!~ |
Inte lika med | Inga | "aBc" !~ "xyz" |
contains |
RHS inträffar som en delmängd av LHS | Inga | "FabriKam" contains "BRik" |
!contains |
RHS förekommer inte i LHS | Inga | "Fabrikam" !contains "xyz" |
contains_cs |
RHS inträffar som en delmängd av LHS | Ja | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS förekommer inte i LHS | Ja | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS är en avslutande delmängd av LHS | Inga | "Fabrikam" endswith "Kam" |
!endswith |
RHS är inte en avslutande delmängd av LHS | Inga | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS är en avslutande delmängd av LHS | Ja | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS är inte en avslutande delmängd av LHS | Ja | "Fabrikam" !endswith_cs "brik" |
has |
Höger sida (RHS) är en hel term i vänster sida (LHS) | Inga | "North America" has "america" |
!has |
RHS är inte en fullständig term i LHS | Inga | "North America" !has "amer" |
has_all |
Samma som has men fungerar på alla element |
Inga | "North and South America" has_all("south", "north") |
has_any |
Samma som has men fungerar på något av elementen |
Inga | "North America" has_any("south", "north") |
has_cs |
RHS är en hel term i LHS | Ja | "North America" has_cs "America" |
!has_cs |
RHS är inte en fullständig term i LHS | Ja | "North America" !has_cs "amer" |
hasprefix |
RHS är ett termprefix i LHS | Inga | "North America" hasprefix "ame" |
!hasprefix |
RHS är inte ett termprefix i LHS | Inga | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS är ett termprefix i LHS | Ja | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS är inte ett termprefix i LHS | Ja | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS är ett termsuffix i LHS | Inga | "North America" hassuffix "ica" |
!hassuffix |
RHS är inte ett termsuffix i LHS | Inga | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS är ett termsuffix i LHS | Ja | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS är inte ett termsuffix i LHS | Ja | "North America" !hassuffix_cs "icA" |
in |
Lika med något av elementen | Ja | "abc" in ("123", "345", "abc") |
!in |
Inte lika med något av elementen | Ja | "bca" !in ("123", "345", "abc") |
in~ |
Lika med något av elementen | Inga | "Abc" in~ ("123", "345", "abc") |
!in~ |
Inte lika med något av elementen | Inga | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS innehåller en matchning för RHS | Ja | "Fabrikam" matches regex "b.*k" |
startswith |
RHS är en inledande delmängd av LHS | Inga | "Fabrikam" startswith "fab" |
!startswith |
RHS är inte en inledande delmängd av LHS | Inga | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS är en inledande delmängd av LHS | Ja | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS är inte en inledande delmängd av LHS | Ja | "Fabrikam" !startswith_cs "fab" |
Prestandatips
För bättre prestanda, när det finns två operatorer som utför samma uppgift, använder du skiftlägeskänslig. Exempel:
- Använd
==
, inte=~
- Använd
in
, intein~
- Använd
hassuffix_cs
, intehassuffix
För snabbare resultat, om du testar förekomsten av en symbol eller ett alfanumeriskt ord som är bundet av icke-alfanumeriska tecken, eller början eller slutet av ett fält, använder has
du eller in
.
has
fungerar snabbare än contains
, startswith
eller endswith
.
Om du vill söka efter IPv4-adresser eller deras prefix använder du en av de särskilda operatorerna på IPv4-adresser som är optimerade för detta ändamål.
Mer information finns i Metodtips för frågor.
Till exempel körs den första av dessa frågor snabbare:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Operatorer på IPv4-adresser
Följande grupp med operatorer tillhandahåller indexaccelererad sökning på IPv4-adresser eller deras prefix.
Operator | Beskrivning | Exempel (ger true ) |
---|---|---|
has_ipv4 | LHS innehåller IPv4-adress som representeras av RHS | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS innehåller en IPv4-adress som matchar ett prefix som representeras av RHS | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS innehåller en av IPv4-adresser som tillhandahålls av RHS | 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 innehåller en IPv4-adress som matchar ett av prefixen som tillhandahålls av RHS | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för