删除Delta表功能

注意

此功能在Delta Lake 3.0.0及以上版本中可用。

Delta Lake 对删除表功能提供有限支持。要删除表功能,必须满足以下条件:

  • 禁用使用表特性的表属性。

  • 从支持该表的数据文件中移除表特性的所有痕迹。

  • 从事务日志中移除使用表功能的事务条目。

  • 降级表协议。

在支持的情况下,您应仅使用此功能来保持与早期Delta Lake版本、Delta Sharing或其他Delta Lake读取器或写入器客户端的兼容性。

如何删除Delta表功能?

要移除Delta表功能,您需要运行ALTER TABLE DROP FEATURE [TRUNCATE HISTORY]命令。您必须使用Delta Lake 3.0.0或更高版本。

Delta表可以删除哪些功能?

您可以删除以下Delta表功能:

  • deletionVectors。参见什么是删除向量?

  • typeWidening-preview。参见Delta type widening。类型扩展功能在Delta Lake 3.2.0及以上版本中作为预览功能提供。

  • v2Checkpoint。参见V2 Checkpoint Spec。Delta Lake 3.1.0及以上版本已取消对V2检查点的支持。

  • columnMapping. 参见 Delta列映射。Delta Lake 3.3.0及以上版本支持删除列映射功能。

  • vacuumProtocolCheck。参见Vacuum Protocol Check Spec。Delta Lake 3.3.0及以上版本支持禁用vacuum协议检查。

  • checkConstraints. 参见 Constraints。Delta Lake 3.3.0及以上版本支持删除检查约束。

  • inCommitTimestamp。参见In-Commit Timestamps。In-Commit Timestamp功能在Delta Lake 3.3.0及以上版本中可用。

您不能删除其他Delta表功能

Delta表特性是如何被移除的?

由于Delta表特性代表读写协议,必须从事务日志中完全移除才能彻底删除。删除特性分为两个阶段,需要一定时间才能完成。具体删除方式因特性而异,但以下部分提供了总体概述。

准备删除表功能

在第一阶段,用户准备删除表功能。以下描述了此阶段发生的情况:

  1. 用户运行DROP FEATURE命令。

  2. 专门启用表功能的表属性其值被设置为禁用该功能。

  3. 控制与已删除功能相关行为的表属性,在引入该功能之前,其选项设置为默认值。

  4. 必要时,数据和元数据文件会根据更新的表属性进行重写。

  5. 命令运行完成并返回一条错误信息,通知用户必须等待24小时才能继续移除功能。

首次禁用某个功能后,您可以在完成协议降级前继续写入目标表,但不能使用您正在移除的表功能。

注意

如果让表保持这种状态,对该表的操作将不会使用表特性,但协议仍然支持表特性。在完成最终降级步骤之前,不理解表特性的Delta客户端将无法读取该表。

降级协议并删除表功能

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

  1. 至少24小时过后,用户再次执行DROP FEATURE命令,并带上TRUNCATE HISTORY子句。

  2. 客户端确认在指定的保留阈值内没有事务使用该表功能,然后将表历史截断至该阈值。

  3. 协议降级,移除了表功能。

  4. 如果表中存在的表特性可以由旧版协议版本表示,则该表的minReaderVersionminWriterVersion会被降级到支持Delta表正在使用的所有剩余特性的最低版本。

重要

执行ALTER TABLE DROP FEATURE TRUNCATE HISTORY会删除超过24小时的所有事务日志数据。删除Delta表功能后,您将无法访问表历史记录或时间旅行功能。

参见Delta Lake如何管理特性兼容性?