ИЗМЕНИТЬ ТАБЛИЦУ ДОБАВИТЬ КОЛОНК С ПО УМОЛЧАНИЮ NULL

У меня есть заголовок объекта таблицы, и я хочу изменить его и добавить несколько столбцов. Я хочу, чтобы новые добавленные столбцы имели значение по умолчанию как null. Моя таблица уже загружена данными за 14 лет. Поскольку это разделенная таблица за 2002-2014 годы, по умолчанию значение этого нового добавленного столбца должно быть нулевым в таблице.

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

Команда изменения таблицы

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

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

Ошибка с исключением java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable нельзя преобразовать в org.apache.hadoop.io. LongWritable

В моей таблице есть данные за 14 лет, и я не хочу, чтобы это было сделано путем добавления null в предложение select и указания псевдонимов.

Я пробовал то, что было здесь и из здесь.

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


person user7422128    schedule 03.02.2017    source источник


Ответы (2)


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

person leftjoin    schedule 03.02.2017

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

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

Примечание: данные СОХРАНЯЮТСЯ КАК УЛЕЙ ПАРКЕТ не получает определение нового столбца в ПАРКЕТЕ.

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

INSERT INTO TABLE selet columns (old) null as MSCLMID, null as NPI, null as UNITS from oldtabel

person sandeep rawat    schedule 04.02.2017
comment
Я уже упоминал в своем запросе, что не хочу ставить select и null в качестве этих столбцов, поскольку мои данные находятся в TB, другая команда вставки вызовет у меня больше времени. Есть ли другой обходной путь? - person user7422128; 04.02.2017
comment
вот почему я сказал только обходиться без другого варианта, если вы не измените свои паркетные файлы ... - person sandeep rawat; 05.02.2017