我们如何才能删除一个 HIVE table 及其底层文件结构,而不破坏同一路径下的另一个 table?
How can we drop a HIVE table with its underlying file structure, without corrupting another table under the same path?
假设我们在相同的 HDFS 文件路径下创建了 2 个配置单元 table。
我希望能够删除一个 table WITH HDFS 文件路径,而不破坏同一共享路径中的另一个 table。
通过执行以下操作:
drop table test;
然后:
hadoop fs -rm -r hdfs/file/path/folder/*
我删除了两个 tables 文件,而不仅仅是我删除的那个。
在另一个 post 中,我找到了这个解决方案:
--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 语句,因为我遇到了权限被拒绝的错误(用户在 table 上没有 [ALTER] 权限)
还有其他解决方案吗?
如果您有两个 table 使用同一位置,那么此位置中的所有文件都属于这两个 table,无论它们是如何创建的。
假设您有 table1
的位置 hdfs/file/path/folder
和 table2
的相同位置 hdfs/file/path/folder
并且您将一些数据插入 table1
,文件是如果您从 table2
select,它们将被创建,反之亦然:如果您插入 table2
,则可以从 table1
访问新文件。这是因为 table 数据存储在该位置,无论您如何将文件放入该位置。您可以使用 SQL 将数据插入 table,手动将文件放入位置等。
每个 table 或分区都有它的位置,您不能单独指定文件。
为了更好地理解,另请阅读此答案,其中包含有关同一位置顶部多个 table 的示例:
假设我们在相同的 HDFS 文件路径下创建了 2 个配置单元 table。
我希望能够删除一个 table WITH HDFS 文件路径,而不破坏同一共享路径中的另一个 table。
通过执行以下操作:
drop table test;
然后:
hadoop fs -rm -r hdfs/file/path/folder/*
我删除了两个 tables 文件,而不仅仅是我删除的那个。
在另一个 post 中,我找到了这个解决方案:
--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 语句,因为我遇到了权限被拒绝的错误(用户在 table 上没有 [ALTER] 权限)
还有其他解决方案吗?
如果您有两个 table 使用同一位置,那么此位置中的所有文件都属于这两个 table,无论它们是如何创建的。
假设您有 table1
的位置 hdfs/file/path/folder
和 table2
的相同位置 hdfs/file/path/folder
并且您将一些数据插入 table1
,文件是如果您从 table2
select,它们将被创建,反之亦然:如果您插入 table2
,则可以从 table1
访问新文件。这是因为 table 数据存储在该位置,无论您如何将文件放入该位置。您可以使用 SQL 将数据插入 table,手动将文件放入位置等。
每个 table 或分区都有它的位置,您不能单独指定文件。
为了更好地理解,另请阅读此答案,其中包含有关同一位置顶部多个 table 的示例: