Tekenreeksoperatoren
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 string
zijn de termen bijvoorbeeld Kusto
, KustoExplorerQueryRun
en 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
, !has
enzovoort. 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 KustoExplorerQueryRun
is, retourneert "KustoExplorerQueryRun" has "Explorer"
false
terwijl "KustoExplorerQueryRun" contains "Explorer"
true
retourneert. 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
, nietin~
- Gebruik
hassuffix_cs
, niethassuffix
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
, startswith
of 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."])) |