2015-08-28 150 views
3

我正在使用MapR Hive分布在HDFS上并面临以下问题。 如果对于表格类型为“日期”类型,则NVL函数不起作用。其他数据类型也一样。Hive NVL不适用于列的日期类型 - NullpointerException

它只是抛出

NullpointerException:Null 

即使解释函数抛出同样的异常。

请在这里帮忙。它是Hive发行版中的错误吗?

回答

3

我解决了自己的问题与解决方法:

对于Date类型,你可以使用如下蜂房COALESCE功能:

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

以上回答可以作为解释:

  • 查找nt.assess_dt(这是一个date类型列);如果是null则获得COALESCE函数中的下一个值;这是上面例子中的非空值,因此将返回。

请注意,它与NVL有点不同,其中COALESCE返回的值需要是相同的类型。因此在上例中COALESCE不能返回空白''

由于这个原因,我使用了非常大的日期值9999-01-01来表示null值并区分了真正的日期值。如果您的日期列确实可以将此大数值确定为有效值,那么您应该考虑使用其他有效日期值来表示null日期。

获取更多关于这个和其他替代here

0

你也可以使用原始请求NVL,如

NVL(nt.assess_dt, cast('9999-01-01' as date)) 
相关问题