2015-11-02 1 views
0

Моя версия улья 0.13.Hive не может прочитать десятичное значение от hdfs

У меня есть файл, который содержит десятичное значение и несколько других типов данных. Этот файл получается после выполнения некоторых преобразований Pig. Я создал таблицу Hive поверх этого файла HDFS. Когда я пытаюсь сделать 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 с использованием синтаксиса DECIMAL (точность, масштаб). Если масштаб не указан, по умолчанию он равен 0 (без дробных цифр). Если точность не указана, по умолчанию она равна 10. Вы можете найти то же самое в hive docs

попробуйте сбросить таблицу FSTUDENT и заново создать таблицу с DECIMAL (точность, масштаб). Somthing как

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) отлично работает. Улей отображает только значения после десятичного числа, только если они не равны нулю. В моем случае у меня было все из них как ноль. Так попалось в эту путаницу. Спасибо – 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

Смежные вопросы