Freigeben über


Zeichenfolgenoperatoren

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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.

Operatoren für Zeichenfolgen

Die folgenden Abkürzungen werden in diesem Artikel 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)
== Entspricht Ja "aBc" == "aBc"
!= Not Equals Ja "abc" != "ABC"
=~ Entspricht No "abc" =~ "ABC"
!~ Not Equals No "aBc" !~ "xyz"
contains RS tritt als Untersequenz der LS auf No "FabriKam" contains "BRik"
!contains RHS tritt nicht in LHS auf No "Fabrikam" !contains "xyz"
contains_cs RS tritt als Untersequenz der LS auf Ja "FabriKam" contains_cs "Kam"
!contains_cs RHS tritt nicht in LHS auf Ja "Fabrikam" !contains_cs "Kam"
endswith RHS ist eine schließende Untermenge von LHS No "Fabrikam" endswith "Kam"
!endswith RHS ist keine schließende Untermenge von LHS No "Fabrikam" !endswith "brik"
endswith_cs RHS ist eine schließende Untermenge von LHS Ja "Fabrikam" endswith_cs "kam"
!endswith_cs RHS ist keine schließende Untermenge von LHS Ja "Fabrikam" !endswith_cs "brik"
has Rechte Seite (RS) ist ein ganzer Begriff innerhalb der linken Seite (LS) No "North America" has "america"
!has RS ist kein vollständiger Begriff in LS No "North America" !has "amer"
has_all Identisch mit has, funktioniert aber für alle Elemente No "North and South America" has_all("south", "north")
has_any Identisch mit has, funktioniert aber für jedes der Elemente No "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 No "North America" hasprefix "ame"
!hasprefix RS ist kein Begriffspräfix in LS No "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 No "North America" hassuffix "ica"
!hassuffix RS ist kein Begriffssuffix in LS No "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. No "Abc" in~ ("123", "345", "abc")
!in~ Entspricht keinem der Elemente No "bCa" !in~ ("123", "345", "ABC")
matches regex LS enthält eine Übereinstimmung für RS Ja "Fabrikam" matches regex "b.*k"
startswith RHS ist eine anfängliche Untermenge von LHS No "Fabrikam" startswith "fab"
!startswith RHS ist keine anfängliche Untermenge von LHS No "Fabrikam" !startswith "kam"
startswith_cs RHS ist eine anfängliche Untermenge von LHS Ja "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS ist keine anfängliche Untermenge von LHS 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 , ==nicht =~
  • Verwenden , innicht in~
  • Verwenden , hassuffix_csnicht 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 stellt die indexbeschleunigte Suche auf IPv4-Adressen oder deren Präfixe bereit.

Operator Beschreibung Beispiel (ergibt true)
has_ipv4 LHS enthält IPv4-Adresse, dargestellt durch RHS 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 einem von RHS bereitgestellten Präfixen entspricht. has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))