Effektive Verwendung von KQL
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