我正在使用mapr-hive分布在hdfs上,并面临以下问题。如果表的列类型是'date'类型,则nvl函数不起作用。这同样适用于其他数据类型。它只是抛出
NullpointerException:Null
甚至explain函数也抛出了相同的异常。请帮忙。是不是 hive 里的虫子?
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))
vu8f3i0k2#
我想要nvl的第二个参数作为当前的\u日期,但是nvl抛出nullpointerexception,就像原始问题一样。所以我找到了这个案子的答案:
NVL(dt, from_unixtime(unix_timestamp(), 'yyyy-MM-dd'))
kninwzqo3#
我自己解决了这个问题:对于日期类型,可以使用hive COALESCE 功能如下:
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 日期。在这里了解更多关于这个和其他替代方案的信息
nt.assess_dt
date
null
''
9999-01-01
jrcvhitl4#
也可以使用最初请求的nvl,如
NVL(nt.assess_dt, cast('9999-01-01' as date))
4条答案
按热度按时间4uqofj5v1#
我也遇到了这个问题。我发现输入参数不匹配。与nvl(create\u date,'1990-01-01')一样,create\u date是date tyep,'1990-01-01'是string类型,因此npe抛出。你可以这样解决这个问题:
vu8f3i0k2#
我想要nvl的第二个参数作为当前的\u日期,但是nvl抛出nullpointerexception,就像原始问题一样。
所以我找到了这个案子的答案:
kninwzqo3#
我自己解决了这个问题:
对于日期类型,可以使用hive
COALESCE
功能如下:以上答案可以解释为:
查找
nt.assess_dt
(这是一个date
类型栏);如果是的话null
获取中的下一个值COALESCE
功能;它在上面的示例中是一个非空值,因此将返回。请注意,它与nvl稍有不同,nvl中
COALESCE
必须是同一类型。因此是一片空白''
不能由返回COALESCE
在上面的例子中。因此,我使用了非常大的日期值
9999-01-01
代表null
并区分一个真正的日期值。如果您的日期列确实可以将这个较大的值作为有效值,那么您应该考虑其他一些有效的日期值来表示null
日期。在这里了解更多关于这个和其他替代方案的信息
jrcvhitl4#
也可以使用最初请求的nvl,如