删除 Delta 表功能(旧版)

重要

本文档已停用,可能不会更新。 本内容中提及的产品、服务或技术不再受支持。 请参阅删除 Delta Lake 表功能并降级表协议

本文记录了自 Databricks Runtime 14.3 LTS 开始的删除 Delta Lake 表功能的公共预览版行为。 Databricks 建议使用 Databricks Runtime 16.3 及更高版本中的正式发布功能,这将取代旧行为。 请参阅删除 Delta Lake 表功能并降级表协议

Azure Databricks 为删除表功能提供有限的支持。 删除表功能涉及以下阶段:

  • 禁用表中使用表格功能的属性。
  • 从支持表的数据文件中删除表功能的所有痕迹。
  • 从事务日志中删除使用表功能的事务条目。
  • 降级表格协议。

重要

所有 DROP FEATURE 操作都与所有并发写入发生冲突。

流式读取在遇到一个更改表元数据的提交时会失败。 如果你希望流继续进行,必须重启它。 有关建议的方法,请参阅结构化流式处理的生产注意事项

如何删除 Delta 表中的某个功能?

若要删除 Delta 表功能,请运行命令 ALTER TABLE <table-name> DROP FEATURE <feature-name> [TRUNCATE HISTORY] 。 请参阅 ALTER TABLE

必须使用 Databricks Runtime 14.3 LTS 或更高版本,并且具有 MODIFY 目标 Delta 表的权限。

可以删除哪些 Delta 表功能?

可以删除以下 Delta 表功能:

不能删除其他 Delta 表功能

重要

某些 Delta Lake 功能支持多表特性。 某些表功能依赖于其他表功能,并可能会阻止删除依赖表功能。 由于某些表功能无法删除,这意味着无法回滚某些 Delta Lake 功能的启用。

Databricks 建议始终测试依赖的工作负载和系统,以便与新功能兼容,然后再启用升级生产数据的读取器或编写器协议的功能。

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

注释

本节描述仅适用于 Databricks Runtime 16.0 及更低版本的模式。

DROP FEATURE 命令需要支持表功能读取和写入的协议版本。 早期协议版本中也支持增量columnMappingcheckConstraints功能。 根据表上启用的其他功能,可能需要先升级协议版本,然后才能删除这些功能。

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

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

如何删除 Delta 表特性?

由于 Delta 表功能会影响表的读取/写入方式,因此在事务日志中必须完全不存在它们才能完全删除。 功能删除的具体细节因功能而异,但以下部分提供了一般概述。

移除功能分为两个步骤,并需要一些时间才能完成。

步骤 1:准备删除表功能

在第一步中,必须准备删除表功能。 下面介绍了此步骤中发生的情况:

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

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

注释

如果使表处于此状态,则针对表的作不使用表功能,但协议仍支持表功能。 在完成最终降级步骤之前,Delta 客户端无法读取不支持表功能的表。

步骤 2:降级协议并删除表功能

在第二步中,截断并删除与该功能关联的所有事务历史记录。 这样,就可以删除表功能并降级协议。

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

重要

运行 ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY 会删除超过 24 小时的所有事务日志数据。 删除 Delta 表的某项功能后,无法访问表历史记录或对时间的回溯查询。

请参阅 Delta Lake 功能兼容性和协议