配置单元 - 如何删除外部配置单元表以及数据

时间:2012-11-24 13:53:42

标签: hive hdfs drop-table

我正在使用

drop table <table_name>

如果我使用相同的模式和名称重新创建表,我将恢复旧数据。 我应该从hdfs文件系统中删除表目录以完全删除数据吗?

7 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您必须在删除之前更改外部到内部表:

示例

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.

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

您可以查看此链接,这可能会有所帮助

https://issues.apache.org/jira/browse/HIVE-4367

答案 4 :(得分:1)

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

<强> 蜂房&GT;描述格式化的database_name.table_name;

然后复制描述中出现的整个位置,例如: /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命令完全擦除它。

答案 5 :(得分:0)

如果是外部表,则删除表意味着您只是删除方案

因此您必须手动从HDFS中删除文件

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

答案 6 :(得分:0)

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

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

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

然后根据需要使用DROP TABLE删除架构