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, nicht in~
  • Verwenden Sie hassuffix_cs, nicht hassuffix

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."]))