Join tra cluster

Un join tra cluster prevede 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 a sinistra e a destra 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 DatabaseName).database().]LeftTable| ...
|join [ hint.remote=Strategia ] (
  [ cluster(ClusterName DatabaseName).database().]RightTable| ...
)sulle condizioni

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria 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, usare 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 da LeftTable con righe da RightTable. Se le colonne corrispondenti hanno lo stesso nome in entrambe le tabelle, usare la sintassi ONColumnName. In caso contrario, usare la sintassi ON $left.LeftColumn RightColumn==$right.. 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 "e".

Strategie

Nell'elenco seguente vengono illustrati i valori supportati per il parametro Strategia :

  • left: eseguire join nel cluster della tabella sinistra o del cluster sinistro.
  • right: eseguire l'join nel cluster della tabella a destra o nel cluster destro.
  • local: eseguire l'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 join viene ignorato se la strategia di hint non è applicabile all'operazione di join.

Funzionamento della strategia automatica

Per impostazione predefinita, la auto strategia determina la posizione in cui è necessario eseguire 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 destro.

Considera gli esempi che seguono:

// 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" verrà eseguito nel cluster locale. In "Esempio 2", presupponendo che nessuno dei cluster sia il cluster locale, il join verrà eseguito nel cluster destro.

Considerazioni sulle prestazioni

Per 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 | ... allora sarebbe più efficiente eseguire l'operazione di join nel Bcluster , 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 destro, anche se la tabella sinistra si trova nel cluster locale.

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

Questa funzionalità non è supportata in Monitoraggio di Azure