Effektive Verwendung von KQL

Abgeschlossen

KQL-Datenbanken in Eventhouses sind für große Mengen von Echtzeitdaten optimiert. Um die besten Ergebnisse zu erzielen, gibt es einige bewährte Methoden, die Sie berücksichtigen sollten.

Tabellen, die auf Echtzeitdatenströmen basieren, können groß werden. Die Minimierung der von einer Abfrage zurückgegebenen Datenmenge kann dazu beitragen, die Leistung zu optimieren und Fehler aufgrund überschrittener Datengrenzwerte zu verhindern.

Spalten filtern

Verwenden Sie das Schlüsselwort Projekt, um nur die benötigten Spalten abzurufen. Die folgende Abfrage gibt beispielsweise nur vier Datenspalten zurück:

Automotive
| project trip_id, vendor_id, pickup_datetime, fare_amount

Filterzeilen

Verwenden Sie das Schlüsselwort where, um die zurückgegebenen Zeilen anhand bestimmter Kriterien zu filtern. Die folgende Abfrage gibt beispielsweise nur Daten für Fahrten zurück, die im aktuellen Monat aufgetreten sind:

Automotive
| where getmonth(pickup_datetime) == getmonth(now())
  and getyear(pickup_datetime) == getyear(now())
| project trip_id, vendor_id, pickup_datetime, fare_amount

Beachten Sie die Verwendung der Funktionen getmonth und getyear in diesem Beispiel. Da Echtzeitdaten in der Regel ein temporales (zeitbasiertes) Element beinhalten, bietet KQL starke Unterstützung für die Filterung auf Basis der Zeit. In der folgenden Abfrage wird z. B. die Funktion ago verwendet, um die Ergebnisse auf die Ereignisse einzuschränken, die in den letzten 30 Minuten aufgetreten sind.

Automotive
| where pickup_datetime > ago(30min)
| project trip_id, vendor_id, pickup_datetime, fare_amount

Wenn die Daten dauerhaft aus einer Streamingquelle geladen werden (z. B. durch einen Eventstream), können Sie die Funktion ingestion_time verwenden, um nach dem Zeitpunkt zu filtern, zu dem die Daten in die Tabelle geladen wurden, auch wenn die Daten keinen zeitbasierten Wert enthalten, nach dem gefiltert werden soll. Mit der folgenden Abfrage werden beispielsweise die Ereignisse abgerufen, die in der letzten Stunde in die Tabelle geladen wurden.

Automotive
| where ingestion_time() > ago(1h)
| project trip_id, vendor_id, pickup_datetime, fare_amount

Summarize data

Manchmal müssen Sie keine Daten auf der Ebene des einzelnen Ereignisses abrufen. Stattdessen können Sie die Daten zusammenfassen, um Muster zu analysieren. Häufig basiert dies auf Zeitintervallen.

Mit der folgenden Abfrage werden beispielsweise die von jedem Taxianbieter pro Stunde erzielten durchschnittlichen Fahrpreise in den Ereignissen abgerufen, die innerhalb des letzten Tages erfasst wurden.

Automotive
| where ingestion_time() > ago(1d)
| summarize average_fare = avg(fare_amount) by vendor_id, pickup_hour = hourofday(pickup_datetime)
| project pickup_hour, vendor_id, average_fare
| sort by pickup_hour