繁体   English   中英

蜂巢:如果字符串为NULL,转换功能如何工作?

[英]Hive : How does translate function works if string is NULL?

我在蜂巢的两个桌子上做左外连接。

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

表1中的名称是表2的超集。

最终结果表应具有name1,class

我的查询是

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')从table1左外连接table2上(name1 = name2);

在编写Hive转换UDF时,我希望保持行为与PostGreSQL中的转换UDF相同。 与PostGreSQL相似,如果转换UDF的任何参数为NULL,则结果为NULL。

UDF的Hive源代码的以下行中也表示了这一点:

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

完整的源代码在这里

据我对您的问题的理解,当表1中存在该名称但表2中不存在该名称时,您想发出“ N”。 如果我这样做了,我会做(未测试):

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

您可以在Hive UDF Wiki页面上了解有关合并的UDF的更多信息。

由于您的问题,我在Hive UDF Wiki页面上更新了对Translation UDF的描述,以澄清输入参数之一为NULL的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM