Usare KQL in modo efficace
I database KQL nelle eventhouse sono ottimizzati per grandi volumi di dati in tempo reale. Per ottenere risultati ottimali, è consigliabile tenere presenti alcune procedure consigliate.
Le tabelle basate su flussi di dati in tempo reale possono diventare di grandi dimensioni. Ridurre al minimo i dati restituiti da una query consente di ottimizzare le prestazioni ed evitare errori dovuti a limiti di dati superati.
Filtrare le colonne
Usare la parola chiave project per recuperare solo le colonne necessarie. Ad esempio, la query seguente restituisce solo quattro colonne di dati:
Automotive
| project trip_id, vendor_id, pickup_datetime, fare_amount
Filtra righe
Usare la parola chiave where per filtrare le righe restituite in base a criteri specifici. Ad esempio, la query seguente restituisce i dati solo per i viaggi che si sono verificati nel mese corrente:
Automotive
| where getmonth(pickup_datetime) == getmonth(now())
and getyear(pickup_datetime) == getyear(now())
| project trip_id, vendor_id, pickup_datetime, fare_amount
Si noti l'uso delle funzioni getmonth
e getyear
in questo esempio. Dato che i dati in tempo reale in genere comportano un elemento temporale (basato sul tempo), KQL offre un supporto sicuro per il filtro in base al tempo. Ad esempio, la query seguente usa la funzione ago per limitare i risultati solo agli eventi che si sono verificati negli ultimi 30 minuti.
Automotive
| where pickup_datetime > ago(30min)
| project trip_id, vendor_id, pickup_datetime, fare_amount
Quando i dati vengono caricati in modo perpetuo da un'origine di streaming,ad esempio da un eventstream, è possibile usare la funzione ingestion_time per filtrare in base al momento in cui i dati sono stati caricati nella tabella, anche se i dati non includono un valore basato sul tempo in base a cui filtrare. Ad esempio, la query seguente recupera gli eventi caricati nella tabella nell'ultima ora.
Automotive
| where ingestion_time() > ago(1h)
| project trip_id, vendor_id, pickup_datetime, fare_amount
Riepilogare i dati
In alcuni casi, non è necessario recuperare i dati a livello di singolo evento. È invece possibile riepilogare i dati per analizzare i modelli, spesso in base agli intervalli di tempo.
Ad esempio, la query seguente recupera la tariffa media raccolta da ogni fornitore di taxi ogni ora negli eventi inseriti nell'ultimo giorno.
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