Junção entre clusters

Uma junção entre clusters envolve a junção de dados de conjuntos de dados que residem em clusters diferentes.

Em uma junção entre clusters, a consulta pode ser executada em três locais possíveis, cada um com uma designação específica para referência ao longo deste documento:

  • Cluster local: o cluster para o qual a solicitação é enviada, que também é conhecido como o cluster que hospeda o banco de dados no contexto.
  • Cluster esquerdo: o cluster que hospeda os dados no lado esquerdo da operação de junção.
  • Cluster direito: o cluster que hospeda os dados no lado direito da operação de junção.

O cluster que executa a consulta busca os dados do outro cluster.

Observação

Se os dados no lado esquerdo e direito de uma operação de junção estiverem hospedados no mesmo cluster, eles não serão considerados uma junção entre clusters, mesmo que os dados estejam hospedados fora do cluster local.

Syntax

[ cluster(ClusterName).database(DatabaseName).]LeftTable| ...
|join [ hint.remote=Estratégia ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
) em Condições

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório Descrição
LeftTable string ✔️ A tabela esquerda ou a expressão tabular cujas linhas devem ser mescladas. Indicada como $left.
Estratégia string Determina o cluster no qual executar a junção. Os valores compatíveis são: left, right, local e auto. Para obter mais informações, consulte Estratégias.
ClusterName string Se os dados da junção residirem fora do cluster local, use a função cluster() para especificar o cluster.
DatabaseName string Se os dados da junção residirem fora do contexto do banco de dados local, use a função database() para especificar o banco de dados.
RightTable string ✔️ A tabela à direita ou a expressão tabular cujas linhas devem ser 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 ONColumnName. 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".

Estratégias

A lista a seguir explica os valores com suporte para o parâmetro Strategy :

  • left: execute join no cluster da tabela esquerda ou no cluster esquerdo.
  • right: execute join no cluster da tabela à direita ou no cluster direito.
  • local: execute join no cluster do cluster atual ou cluster local.
  • auto: (Padrão) O Kusto toma a decisão de comunicação remota.

Observação

A dica de comunicação remota de junção será ignorada se a estratégia sugerida não for aplicável à operação de junção.

Como funciona a estratégia automática

Por padrão, a auto estratégia determina onde a junção entre clusters deve ser executada com base nas seguintes regras:

  • Se uma das tabelas estiver hospedada no cluster local, a junção será executada no cluster local.
  • Se ambas as tabelas estiverem hospedadas fora do cluster local, a junção será executada no cluster correto.

Considere os seguintes exemplos:

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

Com a auto estratégia, "Exemplo 1" seria executado no cluster local. Em "Exemplo 2", supondo que nenhum cluster seja o cluster local, a junção será executada no cluster direito.

Considerações sobre o desempenho

Para obter o desempenho ideal, recomendamos executar a consulta no cluster que contém a maior tabela.

Vamos considerar os seguintes exemplos novamente:

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

O "Exemplo 1" é definido para ser executado no cluster local, mas se o conjunto de dados produzido por T | ... for menor que um produzido por cluster("B").database("DB").T2 | ... , será mais eficiente executar a operação de junção no cluster B, nesse caso, o cluster correto, em vez de no cluster local.

A consulta a seguir faz isso usando a right estratégia . Com a right estratégia, a operação de junção é executada no cluster direito, mesmo que a tabela à esquerda esteja no cluster local.

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1

Essa funcionalidade não é compatível com o Azure Monitor