如何截断配置单元中已分区的外部表



我计划截断有一个分区的配置单元外部表。因此,我使用了以下命令来截断表:

hive> truncate table abc; 

但是,它给我带来了一个错误:无法截断非托管表abc

有人能推荐我出去吗。。。

首先制作您的表MANAGED

ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='FALSE');

然后截断:

truncate table abc;

最后,你可以再次将其外部化:

ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');

默认情况下,TRUNCATE TABLE仅在托管表上受支持。试图截断外部表会导致以下错误:

错误:org.apache.spark.sql.AnalysisException:不允许操作:外部表上的TRUNCATE TABLE

所需操作

更改应用程序。不要尝试在外部表上运行TRUNCATE TABLE。

或者,更改应用程序以更改表属性,从而将external.table.purge设置为true,从而允许截断外部表:

ALTER TABLE mytable SET TBLPROPERTIES('external.TABLE.pruge'='true'(;

有一个更好的解决方案,基本上是一行代码。

insert overwrite table table_xyz select * from table_xyz where 1=2;

此代码将删除所有文件,并在具有绝对零记录的外部文件夹位置创建一个空白文件。

查看https://issues.apache.org/jira/browse/HIVE-4367:使用

truncate table my_ext_table force;

相关内容

  • 没有找到相关文章

最新更新