Efektywne używanie języka KQL
Bazy danych KQL w centrach zdarzeń są zoptymalizowane pod kątem dużych ilości danych w czasie rzeczywistym. Aby uzyskać najlepsze wyniki, należy pamiętać o kilku dobrych rozwiązaniach.
Tabele oparte na strumieniach danych w czasie rzeczywistym mogą stać się duże. Minimalizacja danych zwracanych przez zapytanie może pomóc zoptymalizować wydajność i zapobiec błędom spowodowanym przekroczeniem limitów danych.
Kolumny filtru
Użyj słowa kluczowego projektu , aby pobrać tylko potrzebne kolumny. Na przykład następujące zapytanie zwraca tylko cztery kolumny danych:
Automotive
| project trip_id, vendor_id, pickup_datetime, fare_amount
Filtruj wiersze
Użyj słowa kluczowego where , aby filtrować wiersze zwracane na podstawie określonych kryteriów. Na przykład następujące zapytanie zwraca dane tylko dla podróży, które wystąpiły w bieżącym miesiącu:
Automotive
| where getmonth(pickup_datetime) == getmonth(now())
and getyear(pickup_datetime) == getyear(now())
| project trip_id, vendor_id, pickup_datetime, fare_amount
Zwróć uwagę na użycie getmonth
funkcji i getyear
w tym przykładzie. Biorąc pod uwagę, że dane w czasie rzeczywistym zwykle obejmują element czasowy (oparty na czasie), KQL zapewnia silną obsługę filtrowania na podstawie czasu. Na przykład następujące zapytanie używa funkcji ago , aby ograniczyć wyniki tylko do zdarzeń, które wystąpiły w ciągu ostatnich 30 minut.
Automotive
| where pickup_datetime > ago(30min)
| project trip_id, vendor_id, pickup_datetime, fare_amount
Gdy dane są bezterminowo ładowane ze źródła przesyłania strumieniowego (na przykład przez strumień zdarzeń), można użyć funkcji ingestion_time do filtrowania na podstawie czasu załadowania danych do tabeli, nawet jeśli dane nie zawierają wartości czasowej, na podstawie której mają być filtrowane. Na przykład następujące zapytanie pobiera zdarzenia, które zostały załadowane do tabeli w ciągu ostatniej godziny.
Automotive
| where ingestion_time() > ago(1h)
| project trip_id, vendor_id, pickup_datetime, fare_amount
Podsumowywanie danych
Czasami nie trzeba pobierać danych na poziomie poszczególnych zdarzeń. Zamiast tego możesz podsumować dane, aby ułatwić analizowanie wzorców — często na podstawie interwałów czasu.
Na przykład następujące zapytanie pobiera średnią taryfę zbieraną przez każdego dostawcę taksówek co godzinę w zdarzeniach pozyskanych w ciągu ostatniego dnia.
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