我的Hive版本是0.13。
我有一个包含十进制值和其他数据类型的文件。此文件是在执行一些pig转换之后获得的。我在这个hdfs文件上创建了一个配置单元表。当我试着 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。
有什么帮助吗?
谢谢。
2条答案
按热度按时间xdnvmnnf1#
@neethu:除非是一个外部表,否则改变表不会有任何区别。
正如@k s nidhin提到的,从hive0.13开始,用户可以在使用decimal(precision,scale)语法创建decimal数据类型的表时指定scale和precision。如果未指定比例,则默认为0(无小数位数)。如果未指定精度,则默认为10。你可以在hive文档中找到相同的内容
试着把table放下
FSTUDENT
并用小数(精度、刻度)重新创建表格。有点像或者在更改列数据类型后截断表/插入并覆盖表中的数据。希望这有帮助!
oknwwptz2#
问题是因为你没有提到精确性。
因此,必须增加精度才能得到所需的值。