目录
[4.insert overwrite覆盖](#4.insert overwrite覆盖)
一、背景
在hue执行"truncate table db_name.table_name"时报错,报错内容为"Error while compiling statement: FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table db_name.table_name"
二、分析原因
该表为外部表。(non-managed tables)
外部表:hive只管理元数据,hdfs管理实际数据文件,删除表的时候只删除了元数据数据文件还在;
内部表:hive管理元数据和数据文件,删除表时都会同时删除。
三、解决方法
1.将外部表转为内部表
sql
--将外部表转为内部表
ALTER TABLE db_name.table_name SET TBLPROPERTIES('EXTERNAL'='false');
--清空表数据
truncate table db_name.table_name;
--将内部表转为外部表
ALTER TABLE db_name.table_name SET TBLPROPERTIES('EXTERNAL'='true');
2.暴力删除外部表文件路径
show create table db_name.table_name 找到文件路径
hdfs dfs -rm -f 路径/*
3.暴力删表
sql
drop table db_name.table_name purge;
4.insert overwrite覆盖
sql
insert overwrite table db_name.table_name
select *
from db_name.table_name
where 1=0;
5.hive4.0后版本
sql
--官网:Starting Hive 4.0.0 ( HIVE-19981 - Managed tables converted to external tables by the HiveStrictManagedMigration utility should be set to delete data when the table is dropped RESOLVED ) setting table property external.table.purge=true, will also delete the data.
ALTER TABLE db_name.table_name SET TBLPROPERTIES ('external.table.purge'='true');