2014-07-08 16 views
7

Per il join esterno hive, se una chiave di collegamento non esiste in una tabella, hive inserisce NULL. È possibile usare un altro valore per questo? Per esempio:Hive outer join: come modificare il valore NULL predefinito

Tabella 1:

user_id, name, age 
1  Bob 23 
2  Jim 43 

Table2:

user_id, txn_amt,  date 
1   20.00  2013-12-10 
1   10.00  2014-07-01 

Se faccio un LEFT OUTER JOIN su user_id:

INSERT INTO TABLE user_txn 
SELECT 
    Table1.user_id, 
    Table1.name, 
    Table2.txn_amt, 
    Table2.date 
FROM 
    Table2 
LEFT OUTER JOIN 
Table1 
ON 
Table1.user_id = Table2.user_id; 

voglio l'uscita sia in questo modo:

user_id, name, tnx_amt, date 
1   Bob  20.00  2013-12-10 
1   Bob  10.00  2014-07-01 
2   Jim  0.00  2099-12-31 

Nota le colonne txn_amt e date per Jim. C'è un modo in hive per definire valori predefiniti come questo?

risposta

10

È possibile utilizzare COALESCE per questo, invece di solo Table2.txn_amt

COALESCE(Table2.txn_amt, 0.0) 

Quello che fa è restituisce il primo valore che non è nullo. Quindi, se txn_amt è nullo, andrà al secondo valore nell'elenco. 0.0 non è mai nullo, quindi verrà scelto. Se txn_amt ha un valore, restituirà quel valore.

+0

Grazie mille! –

+1

C'è anche la funzione nvl che restituisce un valore predefinito specificato se il valore è NULL. –