Compartilhar via


Junção entre clusters

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

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 em todo este documento:

  • Cluster local: o cluster para o qual a solicitação é enviada, que também é conhecido como 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 junção entre clusters, mesmo que os dados estejam hospedados fora do cluster local.

Sintaxe

cluster([ Nome_do_).database(Cluster Nome_do_Banco]).LeftTable ... |
|join hint.remote=[ Estratégia ](
  [ Nome_do_).database(Cluster Nome_do_).Banco de Dados]RightTable | ... cluster(
) 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 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 correta ou 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 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 cluster esquerdo.
  • right: Execute a junção no cluster da tabela direita ou do cluster direito.
  • local: Execute a junçã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 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 automotiva

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 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 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" está definido para ser executado no cluster local, mas se o conjunto de dados produzido por T | ... for menor do que um produzido por cluster("B").database("DB").T2 | ... então, seria mais eficiente executar a operação de junção no cluster B, neste caso, o cluster certo, 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