2014-07-08 27 views
7

hive dış birleştirmesi, bir tabloda bir katılma anahtarı yoksa, hiveNULL'u koyar. Bunun için başka bir değer kullanmak mümkün mü? Ben yaparsanızHive dış birleştirmesi: varsayılan NULL değeri nasıl değiştirilir

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

bir LEFT OUTER JOINuser_id üzerinde:

Tablo1:

user_id, name, age 
1  Bob 23 
2  Jim 43 

Tablo2 Örneğin

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; 

Ben çıkışı böyle olmasını istiyorum:

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 

Jim için txn_amt ve date sütunlarına dikkat edin. Bu gibi varsayılan değerleri tanımlamak için hive'un herhangi bir yolu var mı?

cevap

10

Sen ne yapar ise boş değil ilk değeri döndürür yerine sadece Table2.txn_amt

COALESCE(Table2.txn_amt, 0.0) 

nedeniyle, bu için COALESCE kullanabilirsiniz. Yani, txn_amt boşsa, listedeki ikinci değere gider. 0.0 asla boş değil, bu yüzden onu seçecek. txn_amt'un içinde bir değeri varsa, bu değeri döndürür.

+0

Çok teşekkür ederim! –

+1

Ayrıca, değer NULL ise, belirli bir varsayılan değeri döndüren nvl işlevi de vardır. –