GitHubContribute in GitHub: Online bearbeiten

Übersicht über Kusto Query Language (KQL)

Kusto Query Language ist ein leistungsfähiges Tool, um Ihre Daten zu untersuchen und Muster zu erkennen, Anomalien und Ausreißer zu erkennen, statistische Modellierung zu erstellen und vieles mehr.

Was ist eine Kusto-Abfrage?

Eine Kusto-Abfrage ist eine schreibgeschützte Anforderung zum Verarbeiten von Daten und Zurückgeben von Ergebnissen. Die Anforderung wird in Klartext unter Verwendung eines Datenflussmodells angegeben, das einfach zu lesen, zu verfassen und zu automatisieren ist. Kusto-Abfragen bestehen aus mindestens einer Abfrageanweisung.

Was ist eine Abfrageanweisung?

Es gibt zwei Arten von Benutzerabfrageanweisungen

Die häufigste Art von Abfrageanweisung ist ein tabellarischer Ausdruck Anweisung, was bedeutet, dass sowohl die Eingabe als auch die Ausgabe aus Tabellen oder tabellarischen Datasets besteht. Tabellarische Anweisungen enthalten null oder mehr Operatoren, von denen jeder mit einer Tabelleneingabe beginnt und eine Tabellenausgabe zurückgibt. Operatoren werden durch eine | (Pipe) sortiert. Datenflüsse oder werden über eine Pipe von einem Operator zum nächsten geleitet. Die Daten werden bei jedem Schritt gefiltert oder bearbeitet und anschließend in den folgenden Schritt eingespeist.

Es ist wie ein Trichter, wo Sie mit einer ganzen Datentabelle beginnen. Jedes Mal, wenn die Daten einen anderen Operator durchlaufen, werden sie gefiltert, neu angeordnet oder zusammengefasst. Da das Piping von Informationen von einem Operator zu einem anderen sequenziell erfolgt, ist die Reihenfolge der Abfrageoperatoren wichtig und kann sich sowohl auf die Ergebnisse als auch auf die Leistung auswirken. Am Ende des Trichters befindet sich eine raffinierte Ausgabe.

Sehen wir uns eine Beispielabfrage an. Beachten Sie, dass bei KQL die Groß-/Kleinschreibung für alles beachtet werden muss-Tabellennamen, Tabellenspaltennamen, Operatoren, Funktionen usw.

events_all
    | project original_time, user_id
    | where original_time > ago(5m) and user_id contains "user"
    | count

Die Ergebnisse

Anzahl
28

Diese Abfrage hat eine einzelne tabellarische Ausdrucksanweisung. Die Anweisung beginnt mit einem Verweis auf eine Tabelle namens events_all. Diese einfache Anweisung bedeutet wirklich, dass alle Daten für alle Zeit abgerufen werden, ohne Einschränkungen. Obwohl sehr hilfreich, ist es sehr teuer, so dass es mit zusätzlichen Operatoren zu jeder Zeit beschränkt werden muss.

events_all

Die zweite Anweisung besteht darin, den Operator project anzuwenden, um nur die Spalten anzugeben, die für uns von Interesse sind. Im Fall von events_allgibt es mehr als 400 Spalten und wir benötigen nur 2 Spalten, um diese Abfrage auszuführen. Die Einbeziehung der anderen Spalten würde also einen enormen Aufwand ohne Nutzen verursachen. Immer eine Projektanweisung einschließen.

| project original_time, user_id

Die dritte Anweisung wendet die where an, um die Daten in der Projektion durch Angabe einer Liste von Vergleichselementen zu beschränken. Unten geben wir an, dass wir nur Datensätze benötigen, die von Datenquellen in den letzten fünf Minuten generiert wurden UND die user_id die Zeichen "user" enthält.

| where original_time > ago(5m) and user_id contains "user"

Diese Abfrage kann auch geschrieben werden, um die logische Anweisung and über zwei Zeilen aufzubrechen. Dies ist aus Gründen der Übersichtlichkeit nützlich und entspricht der Stärke der hoch iterativen Natur von KQL. Ein Aspekt bei der Nutzung mehrerer where -Klauseln ist eine implizite and -Anweisung. Diese beiden Beispiele für where sind identisch.

| where original_time > ago(5m) 
| where user_id contains "user"

Die letzte Anweisung wendet die Anzahlan. Dies übernimmt alle übereinstimmenden Datensätze aus der WHERE-Klausel und führt eine einfache Aggregation durch. Die Ausgabe ist eine Tabelle mit einem einzelnen langen Wert.

| count

Anzahl
28