Hive:如果string为NULL,translate函数如何工作?

时间:2012-06-28 05:01:03

标签: sql transform hive

我正在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);

1 个答案:

答案 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的情况。