Il prefisso join unisce la tabella caricata a una tabella denominata esistente oppure all’ultima tabella di dati creata in precedenza.
L'effetto dell'unione dei dati consiste nell'estendere la tabella dati di destinazione con un set aggiuntivo di campi o attributi, ovvero quelli non ancora presenti nella tabella dati di destinazione. Eventuali nomi di campo comuni tra il set di dati di origine e la tabella dati di destinazione vengono utilizzati per determinare come associare i nuovi record in arrivo. Questa operazione è comunemente definita "natural join". Un'operazione di join Qlik può portare la tabella dati di destinazione risultante ad avere più o meno record rispetto a quelli iniziali, a seconda dell'univocità dell'associazione di join e del tipo di join impiegato.
Tipi di join
Esistono quattro tipi di join:
Left join
Inner join
Outer join
Right join
Esempi di set di risultati da diversi tipi di operazioni di join
Left join
I left join sono il tipo di join più comune. Ad esempio, se si dispone di un set di dati di transazioni e si desidera combinarlo con un set di dati di riferimento, in genere si utilizza un Left Join. Si caricherebbe prima la tabella delle transazioni, quindi si caricherebbe il set di dati di riferimento unendolo tramite un prefisso Left Join alla tabella delle transazioni già caricata. Un Left Join manterrebbe tutte le transazioni così come sono e aggiungerebbe i campi dei dati di riferimento supplementari laddove viene trovata una corrispondenza.
Left join
Inner join
Quando si dispone di due set di dati in cui interessano solo i risultati in cui è presente un'associazione corrispondente, considerare l'utilizzo di un Inner Join. Ciò eliminerà tutti i record sia dai dati di origine caricati che dalla tabella dati di destinazione se non viene trovata alcuna corrispondenza. Di conseguenza, ciò potrebbe lasciare la tabella dati di destinazione con meno record rispetto a prima dell'operazione di join.
Inner join
Outer join (predefinito)
Quando è necessario mantenere sia i record di destinazione che tutti i record in arrivo, utilizzare un Outer Join. Laddove non viene trovata alcuna corrispondenza, ogni set di record viene comunque mantenuto mentre i campi dal lato opposto del join rimarranno non popolati (null).
Se la parola chiave del tipo viene omessa, il tipo di join predefinito è un outer join.
Outer join
Right join
Questo tipo di join mantiene tutti i record che stanno per essere caricati, riducendo al contempo i record nella tabella presa di mira dal join solo a quei record in cui c'è una corrispondenza di associazione nei record in arrivo. Questo è un tipo di join di nicchia che a volte viene utilizzato come mezzo per ridurre una tabella di record pre-caricata a un sottoinsieme richiesto.
Right join
Cross join
Nota informaticaSe non ci sono nomi di campo in comune tra l'origine e la destinazione di un'operazione di join, il join risulterà in un prodotto cartesiano di tutte le righe: questo è chiamato "cross join".
Esempio di set di risultati da un'operazione di "cross join"
Sintassi e argomenti
[inner | outer | left | right ]Join[ (tablename )
]( loadstatement | selectstatement )
Argomenti
Argomento
Descrizione
tablename
La tabella denominata da confrontare con la tabella caricata.
loadstatementoppure selectstatement
L'istruzione LOAD o SELECT per la tabella caricata.
Argomenti correlati
Questi argomenti possono aiutare a lavorare con questa funzione:
Il prefisso di caricamento Keep è simile al prefisso Join, ma non combina i set di dati di origine e di destinazione. Invece, riduce ogni set di dati in base al tipo di operazione adottata (inner, outer, left o right).
Esempi di script di caricamento - Left join
Un left join mantiene tutti i record dalla tabella principale (di destinazione) e aggiunge i dati corrispondenti da una seconda tabella (di origine). Se non c'è corrispondenza nell'origine, il record della tabella principale appare comunque, ma con campi vuoti dalla tabella di origine.
Aggiungere lo script di esempio alla propria applicazione ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna dei risultati a un foglio nella propria applicazione.
Script di caricamento
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Left Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Questo esempio dimostra l'output di Left Join in cui vengono uniti solo i valori presenti nella prima tabella (a sinistra).
Panoramica
Supponiamo di avere un elenco di ordini, ma non tutti gli ordini hanno un record cliente corrispondente.
Script di caricamento
Orders:
Load * inline [
OrderID, CustomerID, Amount
1, 101, 200
2, 102, 150
3, 104, 400
];
Customers:
Left Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Risultati
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte del set di risultati completo organizzato in una tabella:
Anteprima della tabella nel visualizzatore del modello dati
OrderID
CustomerID
Amount
Name
1
101
200
Alice
2
102
150
Bob
3
104
400
-
OrderID 1 e 2 hanno clienti corrispondenti.
OrderID 3 non ha un cliente corrispondente, quindi Name è vuoto.
Panoramica
Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.
Lo script di caricamento contiene:
Un set di dati che rappresenta i record di modifica, che viene caricato in una tabella denominata Changes. Include un campo chiave Status ID.
Un secondo set di dati che rappresenta gli stati di modifica, che viene caricato e combinato con i record di modifica originali unendolo con un prefisso di caricamento Join left.
Questo left join assicura che i record di modifica rimangano intatti aggiungendo attributi di stato laddove viene trovata una corrispondenza nei record di stato in arrivo basata su un comune Status ID.
Script di caricamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Status:
Left Join (Changes)
Load * inline [
Status ID Status Sub Status
1 Open Not Started
2 Open Started
3 Closed Completed
4 Closed Cancelled
5 Closed Obsolete
] (delimiter is '\t');
Risultati
Aprire il Data model viewer e notare la forma del modello dati. È presente solo una tabella denormalizzata. È una combinazione di tutti i record di modifica originali, con gli attributi di stato corrispondenti uniti a ciascun record di modifica.
Modello dati interno risultante
Changes
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Status
Sub Status
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte di questo set di risultati completo organizzato in una tabella:
Anteprima della tabella Changes nel visualizzatore del modello dati
Change ID
Status ID
Scheduled Start Date
Scheduled End Date
Business Impact
Status
Sub Status
10030
4
19/01/2022
23/02/2022
None
Closed
Cancelled
10031
3
20/01/2022
25/03/2022
Low
Closed
Completed
10015
3
04/01/2022
15/02/2022
Low
Closed
Completed
10103
1
02/04/2022
29/05/2022
Medium
Open
Not Started
10116
1
15/04/2022
24/04/2022
None
Open
Not Started
10134
1
03/05/2022
08/07/2022
Low
Open
Not Started
10264
1
10/09/2022
17/10/2022
Medium
Open
Not Started
10040
1
29/01/2022
22/04/2022
None
Open
Not Started
10323
1
08/11/2022
26/11/2022
High
Open
Not Started
10187
2
25/06/2022
24/08/2022
Low
Open
Started
10185
2
23/06/2022
08/09/2022
None
Open
Started
10220
2
28/07/2022
06/09/2022
None
Open
Started
10326
2
11/11/2022
05/12/2022
None
Open
Started
10138
2
07/05/2022
03/08/2022
None
Open
Started
10334
2
19/11/2022
06/02/2023
Low
Open
Started
Poiché la quinta riga nella tabella Status (Status ID: '5', Status: 'Closed', Sub Status: 'Obsolete') non corrisponde a nessuno dei record nella tabella Changes, le informazioni in questa riga non appaiono nel set di risultati sopra.
Tornare all'Editor caricamento dati. Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione: Status.
Aggiungere questa misura:
=Count([Change ID])
Ora è possibile ispezionare il numero di modifiche per stato.
Tabella dei risultati
Status
=Count([Change ID])
Open
12
Closed
3
Esempi di script di caricamento - Inner join
Un inner join mantiene solo i record che esistono in entrambe le tabelle (basato su valori di campo corrispondenti).
Script di caricamento
Aggiungere lo script di esempio alla propria applicazione ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna dei risultati a un foglio nella propria applicazione.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Inner Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Questo esempio dimostra l'output di Inner Join in cui vengono uniti solo i valori presenti sia nella prima tabella (a sinistra) che nella seconda tabella (a destra).
Panoramica
Si dispone di ordini e di un elenco di ordini spediti. Si desiderano solo gli ordini che sono stati spediti.
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte del set di risultati completo organizzato in una tabella:
Anteprima della tabella nel visualizzatore del modello dati
OrderID
Amount
ShipDate
2
150
2022-05-01
3
400
2022-05-02
Appaiono solo OrderID 2 e 3, perché esistono in entrambe le tabelle.
Panoramica
Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.
Lo script di caricamento contiene:
Un set di dati che rappresenta i record di modifica, che viene caricato in una tabella denominata Changes.
Un secondo set di dati che rappresenta i record di modifica provenienti dal sistema di origine JIRA. Questo viene caricato e combinato con i record originali unendolo con un prefisso di caricamento Inner Join.
Questo Inner Join assicura che vengano mantenuti solo i cinque record di modifica che si trovano in entrambi i set di dati.
Script di caricamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
JIRA_changes:
Inner Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10000 JIRA
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
20000 TFS
] (delimiter is '\t');
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
Source System
Change ID
Business Impact
Ora è possibile ispezionare i cinque record risultanti. La tabella risultante da un Inner Join includerà solo i record con informazioni corrispondenti in entrambi i set di dati.
Tabella dei risultati
Source System
Change ID
Business Impact
JIRA
10030
None
JIRA
10134
Low
JIRA
10220
None
JIRA
10323
High
JIRA
10334
Low
Esempi di script di caricamento - Outer join
Un outer join mantiene tutti i record da entrambe le tabelle. Laddove non c'è corrispondenza, i campi vengono lasciati vuoti.
Script di caricamento
Aggiungere lo script di esempio alla propria applicazione ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna dei risultati a un foglio nella propria applicazione.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Outer Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
In questo esempio, le due tabelle, Table1 e Table2, vengono unite in un'unica tabella denominata Table1. In casi come questo, il prefisso outer viene spesso utilizzato per unire diverse tabelle in un'unica tabella per eseguire aggregazioni sui valori di una singola tabella.
Panoramica
Si desidera un elenco completo di tutti i clienti e gli ordini, anche se alcuni clienti non hanno ordini e alcuni ordini non hanno un record cliente.
Script di caricamento
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Outer Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Risultati
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte di questo set di risultati completo organizzato in una tabella:
Anteprima della tabella nel visualizzatore del modello dati
OrderID
CustomerID
Name
1
101
Alice
2
102
Bob
3
104
-
-
103
Carol
OrderID 3 non ha un cliente corrispondente (Name vuoto).
CustomerID 103 (Carol) non ha un ordine corrispondente (OrderID vuoto).
Panoramica
Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.
Lo script di caricamento contiene:
Un set di dati che rappresenta i record di modifica, che viene caricato in una tabella denominata Changes.
Un secondo set di dati che rappresenta i record di modifica provenienti dal sistema di origine JIRA, che viene caricato e combinato con i record originali unendolo con un prefisso di caricamento Outer Join.
Questo assicura che tutti i record di modifica sovrapposti da entrambi i set di dati vengano mantenuti.
Script di caricamento
// 8 Change records
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
] (delimiter is '\t');
// 6 Change records
JIRA_changes:
Outer Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
10597 JIRA
] (delimiter is '\t');
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
Source System
Change ID
Business Impact
Ora è possibile ispezionare i 10 record risultanti.
Tabella dei risultati
Source System
Change ID
Business Impact
JIRA
10030
None
JIRA
10134
Low
JIRA
10220
None
JIRA
10323
-
JIRA
10334
Low
JIRA
10597
-
-
10015
Low
-
10031
Low
-
10040
None
-
10138
None
Esempi di script di caricamento - Right join
Un right join mantiene tutti i record dalla tabella di origine e aggiunge le informazioni corrispondenti dalla tabella di destinazione. Se la tabella di destinazione non ha corrispondenze, i campi da essa provengono vuoti.
Script di caricamento
Aggiungere lo script di esempio alla propria applicazione ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna dei risultati a un foglio nella propria applicazione.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Right Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Questo esempio dimostra l'output di Right Join in cui vengono uniti solo i valori presenti nella seconda tabella (a destra).
Panoramica
La tabella di origine è un elenco di clienti; si desiderano tutti i clienti, più eventuali ordini corrispondenti.
Script di caricamento
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Right Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Risultati
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte di questo set di risultati completo organizzato in una tabella:
Anteprima della tabella nel visualizzatore del modello dati
CustomerID
Name
OrderID
101
Alice
1
102
Bob
2
103
Carol
-
Tutti i clienti appaiono.
Carol non ha ordini (OrderID vuoto).
Panoramica
Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.
Lo script di caricamento contiene:
Un set di dati che rappresenta i record di modifica, che viene caricato in una tabella denominata Changes.
Un secondo set di dati che rappresenta i record di modifica provenienti dal sistema di origine Teamwork. Questo viene caricato e combinato con i record originali unendolo con un prefisso di caricamento Right Join.
Questo assicura che vengano mantenuti solo i record di modifica Teamwork, senza perdere alcun record Teamwork se la tabella di destinazione non ha un Change ID corrispondente.
Script di caricamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Teamwork_changes:
Right Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10040 Teamwork
10015 Teamwork
10103 Teamwork
10031 Teamwork
50231 Teamwork
] (delimiter is '\t');
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
Source System
Change ID
Business Impact
Ora è possibile ispezionare i cinque record risultanti.
Tabella dei risultati
Source System
Change ID
Business Impact
Teamwork
10015
Low
Teamwork
10031
Low
Teamwork
10040
None
Teamwork
10103
Medium
Teamwork
50231
-
Risoluzione dei problemi - Cross join
Panoramica
Se si uniscono due tabelle senza nomi di campo corrispondenti, ogni riga della prima tabella verrà combinata con ogni riga della seconda, producendo potenzialmente un numero enorme di record (un prodotto cartesiano) e portando a associazioni di dati impreviste.
Se si espande la finestra di anteprima nel visualizzatore del modello dati, si vedrà una parte di questo set di risultati completo organizzato in una tabella:
Anteprima della tabella nel visualizzatore del modello dati
A_ID
ValueA
B_ID
ValueB
1
foo
10
baz
1
foo
11
qux
2
bar
10
baz
2
bar
11
qux
Ogni A_ID è accoppiato con ogni B_ID (totale 4 righe).
Nota di suggerimentoVerificare sempre che i nomi dei campi corrispondano come previsto prima di eseguire un join.
Se riscontri problemi con questa pagina o con il suo contenuto – un errore di battitura, un passaggio mancante o un errore tecnico – ti pregiamo di farcelo sapere!