我正在hive中的两个表上进行左外连接。
table 1 : name1
table 2 : name2 , class ( only two values Y or N)
table1中的名称是表2的超集。
最终结果表应该具有name1,类
我的查询是
select table1.name1 , translate(table2.class,NULL,'N')
from table1 left outer join table2
on (name1= name2);
这会有用吗?
我也尝试过reexp_replace但它不起作用
从table1左外连接table2中选择table1.name1,regexp_replace(table2.class,NULL,'N') on(name1 = name2);
答案 0 :(得分:1)
当我编写Hive翻译UDF时,我想保持行为与PostGreSQL中的翻译UDF相同。与PostGreSQL类似,如果translate UDF的任何参数为NULL,则结果为NULL。
这也在以下UDF的Hive源代码中表示:
if (arguments[0].get() == null || arguments[1].get() == null || arguments[2].get() == null) {
return null;
}
完整来源here。
根据我对你的问题的理解,你想在table1中存在名称但在table2中不存在时发出'N'。如果我这样做,我会做(未经测试)的事情:
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的情况。