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))
- 在值上迭代两次(MapReduce)
- Hive启动 – 终端初始化失败; 回到没有支持
- job.setOutputKeyClass和job.setOutputReduceClass在哪里引用?
- Hadoop:java.lang.ClassCastException:org.apache.hadoop.io.LongWritable无法强制转换为org.apache.hadoop.io.Text
- Hadoop中的CSV处理
- 如何在类路径中包含hbase-site.xml
- OpenCV库加载了hadoop但没有工作
- Mahout:读取自定义输入文件
- 如何配置maven shade插件以在我的jar中包含测试代码?