Schreiben von Abfragen mit KQL

Abgeschlossen

Zum Abfragen von Daten aus einer Tabelle in einer KQL-Datenbank können Sie die Kusto-Abfragesprache (KQL) verwenden, die zum Schreiben von Abfragen in Azure Data Explorer, Azure Monitor, Log Analytics, Azure Sentinel und Microsoft Fabric verwendet wird. Eine KQL-Abfrage ist eine schreibgeschützte Anforderung zur Verarbeitung von Daten und zur Rückgabe der Ergebnisse. KQL-Abfragen bestehen aus einer oder mehreren Abfrageanweisungen.

Eine Abfrageanweisung besteht aus einem Tabellennamen, gefolgt von einem oder mehreren Operatoren, die Daten take, filter, transform, aggregate oder join. Beispiel:


sales
| take 10

KQL-Abfragen werden mit relationalen Operatoren erstellt, um Daten mit einer SQL-ähnlichen Syntax zu filtern und zu transformieren. Die KQL-Syntax enthält jedoch Erweiterungen, die erweiterte Text- und Musterabgleiche, statistische Analysen, Zeitreihenprojektionen, räumliche und Machine Learning-Algorithmen ermöglichen.

Erstellen und Laden von Tabellen in KQL

In den meisten Fällen erstellen Sie Tabellen und definieren deren Quelle mithilfe der grafischen Tools in Microsoft Fabric. Sie können jedoch KQL-Anweisungen verwenden, um Tabellen zu erstellen und zu laden.

Um eine Tabelle zu erstellen und Daten darin zu erfassen, können Sie den .create table-Befehl verwenden, der eine neue leere Tabelle mit einem angegebenen Schema erstellt. Sie müssen den Tabellennamen, die Spaltennamen und deren Datentypen sowie optional einige Eigenschaften wie „docstring“ oder „folder“ angeben. Beispiel:

 .create table sales (
     SalesOrderNumber: string,
     SalesOrderLineItem: int,
     OrderDate: datetime,
     CustomerName: string,
     EmailAddress: string,
     Item: string,
     Quantity: int,
     UnitPrice: real,
     TaxAmount: real)

Dieser Befehl erstellt eine Tabelle namens sales mit neun Spalten unterschiedlicher Datentypen.

Sie können Daten in einer Tabelle auf verschiedene Arten erfassen, unter anderem mit dem ingest into-Befehl, wie in diesem Beispiel gezeigt:

 .ingest into table sales 'https://<StorageAccountName>.blob.core.windows.net/container/<TableName>.csv' 
 with (ignoreFirstRecord = true)

Abrufen von Daten aus einer Tabelle

Eine einfache KQL-Abfrage wählt Daten aus einer Tabelle aus und wendet Filter und Transformationen auf die Daten an. Im folgenden Beispiel fragen wir einfach alle Daten aus der sales-Tabelle ab.

sales

Die Ausgabe dieser Abfrage sollte ungefähr wie im folgenden Beispiel aussehen:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Element Quantity (Menge) UnitPrice (Stückpreis) TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699.0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43697 1 2019-07-01T00:00:00Z Cole Watson cole1@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

Die Abfrageausgabe kann dann mithilfe von Visualisierungstools weiter analysiert oder mit anderen Programmen integriert werden, um benutzerdefinierte Dashboards und automatisierte Workflows zu erstellen.

Im nächsten Beispiel werden fünf Zeilen aus der Tabelle „sales“ in der KQL-Datenbank mithilfe der take-Anweisung zurückgegeben. Dies stellt eine einfache und schnelle Möglichkeit dar, eine kleine Stichprobe an Datensätzen beim Durchsuchen von Daten anzuzeigen.

sales
| take 5

Dieses Mal umfassen die Ergebnisse fünf Zeilen:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Element Quantity (Menge) UnitPrice (Stückpreis) TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699.0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616

Filtern mit der where-Klausel

In KQL ist where eine Klausel, die verwendet wird, um die Zeilen einer Tabelle basierend auf einer angegebenen Bedingung zu filtern. Auf die where-Klausel folgt ein boolescher Ausdruck, der zu true oder false für jede Zeile in der Tabelle ausgewertet wird. Zeilen, für die der Ausdruck ausgewertet zu true wird, werden im Ergebnis eingeschlossen, während Zeilen, für die der Ausdruck ausgewertet zu false wird, ausgeschlossen werden.

Der contains-Operator wird in der where-Klausel der Abfrage verwendet, um die Zeilen der Tabelle sales basierend darauf zu filtern, ob die Spalte Item die Zeichenfolge „Mountain-100“ enthält.

sales
| where Item contains 'Mountain-100'

