Scrivere query con KQL

Completato

Per eseguire query sui dati da una tabella in un database KQL, è possibile usare il Linguaggio di query Kusto (KQL), usato per scrivere query in Esplora dati di Azure, Log Analytics di Monitoraggio di Azure, Azure Sentinel e Microsoft Fabric. KQL è una richiesta di sola lettura per l'elaborazione di dati e la restituzione di risultati. Le query KQL vengono eseguite da una o più istruzioni di query.

Un'istruzione query è costituita da un nome di tabella seguito da uno o più operatori che take, filter, transform, aggregate o join i dati. Ad esempio:

Le query KQL vengono create usando operatori relazionali per filtrare e trasformare i dati usando una sintassi simile a SQL. Tuttavia, la sintassi KQL include estensioni che consentono la corrispondenza avanzata del testo e dei modelli, l'analisi statistica, le proiezioni di serie temporali e gli algoritmi geo-spaziali e di Machine Learning.

Creare e caricare tabelle in KQL

Nella maggior parte dei casi si creano tabelle e si definisce l'origine usando gli strumenti grafici in Microsoft Fabric. È tuttavia possibile usare istruzioni KQL per creare e caricare tabelle.

Per creare una tabella e inserire dati in essa, è possibile usare il comando .create table, che crea una nuova tabella vuota con uno schema specificato. È necessario specificare il nome della tabella, i nomi di colonna e i relativi tipi di dati e, facoltativamente, alcune proprietà, ad esempio docstring o folder. Ad esempio:

 .create table sales (
     SalesOrderNumber: string,
     SalesOrderLineItem: int,
     OrderDate: datetime,
     CustomerName: string,
     EmailAddress: string,
     Item: string,
     Quantity: int,
     UnitPrice: real,
     TaxAmount: real)

Questo comando crea una tabella denominata sales con 9 colonne di tipi di dati diversi.

È possibile inserire dati in una tabella in più modi, incluso il comando ingest into, come illustrato in questo esempio:

 .ingest into table sales 'https://<StorageAccountName>.blob.core.windows.net/container/<TableName>.csv' 
 with (ignoreFirstRecord = true)

Recuperare dati da una tabella

Una query KQL di base è costituita dalla selezione dei dati da una tabella e dall'applicazione di filtri e trasformazioni ai dati. Nell'esempio seguente verrà eseguita una query su tutti i dati della tabella sales.

sales

L'output di questa query è simile all'esempio seguente:

SalesOrderNumber SalesOrderLineItem DataOrdine CustomerName EmailAddress Articolo Quantità UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699,0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43697 1 2019-07-01T00:00:00Z Cole Watson cole1@adventure-works.com Road-150 Red 62 1 3578.27 286.2616
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

L'output della query può quindi essere ulteriormente analizzato tramite strumenti di visualizzazione oppure integrato con altri programmi per creare dashboard personalizzati e flussi di lavoro automatizzati.

Nell'esempio successivo vengono restituite cinque righe dalla tabella vendite nel database KQL usando l'istruzione take, che rappresenta un modo semplice e rapido per visualizzare un piccolo esempio di record durante l'esplorazione dei dati.

sales
| take 5

Questa volta, i risultati includono cinque righe:

SalesOrderNumber SalesOrderLineItem DataOrdine CustomerName EmailAddress Articolo Quantità UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43700 1 2019-07-01T00:00:00Z Ruben Prasad ruben10@adventure-works.com Road-650 Black 62 1 699,0982 55.9279
SO43703 1 2019-07-01T00:00:00Z Albert Alvarez albert7@adventure-works.com Road-150 Red 62 1 3578.27 286.2616

Filtrare con la clausola where

In KQL where è una clausola utilizzata per filtrare le righe di una tabella in base a una condizione specificata. La clausola where è seguita da un'espressione booleana che restituisce true o false per ogni riga della tabella. Le righe per cui l'espressione restituisce true vengono incluse nel risultato, mentre le righe per cui l'espressione restituisce false vengono escluse.

L'operatore contains viene usato nella clausola where della query per filtrare le righe della tabella sales in base al fatto che la colonna Item contenga o meno la stringa "Mountain-100".

sales
| where Item contains 'Mountain-100'

I risultati includono solo le vendite per gli articoli contenenti "Mountain-100":

SalesOrderNumber SalesOrderLineItem DataOrdine CustomerName EmailAddress Articolo Quantità UnitPrice TaxAmount
SO43701 1 2019-07-01T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43704 1 2019-07-01T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43705 1 2019-07-01T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43699 1 2019-07-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

