Tekenreeksoperators

Kusto-querytaal (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 voor het optimaliseren van de prestaties beschreven.

Informatie over tekenreekstermen

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

Wat is een term?

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

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

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

Kusto bouwt een termenindex die bestaat uit alle termen van drie tekens of meer, en deze index wordt gebruikt door tekenreeksoperators zoals has, !has, enzovoort. Als de query zoekt naar een term die kleiner is dan drie tekens of een contains operator 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 term index.

Notitie

In EngineV2 bestaat een term uit vier of meer tekens.

Operatoren 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.

Operator 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 een subsequence van LHS Nee "FabriKam" contains "BRik"
!contains RHS komt niet voor in LHS Nee "Fabrikam" !contains "xyz"
contains_cs RHS treedt op als een subsequence van LHS Ja "FabriKam" contains_cs "Kam"
!contains_cs RHS komt niet voor in LHS Ja "Fabrikam" !contains_cs "Kam"
endswith RHS is een afsluitende subsectie van LHS Nee "Fabrikam" endswith "Kam"
!endswith RHS is geen afsluitende subsequence van LHS Nee "Fabrikam" !endswith "brik"
endswith_cs RHS is een afsluitende subsectie van LHS Ja "Fabrikam" endswith_cs "kam"
!endswith_cs RHS is geen afsluitende subsequence van LHS Ja "Fabrikam" !endswith_cs "brik"
has Right-side (RHS) is een hele term in links (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 elk 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 Is 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~ Is 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 subsequence van LHS Nee "Fabrikam" startswith "fab"
!startswith RHS is geen eerste subsequence van LHS Nee "Fabrikam" !startswith "kam"
startswith_cs RHS is een eerste subsequence 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 voor betere prestaties de hoofdlettergevoelige. 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 alfanumeriek woord dat is gebonden door niet-alfanumerieke tekens, of het begin of einde van een veld, gebruikt has u of in. has werkt sneller dan contains, startswithof endswith.

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

Zie Best practices voor query's voor 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 versnelde zoekopdrachten op IPv4-adressen of hun voorvoegsels.

Operator 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 van 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 van RHS has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))