删除 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 表功能:

不能删除其他 Delta 表功能

启用表功能以删除旧的功能

DROP FEATURE 命令需要支持表功能读写的协议版本。 早期协议版本支持 columnMappingcheckConstraints 之类的 Delta 功能。 可能需要升级协议版本才能删除这些功能,具体取决于表上启用的其他功能。

可以使用以下命令升级表读取器和写入器版本,这样就可以删除列映射并降级协议:

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.minReaderVersion' = '3',
  'delta.minWriterVersion' = '7'
)

如何删除 Delta 表功能?

由于 Delta 表功能代表读取器和写入器协议,因此若要完全删除它们,必须将它们从事务日志中完全清除。 功能的删除分两个阶段,需要一段时间才能完成。 功能删除的具体情况因功能而异,但你可以参照以下部分提供的总体概述。

准备删除表功能

在第一阶段,用户准备删除表功能。 下面描述这个阶段发生的事情:

  1. 用户运行 DROP FEATURE 命令。
  2. 专门启用表功能的表属性具有设置为禁用该功能的值。
  3. 在引入该功能之前,控制与删除的功能关联的行为的表属性的选项设置为默认值。
  4. 视需要根据更新的表属性重写数据和元数据文件。
  5. 该命令完成运行并返回一条错误消息,通知用户必须等待 24 小时才能继续删除功能。

首次禁用某个功能后,你可以在完成协议降级之前继续写入目标表,但无法使用要删除的表功能。

注意

如果将表保留在此状态,则针对表的操作不会使用表功能,但协议仍然支持表功能。 在完成最后的降级步骤之前,不了解表功能的 Delta 客户端无法读取该表。

降级协议并删除表功能

若要删除表功能,必须删除与该功能关联的所有事务历史记录并降级协议。

  1. 至少 24 小时过去后,用户再次使用 TRUNCATE HISTORY 子句执行 DROP FEATURE 命令。
  2. 客户端确认指定保留阈值内没有事务使用表功能,然后将表历史记录截断到该阈值处。
  3. 降级协议,删除表功能。
  4. 如果表中存在的表功能可以由旧协议版本代表,则表的 minReaderVersionminWriterVersion 将降级到刚好支持 Delta 表使用的所有剩余功能的最低版本。

重要

运行 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY 将删除所有超过 24 小时的事务日志数据。 删除 Delta 表功能后,将无法访问表历史记录或“按时间顺序查看”。

请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?