Hive无法从hdfs读取十进制值

时间:2015-11-02 18:12:42

标签: hadoop hive apache-pig

我的hive版本是0.13。

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

以下是我的表格:

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。

任何帮助?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

@Neethu:除非是外部表,否则更改表不会有任何区别。

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

中找到相同的精度

尝试删除表FSTUDENT并使用DECIMAL(精度,比例)重新创建表。像

这样的东西
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'

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