Hive 无法从 hdfs 读取十进制值

Hive unable to read decimal value from hdfs

我的蜂巢版本是0.13。

我有一个包含 十进制值 和少数其他数据类型的文件。该文件是在执行一些 Pig 转换后获得的。我在此 HDFS 文件之上创建了一个 Hive table。当我尝试执行 select * from table_name 时,我发现文件中的十进制值被截断为整数值。这可能是什么原因?

下面是我的table:

CREATE TABLE FSTUDENT(
    load_dte string COMMENT 'DATE/TIME OF FILE CREATION',
    xyz DECIMAL,
    student_id int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'hdfs://clsuter1/tmp/neethu/part-m-00000';

select * from table_name 的输出给出 1387.00000 的十进制值为 1387。

有什么帮助吗?

谢谢。

问题是因为你没有提到精度。

DECIMAL with out precision will Defaults to decimal(10,0).

因此您必须增加精度才能获得所需的值。

@Neethu:改变 table 不会有任何区别,除非它是外部的 table。

正如@K S Nidhin 提到的,从 Hive 0.13 开始,用户可以在使用 DECIMAL(precision, scale) 语法创建具有 DECIMAL 数据类型的 tables 时指定比例和精度。如果未指定比例,则默认为 0(无小数位)。如果未指定精度,则默认为 10。您可以在 hive docs

中找到相同的精度

尝试删除 table FSTUDENT 并使用 DECIMAL(精度,小数位数)重新创建 table。类似

CREATE TABLE FSTUDENT(
    load_dte STRING,
    xyz DECIMAL(10,5), -- in your case
    student_id INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

或 截断 table/ 插入,在更改列数据类型后将数据覆盖到 table。希望这对您有所帮助!