14

我在用

drop table <table_name>

如果我重新创建具有相同架构和名称的表,我将取回旧数据。我应该从 hdfs 文件系统中删除表目录以完全摆脱数据吗?

4

6 回答 6

5

在删除它之前,您必须将外部表更改为内部表:

例子

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.
于 2018-04-04T13:14:37.647 回答
3

首先使用以下命令获取表的路径:

hive> 描述格式化的 database_name.table_name;

然后复制出现在描述中的整个位置,例如:/user/hive/warehouse/database_name.db/table_name

在此之后使用以下命令截断给定表中的所有数据:

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

或者

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

然后您可以使用 DROP TABLE 命令完全擦除它。

于 2017-07-05T10:27:28.460 回答
2

虽然我同意 pensz 的观点,但稍作改动,你不必放弃桌子。只需将外部 hdfs 文件替换为您想要的任何新文件(替换文件的结构应该相同),当您对上一个表执行 select * 时,您会注意到它将具有新数据而不是旧数据一。

外部表基本上只表示数据的模式和文件的位置。您可以将许多文件添加到同一位置,您的表格将自动包含与这些文件相关的所有数据。同样,您可以替换任何数据,并且您的表格将自动反映这一点。

于 2012-11-25T17:54:23.077 回答
1

无需删除 hdfs 中的目录,除非您需要更多 hdfs 空间。

如果你想替换新数据,你只需要替换 hdfs 中的文件。

如果您想将表名用于其他用途,请删除该表并删除 hdfs 中的目录。

事实上,我认为这是一个非常方便的功能,您可以更改表的架构(例如,您想更改字段名称或将两个字段连接到一个字段)而不会丢失任何数据。

于 2012-11-24T14:13:51.887 回答
0

如果它是一个外部表,删除该表意味着您只是在删除该方案

所以你必须手动从 HDFS 中删除文件

或创建一个新表,并在 tbl 属性中提供不同的文件位置

于 2017-07-26T20:14:14.360 回答
-1

确实删除 EXTERNAL TABLES 不会删除数据。

您可以使用 TRUNCATE TABLE 删除数据。

文档在这里:https ://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TruncateTable

如果需要,然后使用 DROP TABLE 删除架构

于 2018-10-09T16:21:50.937 回答