Combinazione di tabelle con Join e Keep | Guida di Qlik Cloud
Vai al contenuto principale Passa a contenuto complementare

Combinazione di tabelle con Join e Keep

L'operazione di unione utilizza due tabelle e le unisce in una. I record della tabella risultante sono combinazioni dei record presenti nelle tabelle originali, in modo che i due record che contribuiscono a qualsiasi combinazione data nella tabella risultante presentino un valore comune per uno o più campi altrettanto comuni, formando quella che può essere definita un'unione naturale. In Qlik Sense le unioni possono essere eseguite nello script, producendo tabelle logiche.

È possibile unire le tabelle già presenti nello script. La logica di Qlik Sense non vede quindi le tabelle separate, ma il risultato dell'unione, ossia una sola tabella interna. In alcune circostanze, ciò si rivela necessario, anche se può presentare svantaggi:

  • Le tabelle caricate diventano spesso più grandi, rallentando Qlik Sense.
  • Alcune informazioni potrebbero andare perse: la frequenza (numero di record) all'interno della tabella originale potrebbe non essere più disponibile.

La funzionalità Keep, che ha l'effetto di ridurre una o entrambe le due tabelle all'intersezione dei dati della tabella prima della loro memorizzazione in Qlik Sense, è stata progettata per ridurre il numero dei casi in cui è necessario utilizzare unioni esplicite.

Nota informaticaIn questa documentazione il termine unione si riferisce di solito alle unioni precedenti alla creazione delle tabelle interne. Anche l'associazione, effettuata dopo la creazione delle tabelle interne, è tuttavia essenzialmente un'unione.

Join all'interno di un'istruzione SQL SELECT

Con alcuni driver ODBC è possibile effettuare un join all'interno dell'istruzione SELECT. Questo è quasi equivalente a effettuare un join utilizzando il prefisso Join.

Tuttavia, la maggior parte dei driver ODBC non è in grado di effettuare un outer join completo (bidirezionale). Sono in grado di effettuare solo un outer join sinistro o destro. Un outer join sinistro (destro) include solo le combinazioni in cui la chiave di join esiste nella tabella di sinistra (destra). Un outer join completo include qualsiasi combinazione. Qlik Sense effettua automaticamente un outer join completo.

Inoltre, effettuare join nelle istruzioni SELECT è molto più complicato che effettuare join in Qlik Sense.

SELECT DISTINCTROW

[Order Details].ProductID, [Order Details].

UnitPrice, Orders.OrderID, Orders.OrderDate, Orders.CustomerID

FROM Orders

RIGHT JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID;

Questa istruzione SELECT unisce una tabella contenente ordini a un'azienda fittizia, con una tabella contenente i dettagli dell'ordine. Si tratta di un outer join destro, il che significa che tutti i record di OrderDetails sono inclusi, anche quelli con un OrderID che non esiste nella tabella Orders. Gli ordini che esistono in Orders ma non in OrderDetails non sono tuttavia inclusi.

Join

Il modo più semplice per effettuare un join è con il prefisso Join nello script, che unisce la tabella interna con un'altra tabella denominata o con l'ultima tabella creata in precedenza. Il join sarà un outer join, creando tutte le possibili combinazioni di valori dalle due tabelle.

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

La tabella interna risultante ha i campi a, b, c e d. Il numero di record differisce a seconda dei valori del campo delle due tabelle.

Nota informaticaI nomi dei campi su cui effettuare il join devono essere esattamente gli stessi. Il numero di campi su cui effettuare il join è arbitrario. Di solito le tabelle dovrebbero avere uno o pochi campi in comune. Nessun campo in comune produrrà il prodotto cartesiano delle tabelle. È anche possibile avere tutti i campi in comune, ma di solito non ha senso. A meno che non venga specificato il nome di una tabella caricata in precedenza nell'istruzione Join, il prefisso Join utilizza l'ultima tabella creata in precedenza. L'ordine delle due istruzioni non è quindi arbitrario.

Per ulteriori informazioni, vedere Join.

Keep

