如何检查并强制清理Databricks Unity Catalog中软删除的托管表?
Unity Catalog托管表物理文件清理相关问题解答
1. 识别待物理删除的表或存储路径
- 命令方式:使用
SHOW RECYCLE BIN命令,可直接列出所有进入回收站、等待物理删除的托管表,输出包含表名、删除时间、保留到期时间等信息。如果要查看单张表的存储路径,可通过回收站表名(格式通常为catalog.schema.table__purged__<UUID>)执行DESCRIBE EXTENDED <回收站表名>,结果中的Location字段即为该表底层文件的当前存储路径。 - 系统表查询:查询
system.information_schema.recycle_bin系统表,该表包含回收站中所有对象的详细信息,包括catalog_name、schema_name、table_name、drop_time、retain_until(保留到期时间)以及storage_location(存储路径)字段,可通过SQL筛选指定范围的待删除对象:SELECT catalog_name, schema_name, table_name, drop_time, retain_until, storage_location FROM system.information_schema.recycle_bin WHERE object_type = 'TABLE';
2. 立即永久删除剩余文件
- 命令方式
- 若表尚未删除,直接使用
DROP TABLE <表名> PURGE命令,删除时跳过回收站,直接永久删除底层物理文件,不触发保留期机制。 - 若表已进入回收站,可通过
PURGE RECYCLE BIN <表名>命令永久删除单张表,或使用PURGE RECYCLE BIN清空回收站中所有对象,执行后对应底层文件会被立即删除,无法再通过UNDROP恢复。
- 若表尚未删除,直接使用
- UI操作方式:在Databricks数据浏览器(Data Explorer)中,进入对应Catalog的
Recycle Bin标签页,选中目标表后点击Permanently Delete按钮,即可完成永久删除操作。
关于TRUNCATE+VACUUM无效的说明
TRUNCATE仅清空托管表的当前数据版本,旧版本数据仍处于Delta Lake的版本管理中;而VACUUM RETAIN 0 HOURS仅清理当前存在的表的旧版本文件,无法作用于已删除表进入回收站后的存储路径,因此无法达到彻底删除文件的效果。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

