Använda KQL effektivt
KQL-databaser i eventhouses är optimerade för stora mängder realtidsdata. För att få bästa resultat finns det några bra metoder som du bör tänka på.
Tabeller baserade på dataströmmar i realtid kan bli stora. Om du minimerar data som returneras av en fråga kan du optimera prestanda och förhindra fel på grund av överskridna datagränser.
Filterkolumner
Använd projektnyckelordet för att hämta endast de kolumner du behöver. Följande fråga returnerar till exempel endast fyra datakolumner:
Automotive
| project trip_id, vendor_id, pickup_datetime, fare_amount
Filtrera rader
Använd nyckelordet where för att filtrera de rader som returneras baserat på specifika villkor. Följande fråga returnerar till exempel endast data för resor som inträffat under den aktuella månaden:
Automotive
| where getmonth(pickup_datetime) == getmonth(now())
and getyear(pickup_datetime) == getyear(now())
| project trip_id, vendor_id, pickup_datetime, fare_amount
Observera användningen av getmonth
funktionerna och getyear
i det här exemplet. Med tanke på att realtidsdata vanligtvis omfattar ett tidsbaserat element (tidsbaserat) ger KQL starkt stöd för filtrering baserat på tid. Följande fråga använder till exempel funktionen ago för att begränsa resultatet till endast de händelser som inträffat under de senaste 30 minuterna.
Automotive
| where pickup_datetime > ago(30min)
| project trip_id, vendor_id, pickup_datetime, fare_amount
När data ständigt läses in från en strömmande källa (till exempel av en händelseström) kan du använda funktionen ingestion_time för att filtrera baserat på när data lästes in i tabellen, även om data inte innehåller ett tidsbaserat värde att filtrera på. Följande fråga hämtar till exempel de händelser som har lästs in i tabellen under den senaste timmen.
Automotive
| where ingestion_time() > ago(1h)
| project trip_id, vendor_id, pickup_datetime, fare_amount
Sammanfatta data
Ibland behöver du inte hämta data på den enskilda händelsenivån. I stället kan du sammanfatta data som hjälper dig att analysera mönster – ofta baserat på tidsintervall.
Följande fråga hämtar till exempel det genomsnittliga priset som samlas in av varje taxileverantör varje timme i de händelser som matats in under den senaste dagen.
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