2017-10-17 24 views
0

問題是:我有這個查找表,我用這個查找表作爲字典來創建一個「翻譯」特定代碼列含義的新列。HiveQL - 如何解決沒有出現在字典中的元素

比方說:

表1:

ID Code 
01 A 
02 B 
03 C 

Lookup_table(字典):

Code Meaning 
A  Alice 
B  Bob 
C  Charlie 

我可以很容易地做出了一個連接以創建一個新表(表2)與新列'含義'加入它:

表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作爲答案)是否有辦法獲得意義上的'別人'的東西來回答這種情況?

謝謝!

回答

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

+1

謝謝!它工作正常。我正在使用輔助表的解決方法,但是你的解決方案更加優雅。好! – MiguelFCerdan