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 string
zijn Kusto
de termen bijvoorbeeld , KustoExplorerQueryRun
en 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
, nietin~
- Gebruik
hassuffix_cs
, niethassuffix
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
, startswith
of 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."])) |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor