Hive NVL不适用于列的日期类型 – NullpointerException

我在HDFS上使用MapR Hive分发并面临以下问题。 如果对于表,列类型为“日期”类型,则NVL函数不起作用。 这适用于其他数据类型。

它只是抛出

NullpointerException:Null 

甚至解释函数都抛出相同的exception。

请帮忙。 它是Hive发行版中的一个错误吗?

我自己用一个解决方法解决了这个问题:

对于Date类型,您可以使用hive 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日期。

在这里获取更多关于此和其他替代方案

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

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