我的 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。

有什么帮助吗?

谢谢。

最佳答案

@Neethu:更改表除非是外部表,否则不会有任何不同。
正如@K S Nidhin所述,从Hive 0.13开始,在使用DECIMAL(precision,scale)语法创建具有DECIMAL数据类型的表时,用户可以指定比例和精度。如果未指定scale,则默认为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'
要么
更改列数据类型后,截断表/插入将数据覆盖到表中。希望这可以帮助 !

09-12 11:27