GitHubContribute in GitHub: Online bearbeiten

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

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.