Il prefisso esplicito Join nello script di caricamento dei dati esegue un join completo delle due tabelle. Il risultato è una singola tabella. In molti casi tali join produrranno tabelle molto grandi. Una delle principali funzionalità di Qlik Sense è la sua capacità di creare associazioni tra tabelle invece di unirle, il che riduce lo spazio in memoria, aumenta la velocità e offre un'enorme flessibilità. La funzionalità keep è stata progettata per ridurre il numero di casi in cui è necessario utilizzare join espliciti.

Il prefisso Keep tra due istruzioni LOAD o SELECT ha l'effetto di ridurre una o entrambe le due tabelle all'intersezione dei dati della tabella prima che vengano archiviate in Qlik Sense. Il prefisso Keep deve essere sempre preceduto da una delle parole chiave Inner, Left o Right. La selezione dei record dalle tabelle viene effettuata nello stesso modo di un join corrispondente. Tuttavia, le due tabelle non vengono unite e verranno archiviate in Qlik Sense come due tabelle denominate separatamente.

Per ulteriori informazioni, vedere Keep.

Inner

I prefissi Join e Keep nello script di caricamento dei dati possono essere preceduti dal prefisso Inner.

Se utilizzato prima di Join, specifica che il join tra le due tabelle deve essere un inner join. La tabella risultante contiene solo combinazioni tra le due tabelle con un set di dati completo da entrambi i lati.

Se utilizzato prima di Keep, specifica che le due tabelle devono essere ridotte alla loro intersezione comune prima di essere archiviate in Qlik Sense.

In questi esempi utilizziamo le tabelle di origine Table1 e Table2:

Table 1
A B
1 aa
2 cc
3 ee
Tabella 2
A C
1 xx
4 yy

Inner Join

Innanzitutto, eseguiamo un Inner Join sulle tabelle, ottenendo VTable, che contiene solo una riga, l'unico record esistente in entrambe le tabelle, con i dati combinati da entrambe le tabelle.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Se invece eseguiamo un Inner Keep, si avranno ancora due tabelle. Le due tabelle sono associate tramite il campo comune A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Per ulteriori informazioni, vedere Inner.

Left

I prefissi Join e Keep nello script di caricamento dei dati possono essere preceduti dal prefisso left.

Se utilizzato prima di Join, specifica che il join tra le due tabelle deve essere un left join. La tabella risultante contiene solo combinazioni tra le due tabelle con un set di dati completo dalla prima tabella.

Se utilizzato prima di Keep, specifica che la seconda tabella deve essere ridotta alla sua intersezione comune con la prima tabella prima di essere archiviata in Qlik Sense.

In questi esempi utilizziamo le tabelle di origine Table1 e Table2:

Tabella 1
A B
1 aa
2 cc
3 ee
Tabella 2
A C
1 xx
4 yy

Innanzitutto, eseguiamo un Left Join sulle tabelle, ottenendo VTable, che contiene tutte le righe da Table1, combinate con i campi delle righe corrispondenti in Table2.

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

Se invece eseguiamo un Left Keep, si avranno ancora due tabelle. Le due tabelle sono associate tramite il campo comune A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Per ulteriori informazioni, vedere Left.

Right

I prefissi Join e Keep nello script di caricamento dei dati possono essere preceduti dal prefisso right.

Se utilizzato prima di Join, specifica che il join tra le due tabelle deve essere un right join. La tabella risultante contiene solo combinazioni tra le due tabelle con un set di dati completo dalla seconda tabella.

Se utilizzato prima di Keep, specifica che la prima tabella deve essere ridotta alla sua intersezione comune con la seconda tabella prima di essere archiviata in Qlik Sense.

In questi esempi utilizziamo le tabelle di origine Table1 e Table2:

Tabella 1
A B
1 aa
2 cc
3 ee
Tabella 2
A C
1 xx
4 yy

Innanzitutto, eseguiamo un Right Join sulle tabelle, ottenendo VTable, che contiene tutte le righe da Table2, combinate con i campi delle righe corrispondenti in Table1.

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Se invece eseguiamo un Right Keep, si avranno ancora due tabelle. Le due tabelle sono associate tramite il campo comune A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Per ulteriori informazioni, vedere Right.

Hai trovato utile questa pagina?

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!