Associação entre clusters

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

Numa associação entre clusters, a consulta pode ser executada em três localizações possíveis, cada uma com uma designação específica para referência ao longo deste documento:

  • Cluster local: o cluster para o qual o pedido é enviado, que também é conhecido como o cluster que aloja a base de dados em contexto.
  • Cluster esquerdo: o cluster que aloja os dados no lado esquerdo da operação de associação.
  • Cluster direito: o cluster que aloja os dados no lado direito da operação de associação.

O cluster que executa a consulta obtém os dados do outro cluster.

Nota

Se os dados no lado esquerdo e direito de uma operação de associação estiverem alojados no mesmo cluster, não são considerados uma associação entre clusters, mesmo que os dados estejam alojados 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 Necessário Descrição
LeftTable string ✔️ A tabela esquerda ou expressão tabular cujas linhas devem ser intercaladas. Indicado como $left.
Estratégia string Determina o cluster no qual deve executar a associação. Os valores suportados são: left, , rightlocale auto. Para obter mais informações, veja Estratégias.
ClusterName string Se os dados da associação residiram fora do cluster local, utilize a função cluster() para especificar o cluster.
DatabaseName string Se os dados da associação residiram fora do contexto da base de dados local, utilize a função database() para especificar a base de dados.
Tabela Direita string ✔️ A tabela ou expressão tabular direita cujas linhas devem ser intercaladas. Indicado como $right.
Condições string ✔️ Determina como as linhas de LeftTable são correspondidas com linhas da Tabela Direita. Se as colunas que pretende corresponder tiverem o mesmo nome em ambas as tabelas, utilize a sintaxe ONColumnName. Caso contrário, utilize a sintaxe ON $left.LeftColumn==$right.RightColumn. Para especificar várias condições, pode utilizar a palavra-chave "e" ou separá-las com vírgulas. Se utilizar vírgulas, as condições são avaliadas com o operador lógico "e".

Estratégias

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

  • left: execute a associação no cluster da tabela esquerda ou no cluster esquerdo.
  • right: execute a associação no cluster da tabela direita ou no cluster direito.
  • local: execute a associação no cluster do cluster atual ou no cluster local.
  • auto: (Predefinição) O Kusto toma a decisão de remo.

Nota

A sugestão de remoting de associação é ignorada se a estratégia sugerida não for aplicável à operação de associação.

Como funciona a estratégia automática

Por predefiniçã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 alojada no cluster local, a associação é efetuada no cluster local.
  • Se ambas as tabelas estiverem alojadas fora do cluster local, a associação é realizada no cluster certo.

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", assumindo que nenhum dos clusters é o cluster local, a associação seria executada no cluster certo.

Considerações de desempenho

Para um desempenho ideal, recomendamos que execute 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

"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 até cluster("B").database("DB").T2 | ... então, seria mais eficiente executar a operação de associação no cluster B, neste caso o cluster certo, em vez de no cluster local.

A seguinte consulta faz isto ao utilizar a right estratégia. Com a right estratégia, a operação de associaçã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

Esta capacidade não é suportada no Azure Monitor