【问题标题】:Hive column casting from decimal to double is resulting in NULLHive 列从十进制转换为双精度导致 NULL
【发布时间】:2018-03-17 03:45:06
【问题描述】:

我有 hive 表 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 吗?

【问题讨论】:

    标签: hadoop hive hiveql


    【解决方案1】:

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

    因此,在您的情况下,您正试图将大价值转换为小数据类型,这就是您 aenter image description herere 获得 NULL 的原因。

    【讨论】:

    • 这是一个隐式转换,这意味着它不使用强制转换,并且 hive 将在不使用强制转换的情况下进行转换。这与这个 SO 问题不同。
    【解决方案2】:

    允许从十进制转换为整数、双精度、字符串和布尔值,因此您可能会遇到错误。您可以向 hive 社区报告它,它将被修复。

    但是,我发现这个技巧可以将十进制转换为双精度。尽管我在大部分工作中都没有使用/测试过它,但您可以自行决定使用它。

    select cast(cast(upper(p_decimal1) as string) as double) from table1;

    结果:1​​.2345123451234513E22

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多