Partilhar via


Junção entre clusters

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

Uma associaçã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 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 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 [ Estratégia hint.remote= ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
) sobre Condições

Saiba mais sobre convenções de sintaxe.

Parâmetros

Designação Tipo Necessário Descrição
LeftTable string ✔️ A tabela esquerda ou expressão tabular cujas linhas devem ser mescladas. Denotado como $left.
Estratégia string Determina o cluster no qual executar a junção. Os valores suportados são: left, right, locale auto. Para obter mais informações, consulte Strategies.
ClusterName string Se os dados para a 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. Denotado como $right.
Condições string ✔️ Determina como as linhas de LeftTable são correspondidas 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 "e" ou separá-las com vírgulas. Se você usar vírgulas, as condições serão avaliadas usando o operador lógico "e".

Estratégias

A lista a seguir explica os valores suportados para o parâmetro Estratégia:

  • left: Execute a junção no cluster da tabela esquerda ou no 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 automática

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

  • Se uma das tabelas estiver hospedada no cluster local, a junção será executada no cluster local. Por exemplo, com a estratégia automática, essa consulta é executada no cluster local:

    T | ... | join (cluster("B").database("DB").T2 | ...) on Col1
    
  • Se ambas as tabelas estiverem hospedadas fora do cluster local, a junção será executada no cluster direito. Por exemplo, supondo que nenhum cluster seja o cluster local, a junção seria executada no cluster direito:

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

Considerações sobre desempenho

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

No exemplo a seguir, 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.

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

Você pode reescrever a consulta para usáhint.remote=right otimizar o desempenho. Desta forma, 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