Compartilhar via


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 associaçã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 em todo este 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 nos lados esquerdo e direito de uma operação de junção estiverem hospedados no mesmo cluster, eles não serão considerados uma associação entre clusters, mesmo que os dados estejam hospedados fora do cluster local.

Sintaxe

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

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 cujas linhas devem ser mescladas. Indicada como $left.
Estratégia string Determina o cluster no qual executar a associaçã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 para a 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 ou expressão tabular direita 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 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".

Estratégias

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

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

Observação

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

Como funciona a estratégia automotiva

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

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

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 estratégia, o auto "Exemplo 1" seria executado no cluster local. No "Exemplo 2", supondo que nenhum cluster seja o cluster local, a junção seria executada no cluster direito.

Considerações sobre o desempenho

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

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 do que um produzido até cluster("B").database("DB").T2 | ... então, seria mais eficiente executar a operação de junção no cluster B, neste caso o cluster direito, 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