外部 Table 数据未在 Hive 中清除

External Table data not getting Purged in Hive

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

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

我在其中一个线程中读到,其中有人提到可以通过 ALTER TABLE ... SET TBLPROPERTIES('external.table.purge'='true') 删除外部 table 的数据,但无法再次找到 post .

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

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

第 1 点的答案: Table 属性 “external.table.purge”,如果为真(如果 table 是外部 table),将让 Hive 知道删除 table 删除 table 时的数据。此 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