配置单元无法从hdfs读取十进制值

sdnqo3pr  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(300)

我的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。
有什么帮助吗?
谢谢。

xdnvmnnf

xdnvmnnf1#

@neethu:除非是一个外部表,否则改变表不会有任何区别。
正如@k s nidhin提到的,从hive0.13开始,用户可以在使用decimal(precision,scale)语法创建decimal数据类型的表时指定scale和precision。如果未指定比例,则默认为0(无小数位数)。如果未指定精度,则默认为10。你可以在hive文档中找到相同的内容
试着把table放下 FSTUDENT 并用小数(精度、刻度)重新创建表格。有点像

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'

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

oknwwptz

oknwwptz2#

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

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

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

相关问题