我的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。
任何帮助?
感谢。
答案 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'
或 在更改列数据类型后,截断表/插入将数据覆盖到表中。希望这有帮助!