从十进制到双精度的Hive列转换导致NULL

时间:2018-03-16 11:28:45

标签: hadoop hive hiveql

我有表的hive table table1架构看起来像这样

[CREATE TABLE table1(p_decimal1 DECIMAL(38,5)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE]

我在表格中的价值低于

row  : col(p_decimal1)   
row1 : 12345123451234512345123.45123  

在后期阶段 如果我执行

select CAST(p_decimal1 AS DOUBLE) from table1; 

查询然后我得到NULL作为输出。

你能解释一下为什么它会变成NULL吗?

2 个答案:

答案 0 :(得分:0)

DECIMAL是具有范围(大约-10e308到10e308)的更高级别的浮点数据类型,其中double是普通浮点数而不是大值。

因此,在您的情况下,您试图将大量数据输入小数据类型,这就是enter image description here获得NULL的原因。

答案 1 :(得分:0)

允许从十进制转换为int,double,string和boolean,因此您可能会遇到错误。您可以向蜂巢社区报告它将被修复。

然而,我发现这个hack将十进制转换为double。虽然我在大部分工作中都没有使用/测试过,但您可以自行决定使用它。

  

从table1中选择强制转换(强制转换(上(p_decimal1)为字符串)为double);

结果:1​​.2345123451234513E22