Как мы можем удалить таблицу HIVE с ее базовой файловой структурой, не повреждая другую таблицу по тому же пути? - PullRequest
1 голос
/ 04 мая 2020

Предполагая, что у нас есть две таблицы кустов, созданные по одному и тому же пути к файлу HDFS.

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

Делая следующее:

drop table test;

Затем:

hadoop fs -rm -r hdfs/file/path/folder/*

Я удаляю файлы обеих таблиц, а не только тот, который я отбросил.

В другом посте я нашел это решение:

--changing the tbl properties to to make the table as internal
ALTER TABLE <table-name> SET TBLPROPERTIES('EXTERNAL'='False'); 
--now the table is internal if you drop the table data will be dropped automatically
drop table <table-name>; 

Но мне не удалось пройти инструкцию ALTER, поскольку я получил ошибку отказа в разрешении (у пользователя нет привилегии [ALTER] для таблицы)

Любое другое решение?

1 Ответ

1 голос
/ 05 мая 2020

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

Скажите, если у вас table1 с местоположением hdfs/file/path/folder и table2 с тем же местоположением hdfs/file/path/folder, и вы вставили некоторые данные в table1, файлы создаются и читаются, если вы выбираете из table2, и наоборот: если вы вставляете в table2, новые файлы будут доступны с table1. Это связано с тем, что данные таблицы хранятся в этом месте, независимо от того, как вы поместили файлы в это место. Вы можете вставить данные в таблицу с помощью SQL, поместить файлы в нужное место вручную и т. Д. c.

У каждой таблицы или раздела есть свое местоположение, файлы нельзя указывать отдельно.

Для лучшего понимания прочитайте также этот ответ с примерами нескольких таблиц поверх одного и того же местоположения: { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...