删除Delta表功能
注意
此功能在Delta Lake 3.0.0及以上版本中可用。
Delta Lake 对删除表功能提供有限支持。要删除表功能,必须满足以下条件:
禁用使用表特性的表属性。
从支持该表的数据文件中移除表特性的所有痕迹。
从事务日志中移除使用表功能的事务条目。
降级表协议。
在支持的情况下,您应仅使用此功能来保持与早期Delta Lake版本、Delta Sharing或其他Delta Lake读取器或写入器客户端的兼容性。
如何删除Delta表功能?
要移除Delta表功能,您需要运行ALTER TABLE 命令。您必须使用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表特性代表读写协议,必须从事务日志中完全移除才能彻底删除。删除特性分为两个阶段,需要一定时间才能完成。具体删除方式因特性而异,但以下部分提供了总体概述。
准备删除表功能
在第一阶段,用户准备删除表功能。以下描述了此阶段发生的情况:
用户运行
DROP FEATURE命令。专门启用表功能的表属性其值被设置为禁用该功能。
控制与已删除功能相关行为的表属性,在引入该功能之前,其选项设置为默认值。
必要时,数据和元数据文件会根据更新的表属性进行重写。
命令运行完成并返回一条错误信息,通知用户必须等待24小时才能继续移除功能。
首次禁用某个功能后,您可以在完成协议降级前继续写入目标表,但不能使用您正在移除的表功能。
注意
如果让表保持这种状态,对该表的操作将不会使用表特性,但协议仍然支持表特性。在完成最终降级步骤之前,不理解表特性的Delta客户端将无法读取该表。
降级协议并删除表功能
要删除表功能,必须移除与该功能相关的所有事务历史记录并降级协议。
至少24小时过后,用户再次执行
DROP FEATURE命令,并带上TRUNCATE HISTORY子句。客户端确认在指定的保留阈值内没有事务使用该表功能,然后将表历史截断至该阈值。
协议降级,移除了表功能。
如果表中存在的表特性可以由旧版协议版本表示,则该表的
minReaderVersion和minWriterVersion会被降级到支持Delta表正在使用的所有剩余特性的最低版本。
重要
执行ALTER TABLE 会删除超过24小时的所有事务日志数据。删除Delta表功能后,您将无法访问表历史记录或时间旅行功能。