Partilhar via


Tutorial: Unir dados de várias tabelas

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A junção de dados de várias tabelas permite uma análise mais abrangente, combinando informações de diferentes fontes e criando novas relações entre pontos de dados. No Kusto Query Language (KQL), os de junção e operadores de de pesquisa são usados para combinar dados entre tabelas.

Neste tutorial, você aprenderá a:

Os exemplos neste tutorial usam a tabela StormEvents, a qual está disponível publicamente no cluster de ajuda. Para explorar com os seus próprios dados, crie o seu próprio cluster gratuito.

Os exemplos neste tutorial usam a tabela StormEvents, que está disponível publicamente no Weather analyticsdados de exemplo.

Pré-requisitos

Para executar as consultas a seguir, você precisa de um ambiente de consulta com acesso aos dados de exemplo. Você pode usar uma das seguintes opções:

  • Uma conta Microsoft ou identidade de utilizador do Microsoft Entra para aceder ao cluster de ajuda do

Use o operador de junção

Há duas tabelas no banco de dados Samples relacionadas a eventos de tempestade. Um chama-se StormEvents e o outro chama-se PopulationData. Nesta seção, você unirá as tabelas para executar análises de dados que não seriam possíveis com uma única tabela.

Entenda os dados

Use o operador take para ver quais dados cada tabela contém.

StormEvents 
| take 5

A tabela a seguir mostra apenas 6 das 22 colunas retornadas.

Horário de Início Hora de Fim EpisodeId ID do Evento Estado Tipo de Evento ...
2007/09/20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 FLÓRIDA Tornado ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 MISSISSIPPI Vento de Tempestade com Trovoada ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 GEÓRGIA Vento de Trovoada ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 ATLÂNTICO SUL Tromba d'água ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 FLÓRIDA Chuva forte ...
PopulationData 
| take 5

Saída

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

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

Junte-se às mesas

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

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 tela do gráfico de colunas mostrando danos materiais per capita por estado.

Se as colunas tiverem nomes diferentes, por exemplo, StormEvents tiver State e PopulationData tiver StateName, especifique a junção da seguinte forma:

StormEvents
| join kind=innerunique PopulationData on $left.State == $right.StateName  

$left é a tabela à esquerda ou no lado externo do operador de junção, neste caso StormEvents. $right é a tabela à direita, ou no lado interior do operador de junção, neste caso PopulationData.

Dica

Há muitos tipos de junções que você pode executar com o operador join. Veja uma lista de combinações de sabores.

Utilizar o operador de pesquisa

O operador de pesquisa otimiza o desempenho das consultas em casos em que uma tabela de factos é enriquecida com dados de uma tabela de dimensão. Estende-se a tabela de factos com valores que são procurados numa tabela de dimensões. Para obter o melhor desempenho, o sistema, por padrão, assume que a tabela esquerda é a tabela de fatos maior e a tabela direita é a tabela de dimensão menor. Isso é exatamente o oposto da suposição que é usada pelo operador join.

No cluster de ajuda, há outro banco de dados chamado ContosoSales que contém dados de vendas. A consulta a seguir usa lookup para mesclar as tabelas SalesFact e Products desse banco 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

Output

NomeDaCategoriaDoProduto Vendas totais
Jogos e Brinquedos 966782
TV e Vídeo 715024
Câmaras e câmaras de vídeo 323003
Computadores 313487
Eletrodomésticos 237508
Áudio 192671
Telemóveis 50342
Música, filmes e audiolivros 33376

Observação

O operador lookup suporta apenas dois tipos de junção: leftouter e inner.

Ingressar em tabelas geradas por consultas

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

Digamos que você queira criar uma lista de estados em que ocorreram eventos de raios e avalanches. Use o operador join para mesclar as linhas de duas tabelas, uma contendo dados sobre eventos relâmpagos e outra contendo dados sobre eventos de avalanche, com base na coluna State.

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

Saída

Estado
OREGÃO
UTAH
WYOMING
WASHINGTON
COLORADO
IDAHO
NEVADA