Condividi tramite


Join tra cluster

Si applica a: ✅Microsoft Fabric✅Azure Esplora dati Azure MonitorMicrosoft Sentinel

Un join tra cluster comporta l'aggiunta di dati da set di dati che risiedono in cluster diversi.

In un join tra cluster, la query può essere eseguita in tre posizioni possibili, ognuna con una designazione specifica per riferimento in questo documento:

  • Cluster locale: cluster a cui viene inviata la richiesta, noto anche come cluster che ospita il database nel contesto.
  • Cluster sinistro: il cluster che ospita i dati sul lato sinistro dell'operazione di join.
  • Cluster destro: il cluster che ospita i dati sul lato destro dell'operazione di join.

Il cluster che esegue la query recupera i dati dall'altro cluster.

Nota

Se i dati sul lato sinistro e destro di un'operazione di join sono ospitati nello stesso cluster, non viene considerato un join tra cluster, anche se i dati sono ospitati all'esterno del cluster locale.

Sintassi

[ cluster(ClusterName).database(DatabaseName).]LeftTable | ...
|join [ hint.remote=Strategia ](
  [ cluster(ClusterName).database(DatabaseName).]RightTable | ...
) in condizioni

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
LeftTable string ✔️ Tabella sinistra o espressione tabulare le cui righe devono essere unite. Indicata come $left.
Strategia string Determina il cluster in cui eseguire il join. I valori supportati sono: left, right, locale auto. Per altre informazioni, vedere Strategie.
ClusterName string Se i dati per il join si trovano all'esterno del cluster locale, usare la funzione cluster() per specificare il cluster.
DatabaseName string Se i dati per il join si trovano all'esterno del contesto del database locale, utilizzare la funzione database() per specificare il database.
RightTable string ✔️ Tabella destra o espressione tabulare le cui righe devono essere unite. Indicata come $right.
Condizioni string ✔️ Determina la corrispondenza delle righe di LeftTable con le righe di RightTable. Se le colonne che si desidera associare hanno lo stesso nome in entrambe le tabelle, usare la sintassi ON ColumnName. In caso contrario, usare la sintassi ON $left.LeftColumn $right.==RightColumn. Per specificare più condizioni, è possibile usare la parola chiave "and" o separarle con virgole. Se si usano virgole, le condizioni vengono valutate usando l'operatore logico "and".

Strategie

L'elenco seguente illustra i valori supportati per il parametro Strategy :

  • left: eseguire join nel cluster della tabella a sinistra o nel cluster a sinistra.
  • right: eseguire join nel cluster della tabella corretta o nel cluster corretto.
  • local: eseguire join nel cluster del cluster corrente o nel cluster locale.
  • auto: (Impostazione predefinita) Kusto prende la decisione di comunicazione remota.

Nota

L'hint di comunicazione remota di join viene ignorato se la strategia con hint non è applicabile all'operazione di join.

Funzionamento della strategia automatica

Per impostazione predefinita, la auto strategia determina dove deve essere eseguito il join tra cluster in base alle regole seguenti:

  • Se una delle tabelle è ospitata nel cluster locale, il join viene eseguito nel cluster locale.
  • Se entrambe le tabelle sono ospitate all'esterno del cluster locale, il join viene eseguito nel cluster a destra.

Vedi gli esempi seguenti:

// 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

Con la auto strategia , "Esempio 1" verrebbe eseguito nel cluster locale. In "Esempio 2", supponendo che nessuno dei due cluster sia il cluster locale, il join verrà eseguito nel cluster a destra.

Considerazioni sulle prestazioni

Per ottenere prestazioni ottimali, è consigliabile eseguire la query nel cluster contenente la tabella più grande.

Si considerino di nuovo gli esempi seguenti:

// 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

"Esempio 1" è impostato per l'esecuzione nel cluster locale, ma se il set di dati prodotto da T | ... è minore di uno prodotto da cluster("B").database("DB").T2 | ... , sarebbe più efficiente eseguire l'operazione di join nel cluster B, in questo caso il cluster corretto, anziché nel cluster locale.

La query seguente esegue questa operazione usando la right strategia . Con la right strategia, l'operazione di join viene eseguita nel cluster a destra, anche se la tabella a sinistra si trova nel cluster locale.

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1