我计划截断有一个分区的配置单元外部表。因此,我使用了以下命令来截断表:
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;