我正在使用
drop table <table_name>
如果我使用相同的模式和名称重新创建表格,我将得到旧数据。 需要从HDFS文件系统中删除表目录才能完全摆脱这些数据吗?
我正在使用
drop table <table_name>
如果我使用相同的模式和名称重新创建表格,我将得到旧数据。 需要从HDFS文件系统中删除表目录才能完全摆脱这些数据吗?
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.
首先使用以下命令获取表的路径:
hive> describe formatted 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;***
除非你需要更多的HDFS空间,否则不需要删除HDFS中的目录。
如果你想要替换新数据,只需在HDFS中替换文件即可。
如果你想要将表名用于其他用途,则需要删除HDFS中的表并删除目录。
实际上,我认为这是一个非常方便的功能,可以在不丢失任何数据的情况下更改表的模式(例如,你想要更改字段名称或将两个字段连接成一个字段)。
实际上,删除外部表不会删除数据。
您可以使用TRUNCATE TABLE来清除数据。
文档在这里:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TruncateTable
然后如果需要,使用DROP TABLE来删除模式。