Delen via


Tekenreeksoperatoren

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

Kusto Query Language (KQL) biedt verschillende queryoperators voor het zoeken naar tekenreeksgegevenstypen. In het volgende artikel wordt beschreven hoe tekenreekstermen worden geïndexeerd, worden de operatoren voor tekenreeksquery's vermeld en worden tips weergegeven voor het optimaliseren van de prestaties.

Informatie over tekenreekstermen

Kusto indexeert alle kolommen, inclusief kolommen van het type string. Er zijn meerdere indexen gebouwd voor dergelijke kolommen, afhankelijk van de werkelijke gegevens. Deze indexen worden niet rechtstreeks weergegeven, maar worden gebruikt in query's met de string operators die has hebben als onderdeel van hun naam, zoals has, !has, hasprefix, !hasprefix. De semantiek van deze operators wordt bepaald door de manier waarop de kolom wordt gecodeerd. In plaats van een 'gewone' subtekenreeksovereenkomst uit te voeren, komen deze operatoren overeen met termen.

Wat is een term?

Standaard wordt elke string waarde onderverdeeld in maximale reeksen alfanumerieke tekens en wordt elk van deze reeksen omgezet in een term.

In de volgende stringzijn de termen bijvoorbeeld Kusto, KustoExplorerQueryRunen de volgende subtekenreeksen: ad67d136, c1db, 4f9f, 88ef, d94f3b6b0b5a.

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

Kusto bouwt een termindex die bestaat uit alle termen die zijn drie tekens of meer. Deze index wordt gebruikt door tekenreeksoperators zoals has, !hasenzovoort. Als de query zoekt naar een term die kleiner is dan drie tekens of een operator contains gebruikt, wordt de query teruggezet naar het scannen van de waarden in de kolom. Scannen is veel langzamer dan het opzoeken van de term in de termenindex.

Hoewel Explorer een subtekenreeks van KustoExplorerQueryRunis, retourneert "KustoExplorerQueryRun" has "Explorer"false terwijl "KustoExplorerQueryRun" contains "Explorer"trueretourneert. Dit is subtiel, maar het gedrag is te wijten aan het feit dat has op termen gebaseerd is.

Operators voor tekenreeksen

In dit artikel worden de volgende afkortingen gebruikt:

  • RHS = rechterkant van de expressie
  • LHS = linkerkant van de expressie

Operators met een _cs achtervoegsel zijn hoofdlettergevoelig.

Bediener Beschrijving Case-Sensitive Voorbeeld (opbrengsten true)
== Is gelijk aan Ja "aBc" == "aBc"
!= Is niet gelijk aan Ja "abc" != "ABC"
=~ Is gelijk aan Nee "abc" =~ "ABC"
!~ Is niet gelijk aan Nee "aBc" !~ "xyz"
contains RHS treedt op als subsquententie van LHS Nee "FabriKam" contains "BRik"
!contains RHS vindt niet plaats in LHS Nee "Fabrikam" !contains "xyz"
contains_cs RHS treedt op als subsquententie van LHS Ja "FabriKam" contains_cs "Kam"
!contains_cs RHS vindt niet plaats in LHS Ja "Fabrikam" !contains_cs "Kam"
endswith RHS is een afsluitende subsquence van LHS Nee "Fabrikam" endswith "Kam"
!endswith RHS is geen afsluitende subsequence van LHS Nee "Fabrikam" !endswith "brik"
endswith_cs RHS is een afsluitende subsquence van LHS Ja "Fabrikam" endswith_cs "kam"
!endswith_cs RHS is geen afsluitende subsequence van LHS Ja "Fabrikam" !endswith_cs "brik"
has RhS (right-side) is een hele term aan de linkerkant (LHS) Nee "North America" has "america"
!has RHS is geen volledige term in LHS Nee "North America" !has "amer"
has_all Hetzelfde als has, maar werkt op alle elementen Nee "North and South America" has_all("south", "north")
has_any Hetzelfde als has maar werkt op een van de elementen Nee "North America" has_any("south", "north")
has_cs RHS is een hele term in LHS Ja "North America" has_cs "America"
!has_cs RHS is geen volledige term in LHS Ja "North America" !has_cs "amer"
hasprefix RHS is een termvoorvoegsel in LHS Nee "North America" hasprefix "ame"
!hasprefix RHS is geen termvoorvoegsel in LHS Nee "North America" !hasprefix "mer"
hasprefix_cs RHS is een termvoorvoegsel in LHS Ja "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS is geen termvoorvoegsel in LHS Ja "North America" !hasprefix_cs "CA"
hassuffix RHS is een termachtervoegsel in LHS Nee "North America" hassuffix "ica"
!hassuffix RHS is geen termachtervoegsel in LHS Nee "North America" !hassuffix "americ"
hassuffix_cs RHS is een termachtervoegsel in LHS Ja "North America" hassuffix_cs "ica"
!hassuffix_cs RHS is geen termachtervoegsel in LHS Ja "North America" !hassuffix_cs "icA"
in Is gelijk aan een van de elementen Ja "abc" in ("123", "345", "abc")
!in Niet gelijk aan een van de elementen Ja "bca" !in ("123", "345", "abc")
in~ Is gelijk aan een van de elementen Nee "Abc" in~ ("123", "345", "abc")
!in~ Niet gelijk aan een van de elementen Nee "bCa" !in~ ("123", "345", "ABC")
matches regex LHS bevat een overeenkomst voor RHS Ja "Fabrikam" matches regex "b.*k"
startswith RHS is een eerste subsquence van LHS Nee "Fabrikam" startswith "fab"
!startswith RHS is geen eerste subsequence van LHS Nee "Fabrikam" !startswith "kam"
startswith_cs RHS is een eerste subsquence van LHS Ja "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS is geen eerste subsequence van LHS Ja "Fabrikam" !startswith_cs "fab"

Tips voor prestaties

Als er twee operators zijn die dezelfde taak uitvoeren, gebruikt u de hoofdlettergevoelige operator voor betere prestaties. Bijvoorbeeld:

  • Gebruik ==, niet =~
  • Gebruik in, niet in~
  • Gebruik hassuffix_cs, niet hassuffix

Als u voor snellere resultaten test op de aanwezigheid van een symbool of alfanumerieke woord dat afhankelijk is van niet-alfanumerieke tekens of het begin of einde van een veld, gebruikt u has of in. has werkt sneller dan contains, startswithof endswith.

Als u wilt zoeken naar IPv4-adressen of hun voorvoegsels, gebruikt u een van de speciale operators op IPv4-adressen, die voor dit doel zijn geoptimaliseerd.

Zie Best practices voor query'svoor meer informatie.

De eerste van deze query's wordt bijvoorbeeld sneller uitgevoerd:

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

Operators op IPv4-adressen

De volgende groep operators bieden versneld zoeken op IPv4-adressen of hun voorvoegsels.

Bediener Beschrijving Voorbeeld (opbrengsten true)
has_ipv4 LHS bevat IPv4-adres dat wordt vertegenwoordigd door RHS has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3")
has_ipv4_prefix LHS bevat een IPv4-adres dat overeenkomt met een voorvoegsel dat wordt vertegenwoordigd door RHS has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.")
has_any_ipv4 LHS bevat een van de IPv4-adressen die worden geleverd door 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 bevat een IPv4-adres dat overeenkomt met een van de voorvoegsels die worden geleverd door RHS has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))