2015-11-02 33 views
0

我的配置单元版本是0.13。Hive无法从hdfs读取十进制值

我有一个文件,其中包含十进制值和其他几个数据类型。这个文件是在执行一些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

任何帮助十进制值?

谢谢。

回答

1

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

正如@K S Nidhin所述,从Hive 0.13开始,用DECIMAL(precision,scale)语法创建具有DECIMAL数据类型的表时,用户可以指定比例和精度。如果未指定比例,则默认为0(不含小数位)。如果未指定精度,则默认为10.您可以在hive docs中找到相同的值

尝试删除表FSTUDENT并使用DECIMAL(precision,scale)重新创建表。财产以后像

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' 

或 截断改变列数据类型后的表/插入覆盖在表中的数据。希望这可以帮助 !

+1

是DECIMAL(10,5)正常工作。只有当它们不为零时,Hive才会显示小数点后的值。在我的情况下,我把它们全部归零。所以陷入了困惑。 谢谢 – Neethu

1

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

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

所以你必须添加精度来获得所需的值。

+0

'hive -e“alter table FSTUDENT change xyz xyz DECIMAL(10,8)”' 我仍然得到1387。 – Neethu