You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中Spark 3.5.0执行DROP TABLE PURGE报错及数据删除问题

问题描述

在Databricks环境中使用Spark 3.5.0操作现有Delta表时,执行SQL语句%sql DROP TABLE mytable PURGE会抛出SparkUnsupportedOperationException异常;但去掉PURGE的语句%sql DROP TABLE mytable可正常执行,不过此时Azure存储中的数据仍留存。期望删除表时同时删除数据却无法实现,现咨询:

  1. 报错原因是什么?
  2. 如何单独删除Azure存储上的对应数据?
问题解答

1. 报错原因

DROP TABLE ... PURGE是Databricks SQL专属的语法扩展,开源Spark 3.5.0配套的Delta Lake库并未实现该语法逻辑,因此执行时会抛出SparkUnsupportedOperationException。

另外补充:即便在支持该语法的Databricks Runtime环境中,也只有**托管表(Managed Table)**执行DROP TABLE ... PURGE时会同时删除元数据和存储数据;如果是外部表,加PURGE也只会删除元数据,不会清理存储数据。

2. 单独删除Azure存储上的对应数据

方法一:使用Databricks dbutils工具

先通过%sql DESCRIBE EXTENDED mytable查询表的存储路径(查看Location字段),再用dbutils递归删除路径下所有内容:

dbutils.fs.rm("/path/to/your/delta/table", recurse=True)

方法二:使用Azure官方工具

  • Azure CLI:执行批量删除命令(替换占位符为你的存储信息):
    az storage blob delete-batch --account-name <你的存储账户名> --source <容器名> --pattern "delta/table/path/*"
    
  • Azure Portal:直接进入对应存储账户的容器,找到表的存储路径手动删除所有文件。

方法三:使用Delta Lake的VACUUM命令(清理全量历史数据)

如果需要彻底清理表的所有数据文件(包括历史版本),可先开启表的真空权限,再执行清理:

ALTER TABLE mytable SET TBLPROPERTIES (delta.enableVacuumWithRetentionDurationCheck = true);
VACUUM mytable RETAIN 0 HOURS;

内容的提问来源于stack exchange,提问作者ascripter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:54:58