HiveQL - 如何处理未出现在字典

时间:2017-10-17 17:21:14

标签: hiveql

问题是:我已经找到了这个查找表,我将其用作字典来创建一个新的列,并将其翻译成“#”。某列代码的含义。

让我们说:

表1:

ID    Code
01    A
02    B
03    C

Lookup_table(字典):

Code   Meaning
A      Alice
B      Bob
C      Charlie

我可以轻松地创建一个JOIN来创建一个新表(Table2),其中包含新列'含义'添加到它:

表2:

CREATE TABLE Table2 AS SELECT T1.ID, T1.Code, LKP.Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);

但是:如果新代码出现在表1中该怎么办(例如(" 04"," D"))并且Lookup_table中没有翻译? (假设你想避免使用NULL作为答案)有没有办法获得类似“其他人”的东西。在意义上回答这种情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用COALESCE()来实现这一目标。 COALESCE()接受两个参数,同时选择不是NULL的第一个参数。

您可以按如下方式修改查询:

CREATE TABLE Table2 AS 
SELECT 
T1.ID AS ID, 
T1.Code AS Code, 
COALESCE(LKP.Meaning,'others') AS Meaning
FROM Table1 AS T1
LEFT OUTER JOIN Lookup_table AS LKP
ON (T1.Code = LKP.Code);

在您的情况下,这意味着将LKP.Meaning作为第一个参数。如果此值为NULL,则会显示'others'

另请参阅Hive Documentation