2017-02-03 14 views
0

У меня есть заголовок стола в таблице, и я хочу изменить его и добавить несколько столбцов. Мне нужно, чтобы новые добавленные colummns сохраняли значение по умолчанию равным нулю. Моя таблица уже загружена с 14-летними данными. Поскольку это разделенная таблица на 2002-2014 годы по умолчанию, значение этого вновь добавленного столбца должно быть нулевым в таблице.ALTER TABLE ADD COLUMN WITH DEFAULT NULL

create table facility_HEADER 
(
A string, 
B INT, 
C INT 
)partitioned by (year int comment 'Date Year Incurred') 
STORED AS PARQUET 

Alter Table Command

ALTER TABLE facility_HEADER add columns (MSCLMID Bigint,NPI STRING,UNITS decimal(10,2)); 

Когда я положил описания на столе я могу увидеть столбцы получил добавляется в конце. Когда я помещаю select * из любого раздела, он дает ошибку.

Failed с исключением java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable не может быть отлиты в org.apache.hadoop.io.LongWritable

Мой стол, имеющий 14 лет данных, и я не хочу, чтобы это было сделано с введением нулевой в ЗЕЬЕСТ и давать псевдонимы.

Я пробовал вещи, относящиеся к here и от here.

Может ли кто-нибудь помочь мне, что на самом деле произошло с моим столом. Я потерял 14 лет данных в пути.

ответ

0

Сначала создайте резервную копию файлов. Попробуйте изменить таблицу и добавить новые столбцы. Если вы еще не записали в таблицу, это должно сработать. Проверьте, что таблица снова выбирается. Затем создайте новую таблицу с новыми столбцами и вставьте в нее перезапись.

0

Использование команды alter на куче просто изменило метаданные, а не накладывание данных, поэтому при выборе * из таблицы произойдет сбой.

Как улей пытается извлечь данные из файла, хранящегося «/apps/hive/warehouse/databasename.db/tablename/» с помощью использования row_format и file_format он не будет в состоянии найти значения столбцов, как описано на row_format.

Примечание: данные хранятся в виде ПАРКЕТА ульи не получает определение новой колонки на ПАРКЕТЕ

работе вокруг: создать новую таблицу и вставить данные и переименовать таблицу oldtablname

INSERT INTO TABLE selet столбцы (старые) null как MSCLMID, null как NPI, null как UNITS from oldtabel

+0

Я уже упоминал в своем запросе. Я не хочу помещать select и null в качестве столбцов, поскольку мои данные находятся в ТБ. Другая команда вставки вызовет меня больше времени. Есть ли другое обходное решение? – codaholic

+0

Вот почему я сказал, что не работает ни один другой вариант, если вы не измените свои паркетные файлы ... –