Escrever consultas com KQL

Concluído

Para consultar os dados de uma tabela em um banco de dados KQL, é possível usar a Linguagem de Consulta Kusto (KQL), que é usada para gravar consultas no Azure Data Explorer, no Log Analytics do Azure Monitor, no Azure Sentinel e no Microsoft Fabric. KQL é uma solicitação somente leitura para processar dados e retornar resultados. As consultas KQL são compostas por uma ou mais instruções de consulta.

Uma instrução de consulta consiste em um nome de tabela seguido por um ou mais operadores que take, filter, transform, aggregate ou join dados. Por exemplo:


sales
| take 10

As consultas KQL são criadas usando operadores relacionais para filtrar e transformar dados usando uma sintaxe semelhante ao SQL. No entanto, a sintaxe KQL inclui extensões que permitem correspondência avançada de textos e padrões, análise estatística, projeções de séries temporais, funções geoespaciais e algoritmos de aprendizado de máquina.

Criar e carregar tabelas em KQL

Na maioria dos casos, você criará tabelas e definirá a origem delas usando as ferramentas gráficas do Microsoft Fabric. No entanto, é possível usar instruções KQL para criar e carregar tabelas.

Para criar uma tabela e inserir dados nela, é possível usar o comando .create table, que cria uma tabela vazia com um esquema especificado. É necessário fornecer o nome da tabela, os nomes das colunas, os tipos de dados e, opcionalmente, algumas propriedades como docstring ou pasta. Por exemplo:

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

Esse comando cria uma tabela chamada vendas com nove colunas de diferentes tipos de dados.

É possível ingerir dados em uma tabela de diversas maneiras, incluindo o comando ingest into, conforme mostrado neste exemplo:

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

Recuperar dados de uma tabela

Uma consulta KQL básica consiste na seleção de dados de uma tabela e na aplicação de filtros e transformações a eles. No exemplo a seguir, você consultará todos os dados da tabela sales.

sales

A saída dessa consulta deve ser semelhante ao seguinte exemplo:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantidade 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
... ... ... ... ... ... ... ... ...

A saída da consulta pode ser analisada detalhadamente usando ferramentas de visualização ou integrada a outros programas para criar painéis personalizados e fluxos de trabalho automatizados.

O próximo exemplo retorna cinco linhas da tabela de vendas no banco de dados KQL usando a instrução take, que é uma maneira simples e rápida de exibir uma pequena amostra de registros ao navegar pelos dados.

sales
| take 5

Desta vez, os resultados incluem cinco linhas:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantidade 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

Filtragem com a cláusula where

Na KQL, where é uma cláusula usada para filtrar as linhas de uma tabela com base em uma condição especificada. A cláusula where é seguida por uma expressão booliana avaliada como true ou false para cada linha da tabela. As linhas para as quais a expressão é avaliada como true são incluídas no resultado, enquanto as linhas para as quais a expressão é avaliada como false são excluídas.

O operador contains é usado na cláusula where da consulta para filtrar as linhas da tabela sales com base na inclusão ou não da cadeia de caracteres "Mountain-100" na coluna Item.

sales
| where Item contains 'Mountain-100'

Os resultados incluem somente as vendas de itens que contêm "Mountain-100":

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantidade 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
... ... ... ... ... ... ... ... ...

O KQL é ideal para quando você quiser trabalhar com dados de séries temporais. Por exemplo, para filtrar os dados de vendas a fim de mostrar os pedidos que ocorreram entre dois valores de datetime. É possível utilizar muitas funções de série temporal, incluindo now(), que retorna a hora atual. Este exemplo retorna todos os pedidos ocorridos no último dia (24 horas).

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

Os resultados são filtrados para incluir somente os pedidos ocorridos no período especificado.

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantidade 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
... ... ... ... ... ... ... ... ...

Classificar os resultados de consulta

Esta consulta usa o operador sort para recuperar as vendas de itens "Mountain-100", classificados de maneira que as vendas mais recentes sejam exibidas primeiro:

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

Os resultados são semelhantes a este exemplo:

SalesOrderNumber SalesOrderLineItem OrderDate CustomerName EmailAddress Item Quantidade 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
... ... ... ... ... ... ... ... ...

Resumir e agregar

É possível usar o operador summarize para agrupar dados por coluna e criar uma coluna com uma agregação para o grupo. Por exemplo, a consulta a seguir retorna a quantidade total de cada item vendido.

sales
| summarize ItemsSold= sum(Quantity) by Item

Os resultados incluem uma coluna baseada na função de agregação usada (neste caso, sum())

Item ItemsSold
Garrafa de Água – 887 ml 2.097
Kit de patches/oito patches 1.621
Mountain Tire Tube 1.581
Tubo de pneu de estrada 1.212
... ...

Usar o Copilot para ajudar nas consultas do conjunto de consultas

Um novo recurso das ferramentas Microsoft Real-Time Intelligence é a capacidade de usar o Copilot for Real-Time Intelligence. O Copilot oferece a capacidade de escrever solicitações em linguagem natural em vez de escrever ou ter que aprender rapidamente consultas KQL.

Quando o administrador habilitar o Copilot, você verá a opção na barra de menu superior dos seus conjuntos de consultas. Quando você fizer uma pergunta sobre seus dados, o Copilot gerará o código KQL para responder à sua pergunta. Você pode criar várias consultas no conjunto de consultas usando essa abordagem sem código para coletar informações úteis para consumo do usuário.

Captura de tela da abordagem Nocode Copilot usando conjuntos de consultas.

Quando tiver consultas no conjunto de consultas, você poderá fixá-las em um painel existente ou criar um novo painel. Para fazer isso, selecione as consultas que quer fixar e selecione Fixar no painel. Isso lhe dará uma janela para executar outras ações.

Captura de tela do recurso de fixação do Nocode Copilot no painel.

Você também pode adicionar uma consulta de conjunto de consultas a um relatório do Power BI, destacando sua consulta preferida e selecionando Construir relatório do PowerBI.

Captura de tela do relatório Nocode Copilot Build Power BI.

Observação

Só é possível selecionar uma consulta por vez usando Fixar no Painel ou o Criar relatório do PowerBI, mas você pode anexar elementos de painel a painéis existentes.