Zeichenfolgenoperatoren
Kusto-Abfragesprache (KQL) bietet verschiedene Abfrageoperatoren für die Suche nach Zeichenfolgendatentypen. Im folgenden Artikel wird beschrieben, wie Zeichenfolgenbegriffe indiziert werden, die Zeichenfolgenabfrageoperatoren werden aufgelistet, und Sie erhalten Tipps zur Leistungsoptimierung.
Verstehen von Zeichenfolgenbegriffen
Kusto indiziert alle Spalten, einschließlich Spalten vom Typ string
. Abhängig von den tatsächlichen Daten werden mehrere Indizes für solche Spalten erstellt. Diese Indizes werden nicht direkt bereitgestellt, sondern in Abfragen mit den string
-Operatoren verwendet, die has
als Teil ihres Namens aufweisen, z. B. has
, !has
, hasprefix
, !hasprefix
. Die Semantik dieser Operatoren wird durch die Art der Codierung der Spalte vorgegeben. Anstatt eine „einfache“ Teilzeichenfolge abzugleichen, gleichen diese Operatoren Begriffe ab.
Was ist ein Begriff?
Standardmäßig wird jeder string
Wert in maximale Sequenzen alphanumerischer Zeichen unterteilt, und jede dieser Sequenzen wird in einen Ausdruck umgewandelt.
Im folgenden string
-Element sind die Begriffe z. B. Kusto
, KustoExplorerQueryRun
und die folgenden Teilzeichenfolgen: ad67d136
, c1db
, 4f9f
, 88ef
, d94f3b6b0b5a
.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto erstellt einen Begriffsindex mit allen Begriffen, die mindestens drei Zeichen lang sind. Dieser Index wird von Zeichenfolgenoperatoren wie has
, !has
usw. verwendet. Wenn bei der Abfrage nach einem Begriff mit weniger als drei Zeichen gesucht oder ein Operator vom Typ contains
verwendet wird, werden wieder die Werte in der Spalte überprüft. Die Überprüfung ist viel langsamer als das Nachschlagen des Begriffs im Begriffsindex.
Hinweis
In EngineV2 besteht ein Begriff aus mindestens vier Zeichen.
Operatoren für Zeichenfolgen
In diesem Artikel werden die folgenden Abkürzungen verwendet:
- RS = Rechte Seite des Ausdrucks
- LS = Linke Seite des Ausdrucks
Bei Operatoren mit einem _cs
-Suffix wird Groß-/Kleinschreibung beachtet.
Operator | BESCHREIBUNG | Groß-/Kleinschreibung | Beispiel (ergibt true ) |
---|---|---|---|
== |
Equals | Ja | "aBc" == "aBc" |
!= |
Not Equals | Ja | "abc" != "ABC" |
=~ |
Equals | Nein | "abc" =~ "ABC" |
!~ |
Not Equals | Nein | "aBc" !~ "xyz" |
contains |
Rechte Seite kommt als Teilsequenz von linker Seite vor | Nein | "FabriKam" contains "BRik" |
!contains |
Rechte Seite kommt auf linker Seite nicht vor | Nein | "Fabrikam" !contains "xyz" |
contains_cs |
Rechte Seite kommt als Teilsequenz von linker Seite vor | Ja | "FabriKam" contains_cs "Kam" |
!contains_cs |
Rechte Seite kommt auf linker Seite nicht vor | Ja | "Fabrikam" !contains_cs "Kam" |
endswith |
Rechte Seite ist eine schließende Teilsequenz von linker Seite | Nein | "Fabrikam" endswith "Kam" |
!endswith |
Rechte Seite ist keine schließende Teilsequenz von linker Seite | Nein | "Fabrikam" !endswith "brik" |
endswith_cs |
Rechte Seite ist eine schließende Teilsequenz von linker Seite | Ja | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
Rechte Seite ist keine schließende Teilsequenz von linker Seite | Ja | "Fabrikam" !endswith_cs "brik" |
has |
Rechte Seite (RS) ist ein ganzer Begriff innerhalb der linken Seite (LS) | Nein | "North America" has "america" |
!has |
RS ist kein vollständiger Begriff in LS | Nein | "North America" !has "amer" |
has_all |
Identisch mit has , funktioniert aber für alle Elemente |
Nein | "North and South America" has_all("south", "north") |
has_any |
Identisch mit has , funktioniert aber für jedes der Elemente |
Nein | "North America" has_any("south", "north") |
has_cs |
RS ist ein vollständiger Begriff in LS | Ja | "North America" has_cs "America" |
!has_cs |
RS ist kein vollständiger Begriff in LS | Ja | "North America" !has_cs "amer" |
hasprefix |
RS ist ein Begriffspräfix in LS | Nein | "North America" hasprefix "ame" |
!hasprefix |
RS ist kein Begriffspräfix in LS | Nein | "North America" !hasprefix "mer" |
hasprefix_cs |
RS ist ein Begriffspräfix in LS | Ja | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RS ist kein Begriffspräfix in LS | Ja | "North America" !hasprefix_cs "CA" |
hassuffix |
RS ist ein Begriffssuffix in LS | Nein | "North America" hassuffix "ica" |
!hassuffix |
RS ist kein Begriffssuffix in LS | Nein | "North America" !hassuffix "americ" |
hassuffix_cs |
RS ist ein Begriffssuffix in LS | Ja | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RS ist kein Begriffssuffix in LS | Ja | "North America" !hassuffix_cs "icA" |
in |
Entspricht einem der Elemente | Ja | "abc" in ("123", "345", "abc") |
!in |
Entspricht keinem der Elemente | Ja | "bca" !in ("123", "345", "abc") |
in~ |
Entspricht einem der Elemente | Nein | "Abc" in~ ("123", "345", "abc") |
!in~ |
Entspricht keinem der Elemente | Nein | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
Linke Seite enthält eine Übereinstimmung für rechte Seite | Ja | "Fabrikam" matches regex "b.*k" |
startswith |
Rechte Seite ist eine öffnende Teilsequenz von linker Seite | Nein | "Fabrikam" startswith "fab" |
!startswith |
Rechte Seite ist keine öffnende Teilsequenz von linker Seite | Nein | "Fabrikam" !startswith "kam" |
startswith_cs |
Rechte Seite ist eine öffnende Teilsequenz von linker Seite | Ja | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
Rechte Seite ist keine öffnende Teilsequenz von linker Seite | Ja | "Fabrikam" !startswith_cs "fab" |
Leistungstipps
Verwenden Sie für bessere Leistung bei zwei Operatoren, die dieselbe Aufgabe ausführen, den Operator, der zwischen Groß-/Kleinschreibung unterscheidet. Zum Beispiel:
- Verwenden Sie
==
, nicht=~
- Verwenden Sie
in
, nichtin~
- Verwenden Sie
hassuffix_cs
, nichthassuffix
Um schnellere Ergebnisse zu erhalten, verwenden Sie has
oder in
, wenn Sie auf das Vorhandensein eines Symbols oder alphanumerischen Worts, das durch nicht-alphanumerische Zeichen gebunden ist, oder auf den Anfang oder das Ende eines Felds testen.
has
ist schneller als contains
, startswith
oder endswith
.
Um nach IPv4-Adressen oder deren Präfixen zu suchen, verwenden Sie einen der speziellen Operatoren für IPv4-Adressen, die für diesen Zweck optimiert sind.
Weitere Informationen finden Sie unter Bewährte Methoden für Abfragen.
Beispielsweise wird die erste dieser Abfragen schneller ausgeführt:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Operatoren für IPv4-Adressen
Die folgende Gruppe von Operatoren bietet eine indexbeschleunigte Suche für IPv4-Adressen oder deren Präfixe.
Operator | BESCHREIBUNG | Beispiel (ergibt true ) |
---|---|---|
has_ipv4 | LHS enthält die IPv4-Adresse, die durch RHS dargestellt wird. | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS enthält eine IPv4-Adresse, die einem präfix entspricht, das durch RHS dargestellt wird. | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS enthält eine der IPv4-Adressen, die von RHS bereitgestellt werden. | 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 enthält eine IPv4-Adresse, die mit einem der von RHS bereitgestellten Präfixe übereinstimmt. | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für