外部表数据未在 Hive 中清除

时间:2021-01-10 12:05:31

标签: hive hdfs hiveql

我创建了 2 个外部表 Hive。在第一个表中使用 create 语句指定数据位置。创建后在第二个表中加载数据。 我可以在 /hive/warehouse/ 目录中看到为第二个表创建的数据文件。然后我为两个表都设置了 "external.table.purge"="true"。并删除两个表。但是两个表的数据文件都保持原样。

  1. 'external.table.purge'='true' 的行为是什么。不应该在发出 Drop 命令时也删除数据文件吗?
  2. 如果 Hive 对外部表的数据文件没有任何所有权,为什么还有 'external.table.purge'='true' 这样的选项。

我阅读了其中一个帖子,其中有人提到可以通过 ALTER TABLE ... SET TBLPROPERTIES('external.table.purge'='true') 删除外部表的数据,但无法再次找到该帖子。

Syntax used to Create External Table.

Code used to set purge option.

2 个答案:

答案 0 :(得分:0)

您不能删除外部表中的数据,但可以为内部(托管)表删除数据。所以把表转成internal然后drop掉。
先将永恒属性改为false。
hive> ALTER TABLE nyse_external SET TBLPROPERTIES('EXTERNAL'='False');
然后你就可以轻松放下它。
hive> drop table nyse_external;

TBLPROPERTIES ("external.table.purge"="true") 应该适用于 hive 版本 4.x+。

答案 1 :(得分:0)

回答第 1 点: 表属性“external.table.purge”,如果为真(并且表是外部表),将让 Hive 知道在删除表时删除表数据。这个特性是在这个 apache jira 中引入的。 https://issues.apache.org/jira/browse/HIVE-19981 .

有关如何设置属性的参考,请查看此示例, https://docs.cloudera.com/runtime/7.2.7/using-hiveql/topics/hive_drop_external_table_data.html