Condividi tramite


Operatore join

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

Consente di unire le righe di due tabelle in modo da formare una nuova tabella, facendo corrispondere i valori delle colonne specificate da ogni tabella.

Linguaggio di query Kusto (KQL) offre molti tipi di join che influiscono su schema e righe nella tabella risultante in modi diversi. Ad esempio, se si usa un inner join, la tabella ha le stesse colonne della tabella a sinistra, più le colonne della tabella a destra. Per assicurare prestazioni migliori, se una tabella è sempre più piccola dell'altra, usarla come lato sinistro dell'operatore join.

L'immagine seguente fornisce una rappresentazione visiva dell'operazione eseguita da ogni join. Il colore dell'ombreggiatura rappresenta le colonne restituite e le aree ombreggiate rappresentano le righe restituite.

Diagramma che mostra i tipi di join per le query.

Sintassi

LeftTable join | [ kind = JoinFlavor ] [ Hints ] (RightTable) on Conditions

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
LeftTable string ✔️ Tabella sinistra o espressione tabulare, talvolta denominata tabella esterna, le cui righe devono essere unite. Indicata come $left.
JoinFlavor string Tipo di join da eseguire: innerunique, inner, leftouter, rightouter, fullouter, leftantirightanti, leftsemi. rightsemi Il valore predefinito è innerunique. Per altre informazioni sui tipi di join, vedere Restituisce.
Hint string Zero o più hint join separati da spazi sotto forma di Valore nome = che controllano il comportamento dell'operazione di corrispondenza di riga e del piano di esecuzione. Per altre informazioni, vedere Hint.
RightTable string ✔️ Tabella destra o espressione tabulare, talvolta denominata tabella interna, 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".

Suggerimento

Per ottenere prestazioni ottimali, se una tabella è sempre più piccola dell'altra, usarla come lato sinistro del join.

Hint

Tasto hint Valori Descrizione
hint.remote auto, left, localright Vedere Join tra cluster
hint.strategy=broadcast Specifica il modo in cui condividere il carico di query sui nodi del cluster. Vedere broadcast join
hint.shufflekey=<key> La shufflekey query condivide il carico delle query sui nodi del cluster, usando una chiave per partizionare i dati. Vedere query shuffle
hint.strategy=shuffle La shuffle query di strategia condivide il carico di query sui nodi del cluster, in cui ogni nodo elabora una partizione dei dati. Vedere query shuffle
Nome Valori Descrizione
hint.remote auto, left, localright
hint.strategy=broadcast Specifica il modo in cui condividere il carico di query sui nodi del cluster. Vedere broadcast join
hint.shufflekey=<key> La shufflekey query condivide il carico delle query sui nodi del cluster, usando una chiave per partizionare i dati. Vedere query shuffle
hint.strategy=shuffle La shuffle query di strategia condivide il carico di query sui nodi del cluster, in cui ogni nodo elabora una partizione dei dati. Vedere query shuffle

Nota

Gli hint di join non modificano la semantica di join ma possono influire sulle prestazioni.

Valori restituiti

Lo schema restituito e le righe dipendono dal sapore di join. Il tipo di join viene specificato con la parola chiave kind . La tabella seguente illustra le versioni di join supportate. Per visualizzare esempi per un sapore di join specifico, selezionare il collegamento nella colonna Join flavor .To see examples for a specific join flavor column.

Tipo di join Valori restituiti Illustrazione
innerunique (impostazione predefinita) Inner join con deduplicazione del lato sinistro
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti
Righe: tutte le righe deduplicate della tabella sinistra che corrispondono alle righe della tabella destra
inner Inner join standard
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti
Righe: solo le righe corrispondenti di entrambe le tabelle
leftouter Left outer join
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti
Righe: tutti i record della tabella sinistra e solo le righe corrispondenti della tabella destra
rightouter Right outer join
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti
Righe: tutti i record della tabella destra e solo le righe corrispondenti della tabella sinistra
fullouter Full outer join
Schema: tutte le colonne di entrambe le tabelle, incluse le chiavi corrispondenti
Righe: tutti i record di entrambe le tabelle con celle non corrispondenti popolate con valori Null
leftsemi Semi join di sinistra
Schema: tutte le colonne della tabella sinistra
Righe: tutti i record della tabella sinistra che corrispondono ai record della tabella destra
leftanti, anti, leftantisemi Variante anti join e semi join di sinistra
Schema: tutte le colonne della tabella sinistra
Righe: tutti i record della tabella sinistra che non corrispondono ai record della tabella destra
rightsemi Semi join di destra
Schema: tutte le colonne della tabella destra
Righe: tutti i record della tabella destra che corrispondono ai record della tabella sinistra
rightanti, rightantisemi Variante anti join e semi join di destra
Schema: tutte le colonne della tabella destra
Righe: tutti i record della tabella destra che non corrispondono ai record della tabella sinistra

Cross join

KQL non fornisce un tipo di cross join. Tuttavia, è possibile ottenere un effetto cross join usando un approccio di chiave segnaposto.

Nell'esempio seguente viene aggiunta una chiave segnaposto a entrambe le tabelle e quindi usata per l'operazione di inner join, ottenendo in modo efficace un comportamento simile al cross join:

X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder