删除 Delta 表功能
重要
在 Databricks Runtime 14.1 及更高版本中,对删除 Delta 表功能和降级协议版本的支持以公共预览版形式提供。
Azure Databricks 为删除表功能提供有限支持。 若要删除表功能,必须执行以下操作:
- 禁用那些使用表功能的表属性。
- 从支持表的数据文件中删除表功能的所有跟踪。
- 从事务日志中删除使用表功能的事务条目。
- 降级表协议。
在受支持的情况下,你应该仅使用此功能来支持与早期 Databricks Runtime 版本、Delta Sharing 或其他 Delta Lake 读取器或写入器客户端的兼容性。
重要
所有 DROP FEATURE
操作与所有并发写入发生冲突。
流式读取在遇到一个更改表元数据的提交时会失败。 如果你希望流继续进行,必须重启它。 有关建议的方法,请参阅结构化流式处理的生产注意事项。
如何删除 Delta 表功能?
若要删除 Delta 表功能,请运行 ALTER TABLE <table-name> DROP FEATURE <feature-name> [TRUNCATE HISTORY]
命令。 请参阅 ALTER TABLE。
必须使用 Databricks Runtime 14.1 或更高版本,并且必须拥有对目标 Delta 表的 MODIFY
权限。
哪些 Delta 表功能可以删除?
可以删除以下 Delta 表功能:
deletionVectors
。 请参阅什么是删除向量?。v2Checkpoint
。 请参阅表与 liquid 聚类分析的兼容性。columnMapping
。 请参阅使用 Delta Lake 列映射重命名和删除列。typeWidening-preview
。 请参阅类型扩展。checkConstraints
。 请参阅 Azure Databricks 上的约束。
不能删除其他 Delta 表功能。
启用表功能以删除旧的功能
DROP FEATURE
命令需要支持表功能读写的协议版本。 早期协议版本支持 columnMapping
和 checkConstraints
之类的 Delta 功能。 可能需要升级协议版本才能删除这些功能,具体取决于表上启用的其他功能。
可以使用以下命令升级表读取器和写入器版本,这样就可以删除列映射并降级协议:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.minReaderVersion' = '3',
'delta.minWriterVersion' = '7'
)
如何删除 Delta 表功能?
由于 Delta 表功能代表读取器和写入器协议,因此若要完全删除它们,必须将它们从事务日志中完全清除。 功能的删除分两个阶段,需要一段时间才能完成。 功能删除的具体情况因功能而异,但你可以参照以下部分提供的总体概述。
准备删除表功能
在第一阶段,用户准备删除表功能。 下面描述这个阶段发生的事情:
- 用户运行
DROP FEATURE
命令。 - 专门启用表功能的表属性具有设置为禁用该功能的值。
- 在引入该功能之前,控制与删除的功能关联的行为的表属性的选项设置为默认值。
- 视需要根据更新的表属性重写数据和元数据文件。
- 该命令完成运行并返回一条错误消息,通知用户必须等待 24 小时才能继续删除功能。
首次禁用某个功能后,你可以在完成协议降级之前继续写入目标表,但无法使用要删除的表功能。
注意
如果将表保留在此状态,则针对表的操作不会使用表功能,但协议仍然支持表功能。 在完成最后的降级步骤之前,不了解表功能的 Delta 客户端无法读取该表。
降级协议并删除表功能
若要删除表功能,必须删除与该功能关联的所有事务历史记录并降级协议。
- 至少 24 小时过去后,用户再次使用
TRUNCATE HISTORY
子句执行DROP FEATURE
命令。 - 客户端确认指定保留阈值内没有事务使用表功能,然后将表历史记录截断到该阈值处。
- 降级协议,删除表功能。
- 如果表中存在的表功能可以由旧协议版本代表,则表的
minReaderVersion
和minWriterVersion
将降级到刚好支持 Delta 表使用的所有剩余功能的最低版本。
重要
运行 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY
将删除所有超过 24 小时的事务日志数据。 删除 Delta 表功能后,将无法访问表历史记录或“按时间顺序查看”。