Kusto ist die Analyse-Engine hinter Microsofts Azure Data Explorer (ADX) und verwandten Diensten wie Azure Monitor, Microsoft Sentinel und Log Analytics. Die zugehörige Abfragesprache heißt KQL (Kusto Query Language) — eine schreibgeschützte, pipe-basierte Sprache, die für große Datenmengen und Echtzeit-Analysen optimiert ist.

Kusto.Cli starten

Das Kommandozeilen-Werkzeug Kusto.Cli verbindet sich mit einem Cluster und arbeitet wahlweise im REPL-Modus (interaktive Eingabe, Ergebnis danach) oder im Execute-Modus für einzelne Abfragen:

Kusto.Cli.exe "https://meincluster.westeurope.kusto.windows.net"
# REPL: Eingabeaufforderung, dann Abfragen eintippen
# Execute: Kusto.Cli.exe "https://cluster" "Abfrage"

KQL-Grundmuster: der Pipe-Operator

KQL arbeitet mit Tabellen und Operatoren, die über den Pipe-Operator | verkettet werden — ähnlich wie Unix-Pipes. Jeder Operator bekommt eine Tabelle hinein und gibt eine neue Tabelle aus:

StormEvents
| where State == "FLORIDA"
| project EventType, DamageProperty
| summarize Summe = sum(DamageProperty) by EventType
| order by Summe desc
| take 10

Die wichtigsten Operatoren

  • where — Zeilen filtern (Vergleiche, contains, has, between, in)
  • project — Spalten auswählen/umbenennen (wie SELECT-Spaltenliste)
  • extend — neue berechnete Spalten hinzufügen
  • summarize ... by — Gruppierung mit Aggregationen (count(), sum(), avg(), dcount(), max())
  • order by / sort by — sortieren
  • take / limit — erste n Zeilen
  • distinct — eindeutige Werte
  • join — Tabellen verbinden (kind=inner/leftouter/fullouter)
  • render timechart — Ergebnis als Zeitreihen-Diagramm ausgeben

Variablen mit let

let definiert benannte Werte, Funktionen oder Teiltabellen und macht Abfragen lesbar und wiederverwendbar:

let fehler = Logs | where Level == "Error";
fehler | summarize Anzahl = count() by App

Management-Befehle

Befehle, die mit einem Punkt beginnen, sind Management-Befehle (Control Commands) — sie verwalten Cluster, Datenbanken und Tabellen:

.show databases
.show tables
.show table T schema
.show cluster policy caching

Für Ad-hoc-Analysen erzeugt datatable eine Tabelle direkt in der Abfrage: datatable (Spalte:string, Wert:int) ["A", 1, "B", 2]. .ingest-Befehle laden Daten; im ADX-Portal übernimmt das meist der Pipeline-Assistent.

Praxis-Tipps

  • KQL ist case-insensitiv bei Operatoren, aber Werte in ==-Vergleichen sind case-sensitiv.
  • where Timestamp > ago(7d) nutzt die integrierte Zeitfunktion ago().
  • Strings in contains sind Teilstring-Suchen; has sucht nach ganzen Wörtern.

Verwandte Grundlagen: SQL-Befehle, InfluxDB-Befehle, ClickHouse-Befehle, TimescaleDB-Befehle, Informix-Befehle.