Столбец добавления или удаления таблицы добавления таблицы
У меня есть таблица orc в hive Я хочу удалить столбец из этой таблицы
ALTER TABLE table_name drop col_name;
но я получаю следующее исключение
Произошла ошибка при выполнении запроса куста: OK FAILED: строка ParseException 1:35 msgstr "Невозможно выполнить запрос" user_id1 ", ожидая, что PARTITION около 'drop' в инструкции о сокращении
Может ли кто-нибудь помочь мне или дать какую-либо идею сделать это? Заметьте, я using hive 0.14
Ответы
Ответ 1
Вы не можете удалить столбец из таблицы с помощью команды ALTER TABLE table_name drop col_name;
Единственный способ удаления столбца - использовать команду replace. Допустим, у меня есть таблица emp с идентификатором, именем и столбцом департамента. Я хочу удалить столбец столбца таблицы emp. Поэтому укажите все те столбцы, которые вы хотите быть частью таблицы, взамен столбцов. Команда ниже приведет к удалению столбца id из таблицы emp.
ALTER TABLE emp REPLACE COLUMNS( name string, dept string);
Ответ 2
предположим, что у вас есть внешняя таблица, а именно. организация .employee как: (не включая TBLPROPERTIES)
hive> show create table organization.employee;
OK
CREATE EXTERNAL TABLE `organization.employee`(
`employee_id` bigint,
`employee_name` string,
`updated_by` string,
`updated_date` timestamp)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://getnamenode/apps/hive/warehouse/organization.db/employee'
Вы хотите удалить столбцы updated_by, updated_date из таблицы. Выполните следующие действия:
создайте реплику таблицы temp для организации .employee как:
hive> create table organization.employee_temp as select * from organization.employee;
отбросьте основную таблицу organization.employee.
hive> drop table organization.employee;
удалить базовые данные из HDFS (необходимо выйти из оболочки улья)
[[email protected] myfile]$ hadoop fs -rm hdfs://getnamenode/apps/hive/warehouse/organization.db/employee/*
создайте таблицу с удаленными столбцами по мере необходимости:
hive> CREATE EXTERNAL TABLE `organization.employee`(
`employee_id` bigint,
`employee_name` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'hdfs://getnamenode/apps/hive/warehouse/organization.db/employee'
вставить исходные записи в исходную таблицу.
hive> insert into organization.employee
select employee_id, employee_name from organization.employee_temp;
наконец, отбросить созданную таблицу temp
hive> drop table organization.employee_temp;
Ответ 3
ALTER TABLE emp REPLACE COLUMNS( name string, dept string);
Вышеуказанный оператор может изменить схему таблицы, а не данные.
Решение этой проблемы для копирования данных в новую таблицу.
Insert <New Table> Select <selective columns> from <Old Table>
Ответ 4
ALTER TABLE пока не поддерживается для не-родных таблиц; то есть, что вы получаете с CREATE TABLE, когда указано условие STORED BY.
проверьте https://cwiki.apache.org/confluence/display/Hive/StorageHandlers
Ответ 5
Существует также "тупой" способ достижения конечной цели, это создание новой таблицы без ненужных столбцов. Использование сопоставления регулярных выражений Hive сделает это довольно просто.
Вот что я бы сделал:
-- make a copy of the old table
ALTER TABLE table RENAME TO table_to_dump;
-- make the new table without the columns to be deleted
CREATE TABLE table AS
SELECT '(col_to_remove_1|col_to_remove_2)?+.+'
FROM table_to_dump;
-- dump the table
DROP TABLE table_to_dump;
Если рассматриваемая таблица не слишком большая, это должно работать просто хорошо.
Ответ 6
Спасибо за ответ Изменить таблицу tbl_name drop col_name; я пробовал вышеупомянутую команду, но она дает следующее исключение MismatchedTokenException (253! = 196)
Ответ 7
Даже ниже запрос работает для меня.
Alter table tbl_name drop col_name