Die Ergebnisse enthalten nur Verkäufe für Artikel, die „Mountain-100“ enthalten:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Element Quantity (Menge) UnitPrice (Stückpreis) TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

KQL funktioniert gut, wenn Sie mit Zeitreihendaten arbeiten möchten. Beispielsweise können Sie die Verkaufsdaten filtern, um Bestellungen anzuzeigen, die zwischen zwei datetime-Werten aufgetreten sind. Sie können viele Zeitreihenfunktionen nutzen, einschließlich von now(), die die aktuelle Zeit zurückgibt. In diesem Beispiel werden alle Bestellungen zurückgegeben, die innerhalb des letzten Tages (24 Stunden) eingegangen sind.

sales
| where OrderDate between (now(-1d) .. now())

Die Ergebnisse werden gefiltert, um nur Bestellungen innerhalb des angegebenen Zeitraums einzuschließen.

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Element Quantity (Menge) UnitPrice (Stückpreis) TaxAmount
SO49171 1 2023-05-01T22:01:00Z Mariah Foster mariah21@adventure-works.com Road-250 Black 48 1 2181.5625 174.525
SO49172 1 2021-05-01T23:55:00Z Brian Howard brian23@adventure-works.com Road-250 Red 44 1 2443.35 195.468
SO49173 1 2021-05-02T01:10:00Z Linda Alvarez linda19@adventure-works.com Mountain-200 Silver 38 1 2071.4196 165.7136
... ... ... ... ... ... ... ... ...

Sortieren von Abfrageergebnissen

In dieser Abfrage wird der sort-Operator verwendet, um die Verkäufe von „Mountain-100“-Elementen abzurufen, die so sortiert sind, dass die letzten Verkäufe zuerst angezeigt werden:

sales
| where Item contains 'Mountain-100'
| sort by OrderDate desc

Das Ergebnis ähnelt dem folgenden Beispiel:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Element Quantity (Menge) UnitPrice (Stückpreis) TaxAmount
SO43699 1 2023-05-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43705 1 2023-04-20T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43704 1 2023-04-12T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43701 1 2023-03-27T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

Zusammenfassen und Aggregieren

Sie können den summarize-Operator verwenden, um Daten nach einer Spalte zu gruppieren und eine neue Spalte mit einer Aggregation für die Gruppe zu erstellen. Die folgende Abfrage gibt beispielsweise die Gesamtmenge jedes verkauften Artikels zurück.

sales
| summarize ItemsSold= sum(Quantity) by Item

Die Ergebnisse enthalten eine Spalte, die auf der verwendeten Aggregationsfunktion basiert (in diesem Fall sum()).

Element ItemsSold
Water Bottle - 30 oz. 2.097
Patch Kit/acht Patches 1,621
Mountain Tire Tube 1,581
Road Tire Tube 1,212
... ...

Verwenden von Copilot zur Unterstützung von Abfrageset-Abfragen

Ein neues Feature innerhalb der Microsoft Real-Time Intelligence-Tools ist die Möglichkeit, Copilot für Real-Time Intelligence zu verwenden. Copilot gibt Ihnen die Möglichkeit, Prompts in natürlicher Sprache zu schreiben, anstatt KQL-Abfragen zu schreiben oder schnell erlernen zu müssen.

Wenn Ihr Admin Copilot aktiviert, sehen Sie die Option in der oberen Menüleiste Ihrer Abfragesets. Wenn Sie eine Frage zu Ihren Daten stellen, generiert Copilot den KQL-Code, um Ihre Frage zu beantworten. Sie können mehrere Abfragen innerhalb des Abfragesets erstellen, um nützliche Informationen für die Benutzerin oder den Benutzer zu sammeln.

Screenshot des Nocode Copilot-Ansatzes mit Abfragesets.

Sobald Sie Abfragen im Abfrageset gespeichert haben, können Sie diese an ein bestehendes Dashboard anheften oder ein neues Dashboard erstellen. Wählen Sie dazu die Abfragen aus, die Sie anheften möchten, und wählen Sie dann die Option An Dashboard anheften. Dadurch erhalten Sie ein Fenster zum Ausführen anderer Aktionen.

Screenshot der nocode Copilot-Funktion zum Anheften an das-Dashboard.

Sie haben auch die Möglichkeit, einem Power BI-Bericht eine Abfrageset-Abfrage hinzuzufügen, indem Sie Ihre bevorzugte Abfrage markieren und dann PowerBI-Bericht erstellen auswählen.

Screenshot des Nocode Copilot-Funktion für das Erstellen eines PowerBI-Berichts.

Hinweis

Sie können nur jeweils eine Abfrage für die Funktion An Dashboard anheften oder PowerBI-Bericht erstellen auswählen, aber Sie können Dashboard-Elemente an bestehende Dashboards anhängen.