Zeichenfolgenoperatoren
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 ,
in
nichtin~
- Verwenden ,
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 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."])) |