如何删除所有数据并从数据库中删除所有分区 Hive
表,使用 Spark 2.3.0
```
truncate table my_table; // Deletes all data, but keeps partitions in metastore
alter table my_table drop partition(p_col > 0) // does not work from spark
唯一对我有效的方法就是迭代 `show partitions my_table` ,替换 `/` 由 `,` 并逐个删除每个分区。但一定有更干净的方法。如果分区列的类型是 `string` . 有什么建议吗?
2条答案
按热度按时间fnvucqvd1#
配置单元有两种类型的表(托管表和外部表)。托管表是为配置单元管理整个架构和数据而创建的。因此,删除配置单元管理的表会删除模式、元数据和数据。但是,外部表的数据位于其他位置(例如s3这样的外部源)。因此,删除表只会删除元数据和表,但数据在源中保持不变。
在您的例子中,当您截断表时,配置单元应该维护元存储,因为表仍然存在于配置单元中,只有数据被删除。此外,metastore不保存数据,因为它只包含有关模式和其他相关表细节的信息。
我希望它能在某种程度上解决这个问题。
编辑1:
类似职位
lskq00tm2#
让我们使用spark 2.4.3设置问题:
我们使用外部目录的
listPartitions
以及dropPartitions
功能。这一切都很好,有利于
MANAGED
table,但是table呢EXTERNAL
table?为了解决这个问题,我们把table改成
EXTERNAL
至MANAGED
在放下分区之前。别忘了把table换回原处
EXTERNAL
使用CatalogTableType.EXTERNAL
.