hive nvl不适用于列-nullpointerexception的日期类型

k7fdbhmy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(501)

我正在使用mapr-hive分布在hdfs上,并面临以下问题。如果表的列类型是'date'类型,则nvl函数不起作用。这同样适用于其他数据类型。
它只是抛出

NullpointerException:Null

甚至explain函数也抛出了相同的异常。
请帮忙。是不是 hive 里的虫子?

4uqofj5v

4uqofj5v1#

我也遇到了这个问题。我发现输入参数不匹配。与nvl(create\u date,'1990-01-01')一样,create\u date是date tyep,'1990-01-01'是string类型,因此npe抛出。你可以这样解决这个问题:

nvl(create_date,cast('1990-01-01' as date))
vu8f3i0k

vu8f3i0k2#

我想要nvl的第二个参数作为当前的\u日期,但是nvl抛出nullpointerexception,就像原始问题一样。
所以我找到了这个案子的答案:

NVL(dt, from_unixtime(unix_timestamp(), 'yyyy-MM-dd'))
kninwzqo

kninwzqo3#

我自己解决了这个问题:
对于日期类型,可以使用hive COALESCE 功能如下:

COALESCE(nt.assess_dt, cast('9999-01-01' as date))

以上答案可以解释为:
查找 nt.assess_dt (这是一个 date 类型栏);如果是的话 null 获取中的下一个值 COALESCE 功能;它在上面的示例中是一个非空值,因此将返回。
请注意,它与nvl稍有不同,nvl中 COALESCE 必须是同一类型。因此是一片空白 '' 不能由返回 COALESCE 在上面的例子中。
因此,我使用了非常大的日期值 9999-01-01 代表 null 并区分一个真正的日期值。如果您的日期列确实可以将这个较大的值作为有效值,那么您应该考虑其他一些有效的日期值来表示 null 日期。
在这里了解更多关于这个和其他替代方案的信息

jrcvhitl

jrcvhitl4#

也可以使用最初请求的nvl,如

NVL(nt.assess_dt, cast('9999-01-01' as date))

相关问题