[英]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.