Zeichenfolgeoperatoren
KQL bietet eine Vielzahl von Abfrageoperatoren für die Suche nach Zeichenfolgedatentypen. Der folgende Artikel beschreibt, wie Zeichenfolgebegriffe indexiert werden, listet die Zeichenfolgeabfrageoperatoren auf und gibt Tipps zur Optimierung der Leistung.
Begriffe für Zeichenfolgen verstehen
KQL indexiert alle Spalten, einschließlich Spalten des Typs string. Für solche Spalten werden abhängig von den tatsächlichen Daten mehrere Indizes erstellt. Diese Indizes sind nicht direkt verfügbar, sondern werden in Abfragen mit string -Operatoren verwendet, deren Name has enthält, z. B. has, !has, hasprefix, !hasprefix. Die Semantik dieser Operatoren wird durch die Art und Weise bestimmt, wie die Spalte codiert wird. Anstatt eine "einfache" Unterzeichenfolge abzugleichen, stimmen diese Operatoren mit Begriffenüberein.
Was ist ein Begriff?
Standardmäßig wird jeder string -Wert in maximale Sequenzen alphanumerischer ASCII-Zeichen unterteilt und jede dieser Sequenzen wird zu einem Begriff. In der folgenden stringsind die Begriffe KQL, KQLExplorerQueryRunund die folgenden Unterzeichenfolgen: ad67d136, c1db, 4f9f, 88ef, d94f3b6b0b5a.
KQL: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
KQL erstellt einen Begriffsindex, der aus allen Begriffen besteht, die drei oder mehr Zeichen umfassen, und dieser Index wird von Zeichenfolgeoperatoren wie has, !hasusw. verwendet. Wenn die Abfrage nach einem Begriff sucht, der kleiner als drei Zeichen ist, oder einen Operator contains verwendet, wird die Abfrage auf das Durchsuchen der Werte in der Spalte zurückgesetzt. Das Durchsuchen ist viel langsamer als das Suchen des Begriffs im Begriffsindex.
Operatoren für Zeichenfolgen
In der folgenden Tabelle werden die folgenden Abkürzungen verwendet:
- RHS = rechte Seite des Ausdrucks
- LHS = linke Seite des Ausdrucks
Bei Operatoren mit dem Suffix _cs muss die Groß-/Kleinschreibung beachtet werden.
Operatoren, bei denen die Groß-/Kleinschreibung nicht beachtet werden muss, werden derzeit nur für ASCII-Text unterstützt. Verwenden Sie für einen Nicht-ASCII-Vergleich die Funktion tolower () .
| Bediener | Beschreibung | Groß-/Kleinschreibung muss beachtet werden. | Beispiel (ergibt true) |
|---|---|---|---|
== |
Ist gleich | Ja | "aBc" == "aBc" |
!= |
Ist ungleich | Ja | "abc" != "ABC" |
=~ |
Ist gleich | Nein | "abc" =~ "ABC" |
!~ |
Ist ungleich | Nein | "aBc" !~ "xyz" |
contains |
RHS tritt als Teilsequenz von LHS auf | Nein | "FabriKam" contains "BRik" |
!contains |
RHS tritt nicht in LHS auf | Nein | "Fabrikam" !contains "xyz" |
contains_cs |
RHS tritt als Teilsequenz von LHS 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 Teilfolge von LHS | Nein | "Fabrikam" endswith "Kam" |
!endswith |
RHS ist keine abschließende Teilsequenz von LHS | Nein | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS ist eine schließende Teilfolge von LHS | Ja | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS ist keine abschließende Teilsequenz von LHS | Ja | "Fabrikam" !endswith_cs "brik" |
has |
Rechte Seite (RHS) ist ein ganzer Begriff auf der linken Seite (LHS) | Nein | "North America" has "america" |
!has |
RHS ist kein Vollbegriff in LHS | 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 alle Elemente |
Nein | "North America" has_any("south", "north") |
has_cs |
RHS ist ein ganzer Begriff in LHS | Ja | "North America" has_cs "America" |
!has_cs |
RHS ist kein Vollbegriff in LHS | Ja | "North America" !has_cs "amer" |
hasprefix |
RHS ist ein Begriffspräfix in LHS | Nein | "North America" hasprefix "ame" |
!hasprefix |
RHS ist kein Begriffspräfix in LHS | Nein | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS ist ein Begriffspräfix in LHS | Ja | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS ist kein Begriffspräfix in LHS | Ja | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS ist ein Bedingungssuffix in LHS | Nein | "North America" hassuffix "ica" |
!hassuffix |
RHS ist kein Begriffssuffix in LHS | Nein | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS ist ein Bedingungssuffix in LHS | Ja | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS ist kein Begriffssuffix in LHS | 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 |
LHS enthält eine Übereinstimmung für RHS | Ja | "Fabrikam" matches regex "b.*k" |
startswith |
RHS ist eine erste Teilfolge von LHS | Nein | "Fabrikam" startswith "fab" |
!startswith |
RHS ist keine Anfangsuntersequenz von LHS | Nein | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS ist eine erste Teilfolge von LHS | Ja | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS ist keine Anfangsuntersequenz von LHS | Ja | "Fabrikam" !startswith_cs "fab" |
Alle Operatoren, die has nach indexierten Begriffen von drei oder mehr Zeichen und nicht nach Übereinstimmungen mit Unterzeichenfolgen suchen. Ein Begriff wird erstellt, indem die Zeichenfolge in Folgen alphanumerischer ASCII-Zeichen aufgeteilt wird. Siehe Erläuterungen zu Zeichenfolgebegriffen.
Tipps zur Leistung
Um die Leistung zu verbessern, sollten Sie bei zwei Operatoren, die dieselbe Task ausführen, die Groß-/Kleinschreibung beachten. Beispiel:
- Verwenden Sie
==, nicht=~ - Verwenden Sie
in, nichtin~ - Verwenden Sie
hassuffix_cs, nichthassuffix
Um schnellere Ergebnisse zu erzielen, verwenden Sie has oder in, wenn Sie testen, ob ein Symbol oder ein alphanumerisches Wort vorhanden ist, das durch nicht alphanumerische Zeichen oder den Anfang oder das Ende eines Felds gebunden ist. has funktioniert schneller als contains, startswithoder endswith.