hive - как удалить внешнюю таблицу улья вместе с данными

Я использую

drop table <table_name>

Если я воссоздаю таблицу с той же схемой и именем, я верну старые данные. Следует ли мне удалить каталог таблицы из файловой системы hdfs, чтобы полностью избавиться от данных?


person amrk7    schedule 24.11.2012    source источник
comment
Вы можете проверить эту ссылку, она может помочь issues.apache.org/jira/browse/ HIVE-4367   -  person shashaDenovo    schedule 04.11.2014


Ответы (6)


Вы должны изменить внешнюю таблицу на внутреннюю, прежде чем удалить ее:

пример

beeline> ALTER TABLE $tablename SET TBLPROPERTIES('EXTERNAL'='False'); // make the table as internal

а потом:

beeline> drop table $tablename; //if you drop the table data will be dropped as well.
person HISI    schedule 04.04.2018

Сначала получите путь к таблице, используя следующую команду:

hive> описать отформатированное имя_базы_данных.имя_таблицы;

Затем скопируйте все местоположение, указанное в описании, например: /user/hive/warehouse/database_name.db/table_name

После этого используйте следующую команду для усечения всех данных из данной таблицы:

***hive> dfs -rmr /user/hive/warehouse/database_name.db/table_name;*** 

OR

***hive> dfs -rm -r /user/hive/warehouse/database_name.db/table_name;***

Затем вы можете полностью стереть его, используя команду DROP TABLE.

person Sachin Devhade    schedule 05.07.2017
comment
Это лучший ответ на свете. Спасибо - person Yamur; 29.05.2020

Хотя я согласен с pensz, небольшое изменение, вам не нужно бросать стол. Просто замените внешний файл hdfs любым новым файлом, который вы хотите (структура замененного файла должна быть такой же), и когда вы сделаете выбор * предыдущей таблицы, вы заметите, что в ней будут новые данные, а не старые один.

Внешние таблицы в основном обозначают только схему данных и расположение файла. Вы можете добавить много файлов в одно и то же место, и ваша таблица автоматически будет содержать все данные, относящиеся к этим файлам. Точно так же вы можете заменить любые данные, и ваша таблица автоматически отразит это.

person Nicole Hu    schedule 25.11.2012
comment
Однако, если ваша таблица разбита на разделы, потребуются небольшие изменения. Я предполагаю, что ваша таблица не такая. - person Nicole Hu; 25.11.2012

Нет необходимости удалять каталог в hdfs, за исключением того, что вам нужно больше места на hdfs.

Если вы хотите заменить новые данные, вам просто нужно заменить файл в hdfs.

Если вы хотите использовать имя таблицы для других целей, отбросьте таблицу и удалите каталог в hdfs.

На самом деле, я думаю, что это очень удобная функция, с помощью которой вы можете изменить схему своей таблицы (например, вы хотите изменить имя поля или объединить два поля в одно поле) без потери данных.

person pensz    schedule 24.11.2012
comment
Моя проблема в том, что мне нужно избавиться от данных, но воссоздать таблицу с тем же именем и схемой? - person amrk7; 24.11.2012
comment
удалить файл hdfs, отбросить таблицу; импортировать новый файл в hdfs и создать новую таблицу. - person pensz; 24.11.2012

если это внешняя таблица, удаление таблицы означает, что вы просто удаляете схему

поэтому вам нужно вручную удалить файл из HDFS

или создайте новую таблицу и укажите другое местоположение файла в свойствах таблицы

person Viswanath    schedule 26.07.2017

Действительно, удаление ВНЕШНИХ ТАБЛИЦ не приведет к удалению данных.

Вы можете использовать TRUNCATE TABLE, чтобы избавиться от данных.

Документ здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TruncateTable

Затем используйте DROP TABLE, чтобы удалить схему, если это необходимо.

person JohnConnor    schedule 09.10.2018
comment
Усечение внешней таблицы приводит к ошибке при компиляции оператора: FAILED: SemanticException [Ошибка 10146]: невозможно усечь неуправляемую таблицу TABLENAME. - person Keith Sirmons; 18.07.2019