如何在配置单元中截断分区外部 table?

How to truncate a partitioned external table in hive?

我打算截断具有一个分区的外部配置单元 table。因此,我使用以下命令截断 table :

 hive> truncate table abc; 

但是,它向我抛出一条错误消息:无法截断非托管 table abc。

任何人都可以就相同的问题向我提出建议...

先 table MANAGED:

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

然后truncate:

truncate table abc;

最后你又可以把它变成外部的了:

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

有一个更好的解决方案,基本上是一个衬垫。

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

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

默认情况下,TRUNCATE TABLE 仅在托管 table 上受支持。尝试 t运行 分类外部 table 会导致以下错误:

错误:org.apache.spark.sql.AnalysisException:不允许操作:在外部 tables

上截断 TABLE

需要采取行动

更改应用程序。不要尝试在外部 table.

上 运行 TRUNCATE TABLE

或者,更改应用程序以更改 table 属性 以将 external.table.purge 设置为 true 以允许外部 table 的 t运行 阳离子:

改变 TABLE 我的table 设置 TBLPROPERTIES ('external.table.purge'='true');