Typen von KQL-Abfragen
Sie haben die Struktur einer KQL-Abfrage in der vorherigen Einheit kennengelernt. Lassen Sie uns nun tiefer in die verschiedenen Teile und Typen von KQL-Abfragen eintauchen.
Diese Lerneinheit bietet eine Übersicht über Abfrageanweisungen und -funktionen. In KQL bestehen alle Abfragen aus mindestens einer Abfrageanweisung. Diese Anweisungen wirken sich nur auf die spezifische Abfrage aus, in der sie verwendet werden, es sei denn, sie werden für zukünftige Verwendung explizit gespeichert. Die am häufigsten verwendeten Typen von Abfrageanweisungen sind tabellarische Ausdrucksanweisungen und let-Anweisungen. Neben der umfangreichen Bibliothek mit integrierten Funktionen erlaubt KQL auch benutzerdefinierte Funktionen, die entweder gespeichert oder zur Verwendung in einer einzelnen Abfrage definiert werden können.
Anweisungen für tabellarische Ausdrücke
Die meisten Abfragen verwenden mindestens eine tabellarische Ausdrucksanweisung, d. h. sowohl die Eingabe als auch die Ausgabe bestehen aus Tabellen oder tabellarischen Datasets. Diese Anweisungen enthalten in der Regel Operatoren, die jeweils mit einer tabellarischen Eingabe beginnen und eine tabellarische Ausgabe zurückgeben.
KQL bietet eine breite Palette von Operatoren, die von einfachen Operatoren (wie count
, sort
und where
) bis zu komplexeren Operatoren (wie parse
, join
und render
) reichen.
Die folgende Abfrage enthält z. B. vier Anweisungen für tabellarische Ausdrucksanweisungen:
StormEvents // tabular expression statement 1
| where EventType == "Flood" // tabular expression statement 2
| sort by DamageProperty asc // tabular expression statement 3
| take 10 // tabular expression statement 4
Let-Anweisungen
Eine let
-Anweisung definiert eine Bindung zwischen einem Namen und einem Ausdruck. Let-Anweisungen können verwendet werden, um eine lange Abfrage in kleine benannte Teile zu zerlegen, die leichter zu verstehen sind.
Beispielsweise werden die let
-Anweisungen in der folgenden Abfrage verwendet, um skalare Werte zu definieren:
let n = 10; // number
let place = "VIRGINIA"; // string
let cutoff = ago(12345d); // datetime
StormEvents
| where StartTime > cutoff and State == place
| take n
Integrierte Funktionen
Integrierte Funktionen sind hartcodierte, von KQL definierte Funktionen, die nicht geändert werden können. KQL verfügt über eine reichhaltige Bibliothek von Funktionen, die in der offiziellen KQL-Dokumentation beschrieben werden. Die Funktionen reichen von einfachen Sortier- und Abgleichsfunktionen bis hin zu komplexen statistischen und räumlichen Funktionen.
Die folgende strcat()
-Funktion verkettet zum Beispiel Zeichenfolgenargumente:
print str = strcat("hello", " ", "world")
Benutzerdefinierte Funktionen
Benutzerdefinierte Funktionen werden, wie der Name schon sagt, vom Benutzer definiert. Benutzerdefinierte Funktionen können in zwei Typen unterteilt werden:
Gespeicherte Funktionen: Benutzerdefinierte Funktionen, die in einem Datenbankschema gespeichert und verwaltet werden, ähnlich wie Tabellen. Verschiedene Produkte verwenden unterschiedliche Methoden zum Speichern von Funktionen.
Die folgende Abfrage in Azure Data Explorer speichert beispielsweise eine Funktion, die einen Parameter annimmt:
.create function with (docstring = 'Demo function with parameter', folder='Demo') MyFunction2(myLimit: long) {StormEvents | take myLimit}
In anderen Umgebungen, z. B. in Azure Monitor und Microsoft Sentinel, können Abfragen über die Benutzeroberfläche gespeichert werden.
Abfragedefinierte Funktionen: Benutzerdefinierte Funktionen, die im Rahmen einer einzelnen Abfrage definiert und verwendet werden. Solche Funktionen werden mithilfe einer let-Anweisung definiert.
In der folgenden Abfrage wird beispielsweise die Funktion f definiert und dann verwendet:
let f=(a: string, b: string) { strcat(a, " (la la la) ", b) }; print f("hello", "world")