Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Kusto Query Language (KQL) erbjuder olika frågeoperatorer för sökning efter 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 de string operatorer 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 termer.
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 termerna till exempel Kusto, KustoExplorerQueryRunoch 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, !hasoch 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 leta upp termen i termindexet.
Även om Explorer är en delsträng av KustoExplorerQueryRunreturnerar "KustoExplorerQueryRun" has "Explorer"false medan "KustoExplorerQueryRun" contains "Explorer" returnerar true. Detta är subtilt men beteendet beror på att has är termbaserad.
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 ett _cs suffix är skiftlägeskänsliga.
| Operatör | Beskrivning | Case-Sensitive | Exempel (ger true) | 
|---|---|---|---|
| == | Motsvarar | Ja | "aBc" == "aBc" | 
| != | Inte lika med | Ja | "abc" != "ABC" | 
| =~ | Motsvarar | Nej | "abc" =~ "ABC" | 
| !~ | Inte lika med | Nej | "aBc" !~ "xyz" | 
| contains | RHS inträffar som en delmängd av LHS | Nej | "FabriKam" contains "BRik" | 
| !contains | RHS förekommer inte i LHS | Nej | "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 | Nej | "Fabrikam" endswith "Kam" | 
| !endswith | RHS är inte en avslutande delmängd av LHS | Nej | "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) | Nej | "North America" has "america" | 
| !has | RHS är inte en fullständig term i LHS | Nej | "North America" !has "amer" | 
| has_all | Samma som hasmen fungerar på alla element | Nej | "North and South America" has_all("south", "north") | 
| has_any | Samma som hasmen fungerar på något av elementen | Nej | "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 | Nej | "North America" hasprefix "ame" | 
| !hasprefix | RHS är inte ett termprefix i LHS | Nej | "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 | Nej | "North America" hassuffix "ica" | 
| !hassuffix | RHS är inte ett termsuffix i LHS | Nej | "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 | Är 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~ | Är lika med något av elementen | Nej | "Abc" in~ ("123", "345", "abc") | 
| !in~ | Inte lika med något av elementen | Nej | "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 | Nej | "Fabrikam" startswith "fab" | 
| !startswith | RHS är inte en inledande delmängd av LHS | Nej | "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 en. Till exempel:
- Använd ==, inte=~
- Använd in, intein~
- Använd hassuffix_cs, intehassuffix
Om du testar om det finns en symbol eller ett alfanumeriskt ord som är bundet av icke-alfanumeriska tecken eller början eller slutet av ett fält använder du has eller inför snabbare resultat.
              has fungerar snabbare än contains, startswitheller endswith.
Om du vill söka efter IPv4-adresser eller deras prefix använder du någon av de särskilda operatorerna på IPv4-adresser, som är optimerade för detta ändamål.
Mer information finns i Bästa praxis 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.
| Operatör | 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."])) |