2012-06-28 64 views
0

我在配置單元中的兩個表上進行左外連接。在表1Hive:如果字符串爲NULL,translate函數如何工作?

table 1 : name1 
table 2 : name2 , class (only two values Y or N) 

名是表2

最終結果表應該有姓名1的超集,類

我的查詢是

select table1.name1 , translate(table2.class,NULL,'N') 
from table1 left outer join table2 
on (name1= name2); 

將這項工作?

我也試過reexp_replace,但它不工作

選擇table1.name1,REGEXP_REPLACE(table2.class,NULL, 'N')從表1左外連接表2 (名稱1 =名2);

回答

1

當我編寫Hive translate UDF時,我想保持與PostGreSQL中的translate UDF相同的行爲。與PostGreSQL類似,如果translate UDF的任何參數都爲NULL,則結果將爲NULL。

這也被表示在蜂房源爲UDF以下行:

if (arguments[0].get() == null || arguments[1].get() == null || arguments[2].get() == null) { 
     return null; 
    } 

完整源可用here

從我的理解你的問題,你想發出'N'名稱存在於table1但不是在table2。如果我這樣做,我會做一些這樣(未經):

SELECT 
    table1.name1, 
    COALESCE(table2.name2, 'N') as name2 
FROM 
    table1 
    LEFT OUTER JOIN 
    table2 
    ON (table1.name1 = table2.name2); 

您可以在Hive UDF wiki page瞭解聚結UDF。

感謝您的問題,我已更新Hive UDF wiki page上的翻譯UDF的說明,以澄清其中一個輸入參數爲NULL的情況。

相關問題