Tutorial: Associar dados de várias tabelas

A associação de dados de várias tabelas permite uma análise mais abrangente ao combinar informações de diferentes origens e criar novas relações entre pontos de dados. No Linguagem de Pesquisa Kusto (KQL), os operadores de associação e pesquisa são utilizados para combinar dados entre tabelas.

Neste tutorial, irá aprender a:

Os exemplos neste tutorial utilizam o cluster de ajuda publicamente disponível. Para explorar com os seus próprios dados, crie o seu próprio cluster gratuito.

Pré-requisitos

  • Uma conta Microsoft ou Microsoft Entra identidade de utilizador para iniciar sessão no cluster de ajuda

Utilizar o operador de associação

Existem duas tabelas na base de dados Exemplos relacionadas com eventos storm. Um chama-se StormEvents e o outro chama-se PopulationData. Nesta secção, irá associar as tabelas para realizar análises de dados que não seriam possíveis apenas com uma tabela.

Compreender os dados

Utilize o operador take para ver os dados que cada tabela contém.

StormEvents 
| take 5

A tabela seguinte mostra apenas 6 das 22 colunas devolvidas.

StartTime EndTime EpisodeId EventId Estado EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 FLORIDA Tornado ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 MISSISSIPPI Vento trovoada ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 GEÓRGIA Vento trovoada ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 SUL DO ATLÂNTICO Waterspout ...
2007-09-18T20:00:00Z 09-2007-19T18:00:00Z 11074 60904 FLORIDA Chuva Intensa ...
PopulationData 
| take 5

Saída

Estado População
ALABAMA 4918690
ALASCA 727951
ARIZONA 7399410
ARKANSAS 3025880
CALIFÓRNIA 39562900

Ambas as tabelas contêm uma State coluna. A StormEvents tabela tem muitas mais colunas e a PopulationData tem apenas uma outra coluna que contém a população do estado especificado.

Associar as tabelas

Junte-se à PopulationData tabela com StormEvents na coluna comum State para encontrar o total de danos materiais causados por tempestades per capita por estado.

StormEvents
| summarize PropertyDamage = sum(DamageProperty) by State
| join kind=innerunique PopulationData on State
| project State, PropertyDamagePerCapita = PropertyDamage / Population
| sort by PropertyDamagePerCapita

Adicione | render columnchart à consulta para visualizar o resultado.

Captura de ecrã do gráfico de colunas a mostrar os danos de propriedade per capita por estado.

Dica

Existem muitos tipos de associações que pode realizar com o join operador. Veja uma lista de sabores de associação.

Utilizar o operador de pesquisa

O operador de pesquisa otimiza o desempenho das consultas em que uma tabela de factos é enriquecida com dados de uma tabela de dimensões. Expande a tabela de factos com valores que são pesquisados numa tabela de dimensões. Para um melhor desempenho, o sistema, por predefinição, pressupõe que a tabela esquerda é a tabela de factos maior e a tabela direita é a tabela de dimensão mais pequena. Isto é exatamente oposto ao pressuposto que é utilizado pelo join operador.

No cluster de ajuda, existe outra base de dados chamada ContosoSales que contém dados de vendas. A seguinte consulta utiliza lookup para intercalar as SalesFact tabelas e Products a partir desta base de dados para obter o total de vendas por categoria de produto.

SalesFact
| lookup Products on ProductKey
| summarize TotalSales = count() by ProductCategoryName
| order by TotalSales desc

Saída

ProductCategoryName TotalDeVendas
Jogos e Brinquedos 966782
TV and Video 715024
Câmaras e câmaras de vídeo portáteis 323003
Computadores 313487
Eletrodomésticos 237508
Áudio 192671
Telemóveis 50342
Música, Filmes e Audiolivros 33376

Nota

O lookup operador só suporta dois tipos de associação: leftouter e inner.

Associar tabelas geradas por consultas

As associações também podem ser feitas com base nos resultados da consulta da mesma tabela.

Digamos que pretende criar uma lista de estados em que ocorreram eventos de relâmpagos e avalanches. Utilize o operador de associação para intercalar as linhas de duas tabelas ( uma que contém dados sobre eventos relâmpagos e outra que contém dados sobre eventos de avalanches) com base na State coluna.

StormEvents
| where EventType == "Lightning"
| distinct State
| join kind=inner (
    StormEvents 
    | where EventType == "Avalanche"
    | distinct State
    )
    on State
| project State

Saída

Estado
OREGON
UTAH
WYOMING
WASHINGTON
COLORADO
IDAHO
NEVADA