2014-12-20 14 views
5

Un problema che ho riscontrato un paio di volte: ho una tabella, table1, in db1. Ho table2 in db2. Come posso unirmi tra i due?Come faccio a unire due tabelle che si trovano in diversi database, in Hive?

La cosa più ovvia da fare è qualcosa di simile:

SELECT * 
FROM db1.table1 INNER JOIN db2.table2 
ON db1.table1.field1 = db2.table2.field2; 

Hive non piace questo, tuttavia; inizia a trattare "table1" e "table2" come se fossero nomi di colonne, "db1" e "db2" come nomi di tabelle e si lamentano quando non esistono. Come posso unirmi tra due tabelle in diversi database?

risposta

10

I join tra tabelle in database diversi, in Hive, richiedono uniformemente un alias da impostare per ciascuna coppia {db, table}. Quindi, invece della sintassi fornita nella domanda, è necessario utilizzare:

SELECT * 
FROM db1.table1 alias1 INNER JOIN db2.table2 alias2 
ON alias1.field1 = alias2.field2; 

Questo funziona. Certo, è importante ricordare che se stai chiedendo particolari campi nell'istruzione SELECT, gli alias si applicano anche lì. Quindi:

SELECT db1.table1.field1, db2.table2.field2 

diventa:

SELECT alias1.field1, alias2.field2 
Problemi correlati