Compartilhar via


operador join

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Mescle as linhas das duas tabelas para formar uma nova tabela, correspondendo os valores das colunas especificadas de cada tabela.

A KQL (Linguagem de Consulta Kusto) oferece muitos tipos de junções que afetam o esquema e as linhas na tabela resultante de diferentes maneiras. Por exemplo, se você usa uma junção inner, a tabela tem as mesmas colunas que a tabela esquerda mais as colunas da tabela direita. Para ter o melhor desempenho, se uma tabela sempre for menor do que a outra, use-a como o lado esquerdo do operador join.

A imagem a seguir fornece uma representação visual da operação executada por cada junção. A cor do sombreamento representa as colunas retornadas e as áreas sombreadas representam as linhas retornadas.

Diagrama mostrando os tipos de junção de consulta.

Sintaxe

LeftTable | join [ = kind JoinFlavor ] [ Dicas ]( Condições RightTable) on

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
LeftTable string ✔️ A tabela esquerda ou expressão tabular, às vezes chamada de tabela externa, cujas linhas serão mescladas. Indicada como $left.
JoinFlavor string O tipo de junção a ser executada: innerunique, inner, leftouter, rightouter, fullouter, leftanti, rightanti, leftsemi, rightsemi. O padrão é innerunique. Para obter mais informações sobre os tipos de junção, confira Retornos.
Dicas string Zero ou mais dicas de junção separadas por espaço na forma de Valor de Nome = que controlam o comportamento da operação de correspondência de linha e do plano de execução. Para mais informações, confira Dicas.
RightTable string ✔️ A tabela direita ou expressão tabular, às vezes chamada de tabela interna, cujas linhas serão mescladas. Indicada como $right.
Condições string ✔️ Determina como as linhas de LeftTable correspondem com as linhas de RightTable. Se as colunas que você deseja corresponder tiverem o mesmo nome em ambas as tabelas, use a sintaxe ON ColumnName. Caso contrário, use a sintaxe ON $left.LeftColumn $right.==RightColumn. Para especificar várias condições, você pode usar a palavra-chave "and" ou separá-las com vírgulas. Se você usar vírgulas, as condições serão avaliadas usando o operador lógico "and".

Dica

Para ter o melhor desempenho, se uma tabela sempre for menor do que a outra, use-a como o lado esquerdo da junção.

Dicas

Chave de dica Valores Descrição
hint.remote auto, left, local, right Confira Junção entre clusters
hint.strategy=broadcast Especifica como compartilhar a carga de consulta em nós de cluster. Confira a junção de transmissão
hint.shufflekey=<key> A consulta shufflekey compartilha a carga de consulta em nós de cluster usando uma chave para particionar dados. Confira a consulta aleatória
hint.strategy=shuffle A consulta de estratégia shuffle compartilha a carga de consulta em nós de cluster, em que cada nó processará uma partição dos dados. Confira a consulta aleatória
Nome Valores Descrição
hint.remote auto, left, local, right
hint.strategy=broadcast Especifica como compartilhar a carga de consulta em nós de cluster. Confira a junção de transmissão
hint.shufflekey=<key> A consulta shufflekey compartilha a carga de consulta em nós de cluster usando uma chave para particionar dados. Confira a consulta aleatória
hint.strategy=shuffle A consulta de estratégia shuffle compartilha a carga de consulta em nós de cluster, em que cada nó processará uma partição dos dados. Confira a consulta aleatória

Observação

As dicas de junção não alteram a semântica de join, mas podem afetar o desempenho.

Retornos

O esquema de retorno e as linhas dependem do tipo de junção. O tipo de junção é especificado com a palavra-chave kind. A tabela a seguir mostra as variantes de junção compatíveis. Para ver exemplos de uma variante de junção específico, selecione o link na coluna Variante de junção.

Tipo de junção Retornos Ilustração
innerunique (padrão) Junção interna com eliminação de duplicação no lado esquerdo
Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes
Linhas: todas as linhas com eliminação de duplicação da tabela esquerda que correspondem a linhas da tabela direita
inner Junção interna padrão
Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes
Linhas: somente linhas correspondentes das duas tabelas
leftouter Junção externa esquerda
Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes
Linhas: todos os registros da tabela esquerda e apenas linhas correspondentes da tabela direita
rightouter Junção externa direita
Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes
Linhas: todos os registros da tabela direita e apenas linhas correspondentes da tabela esquerda
fullouter Junção externa completa
Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes
Linhas: todos os registros de ambas as tabelas com células não correspondentes preenchidas com nulo
leftsemi Semijunção à esquerda
Esquema: todas as colunas da tabela esquerda
Linhas: todos os registros da tabela esquerda que correspondem aos registros da tabela direita
leftanti, anti, leftantisemi Antijunção esquerda e semivariante
Esquema: todas as colunas da tabela esquerda
Linhas: todos os registros da tabela esquerda que não correspondem aos registros da tabela direita
rightsemi Semijunção à direita
Esquema: todas as colunas da tabela direita
Linhas: todos os registros da tabela direita que correspondem aos registros da tabela esquerda
rightanti, rightantisemi Antijunção direita e semivariante
Esquema: todas as colunas da tabela direita
Linhas: todos os registros da tabela esquerda que não correspondem aos registros da tabela esquerda

Junção cruzada

A KQL não conta com um tipo de junção cruzada. No entanto, você pode obter um efeito de junção cruzada usando uma abordagem de chave de espaço reservado.

No exemplo a seguir, uma chave de espaço reservado é adicionada a ambas as tabelas e, em seguida, usada para a operação de junção interna, obtendo efetivamente um comportamento semelhante à junção cruzada:

X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder