2014-07-08 44 views
7

對於hive外連接,如果一個表中不存在加入密鑰,則hive將放NULL。有可能爲此使用其他值嗎?例如:配置單元外連接:如何更改默認空值

表1:

user_id, name, age 
1  Bob 23 
2  Jim 43 

表2:

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

如果我做了LEFT OUTER JOINuser_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; 

我想要的輸出是這樣的:

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的txn_amtdate列。 hive有什麼辦法來定義這樣的默認值?

回答

10

您可以使用COALESCE這一點,而不是僅僅Table2.txn_amt

COALESCE(Table2.txn_amt, 0.0) 

這樣做是返回第一個值不爲空。因此,如果txn_amt爲空,它將轉到列表中的第二個值。 0.0永遠不會爲空,所以它會選擇它。如果txn_amt有一個值,它會返回該值。

+0

非常感謝! –

+1

還有nvl函數返回一個指定的默認值,如果該值爲NULL。 –

相關問題