KQL funziona in modo ottimale quando si vogliono usare i dati delle serie temporali. Ad esempio, per filtrare i dati delle vendite per visualizzare gli ordini che si sono verificati tra due valori datetime. È possibile sfruttare molte funzioni di serie temporali, tra cui now(), che restituisce l'ora corrente. In questo esempio vengono restituiti tutti gli ordini che si sono verificati nell'ultimo giorno (24 ore).

sales
| where OrderDate between (now(-1d) .. now())

I risultati vengono filtrati in modo da includere solo gli ordini entro il periodo di tempo specificato.

SalesOrderNumber SalesOrderLineItem DataOrdine CustomerName EmailAddress Articolo Quantità UnitPrice TaxAmount
SO49171 1 2023-05-01T22:01:00Z Mariah Foster mariah21@adventure-works.com Road-250 Black 48 1 2181.5625 174.525
SO49172 1 2021-05-01T23:55:00Z Brian Howard brian23@adventure-works.com Road-250 Red 44 1 2443,35 195.468
SO49173 1 2021-05-02T01:10:00Z Linda Alvarez linda19@adventure-works.com Mountain-200 Silver 38 1 2071.4196 165.7136
... ... ... ... ... ... ... ... ...

Ordinare i risultati di query

Questa query usa l'operatore sort per recuperare le vendite degli elementi "Mountain-100" ordinati in modo da visualizzare prima le vendite più recenti:

sales
| where Item contains 'Mountain-100'
| sort by OrderDate desc

I risultati saranno simili all'esempio seguente:

SalesOrderNumber SalesOrderLineItem DataOrdine CustomerName EmailAddress Articolo Quantità UnitPrice TaxAmount
SO43699 1 2023-05-01T00:00:00Z Sydney Wright sydney61@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
SO43705 1 2023-04-20T00:00:00Z Curtis Lu curtis9@adventure-works.com Mountain-100 Silver 38 1 3399.99 271.9992
SO43704 1 2023-04-12T00:00:00Z Julio Ruiz julio1@adventure-works.com Mountain-100 Black 48 1 3374.99 269.9992
SO43701 1 2023-03-27T00:00:00Z Christy Zhu christy12@adventure-works.com Mountain-100 Silver 44 1 3399.99 271.9992
... ... ... ... ... ... ... ... ...

Riepilogare e aggregare

È possibile usare l'operatore summarize per raggruppare i dati in base a una colonna e creare una nuova colonna con un'aggregazione per il gruppo. Ad esempio, la query seguente restituisce la quantità totale di ogni articolo venduto.

sales
| summarize ItemsSold= sum(Quantity) by Item

I risultati includono una colonna basata sulla funzione di aggregazione usata (in questo caso sum())

Articolo ItemsSold
Water Bottle - 30 oz. 2.097
Patch Kit/8 patch 1.621
Mountain Tire Tube 1.581
Road Tire Tube 1.212
... ...

Uso di Copilot per facilitare le query del set di query

Una nuova funzionalità all'interno degli strumenti di intelligence in tempo reale Microsoft è la possibilità di usare Copilot per l'intelligence in tempo reale. Copilot offre la possibilità di scrivere richieste in linguaggio naturale invece di scrivere o dover imparare rapidamente a creare le query KQL.

Quando l'amministratore abilita Copilot, l'opzione corrispondente viene visualizzata nella barra dei menu superiore dei set di query. Quando si pone una domanda sui dati, Copilot genererà il codice KQL per rispondere alla domanda. È possibile creare diverse query all'interno del set di query usando questo approccio senza codice per raccogliere informazioni utili per l'utilizzo da parte degli utenti.

Screenshot dell'approccio senza codice di Copilot con set di query.

Quando sono disponibili query all'interno del set di query, è possibile aggiungerle a un dashboard esistente o creare un nuovo dashboard. A tale scopo, selezionare le query da aggiungere e quindi selezionare Aggiungi al dashboard. In questo modo si ottiene una finestra per eseguire altre azioni.

Screenshot dell'approccio senza codice di Copilot con l'a funzionalità Aggiungi al dashboard.

È anche possibile aggiungere una query del set di query a un report di Power BI evidenziando la query preferita e quindi selezionando Crea report di PowerBI.

Screenshot di Crea report di PowerBI per l'approccio senza codice di Copilot.

Nota

È possibile selezionare una sola query alla volta usando Aggiungi al dashboard o Crea report di PowerBI, ma è possibile aggiungere elementi del dashboard ai dashboard esistenti.