Hive外连接:如何更改默认的NULL值

Rai*_*eld 9 hadoop hive join

对于hive外连接,如果一个表中不存在连接键,hive则将放入NULL.可以使用另一个值吗?例如:

表格1:

user_id, name, age
1        Bob   23
2        Jim   43
Run Code Online (Sandbox Code Playgroud)

表2:

user_id,   txn_amt,      date
 1          20.00      2013-12-10
 1          10.00      2014-07-01
Run Code Online (Sandbox Code Playgroud)

如果我做一个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;
Run Code Online (Sandbox Code Playgroud)

我想输出是这样的:

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
Run Code Online (Sandbox Code Playgroud)

请注意Jim 的txn_amtdate列.有没有办法hive定义这样的默认值?

Don*_*ner 11

您可以使用COALESCE此而不是单独使用Table2.txn_amt

COALESCE(Table2.txn_amt, 0.0)
Run Code Online (Sandbox Code Playgroud)

这样做会返回非空的第一个值.因此,如果txn_amt为null,它将转到列表中的第二个值.0.0永远不会为空,所以它会选择它.如果txn_amt有一个值,它将返回该值.

  • 还有nvl函数,如果值为NULL,则返回指定的默认值. (2认同)