Junção entre clusters
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 , local e 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 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 "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