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

Hive NVL does not work with Date type of the column - NullpointerException

我在 HDFS 上使用 MapR Hive 分发并面临以下问题。 如果对于 table 列类型是 'Date' 类型,则 NVL 函数不起作用。这同样适用于其他数据类型。

它只是抛出

NullpointerException:Null

甚至解释函数也抛出相同的异常。

请帮帮忙。是 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 日期。

了解更多关于这个和其他选择的信息here

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

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

我想要 NVL 的第二个参数作为 CURRENT_DATE,但是 NVL 像原始问题一样抛出 NullpointerException。

所以我找到了这个案例的答案:

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

我也遇到了这个问题。我发现输入参数不匹配。比如nvl(create_date,'1990-01-01'),create_date是DATE类型,'1990-01-01'是String类型,所以抛出NPE。你可以这样解决这个问题:

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