跳到内容

Delta Lake 如何管理功能兼容性?

许多 Delta Lake 优化需要启用表上的 Delta Lake 特性。Delta Lake 特性总是向后兼容的,因此较低 Delta Lake 版本写入的表总是可以由较高 Delta Lake 版本读取和写入。启用某些特性会破坏与较低 Delta Lake 版本中运行的工作负载的前向兼容性。对于破坏前向兼容性的特性,您必须更新所有引用已升级表的工作负载,以使用兼容的 Delta Lake 版本。

哪些 Delta Lake 功能需要客户端升级?

标题为“哪些 Delta Lake 功能需要客户端升级?”的部分

以下 Delta Lake 特性会破坏前向兼容性。特性是按表启用的。

特性需要 Delta Lake 版本或更高版本文档
CHECK 约束Delta Lake 0.8.0CHECK 约束
生成列Delta Lake 1.0.0使用生成列
列映射Delta Lake 1.2.0Delta 列映射
变更数据流Delta Lake 2.0.0变更数据流
删除向量Delta Lake 2.3.0什么是删除向量?
表特性Delta Lake 2.3.0什么是表特性?
不带时区的时间戳Delta Lake 2.4.0TimestampNTZType
Iceberg 兼容性 V1Delta Lake 3.0.0IcebergCompatV1
Iceberg 兼容性 V2Delta Lake 3.1.0IcebergCompatV2
V2 检查点Delta Lake 3.0.0V2 检查点规范
域元数据Delta Lake 3.0.0域元数据规范
聚簇Delta Lake 3.1.0为 Delta 表使用液态集群
行跟踪Delta Lake 3.2.0为 Delta 表使用行跟踪
类型扩展(预览)Delta Lake 3.2.0Delta 类型拓宽
类型扩展Delta Lake 4.0.0Delta 类型拓宽
标识列Delta Lake 3.3.0使用标识列
变体类型Delta Lake 4.0.0Delta 类型拓宽
变体分片(预览)Delta Lake 4.0.0变体分片
检查点保护Delta Lake 4.0.0检查点保护

每个 Delta 表都有一个协议规范,它指示表支持的功能集。协议规范由读取或写入表的应用程序使用,以确定它们是否可以处理表支持的所有功能。如果应用程序不知道如何处理表中协议中列出的受支持功能,则该应用程序将无法读取或写入该表。

协议规范分为两个组件:*读取协议*和*写入协议*。

读取协议列出了表支持的所有功能,应用程序必须理解这些功能才能正确读取表。升级表的读取协议要求所有读取器应用程序都支持添加的功能。

写入协议列出了表支持的所有功能,应用程序必须理解这些功能才能正确写入表。升级表的写入协议要求所有写入器应用程序都支持添加的功能。它不影响只读应用程序,除非读取协议也已升级。

某些特性需要同时升级读取协议和写入协议。其他特性只需要升级写入协议。

例如,对 CHECK 约束的支持是写入协议特性:只有写入应用程序需要了解 CHECK 约束并强制执行它们。

相比之下,列映射需要同时升级读取协议和写入协议。因为数据在表中存储方式不同,读取器应用程序必须理解列映射才能正确读取数据。

有关升级的更多信息,请参阅升级协议版本

在 Delta Lake 2.3.0 及更高版本中,Delta Lake 表特性引入了细粒度标志,指定给定表支持哪些特性。表特性是协议版本的后继者,旨在为读取和写入 Delta Lake 的客户端提供更高的灵活性。请参阅什么是协议版本?

Delta 表特性是一个标记,指示表支持特定特性。每个特性要么是写入协议特性(意味着它只升级写入协议),要么是读/写协议特性(意味着读写协议都升级以启用该特性)。

要了解 Delta Lake 中支持的表特性的更多信息,请参阅Delta Lake 协议

表特性是否会改变 Delta Lake 特性的启用方式?

标题为“表特性是否会改变 Delta Lake 特性的启用方式?”的部分

如果您只通过 Delta Lake 与 Delta 表交互,您可以继续使用最低 Delta Lake 要求来跟踪 Delta Lake 特性的支持。如果您使用其他系统从 Delta 表读取和写入,您可能需要考虑表特性如何影响兼容性,因为存在系统可能无法理解已升级协议版本的风险。

协议版本是一个协议号,指示特定的表特性分组。在 Delta Lake 2.3.0 及更早版本中,您不能单独启用表特性。协议版本捆绑了一组特性。

Delta 表为读取协议和写入协议指定了单独的协议版本。Delta 表的事务日志包含支持 Delta Lake 演进的协议版本信息。

协议版本捆绑了以前协议中的所有特性。请参阅按协议版本划分的特性

下表显示了 Delta Lake 特性所需的最低协议版本。

特性minWriterVersionminReaderVersion文档
基本功能21欢迎来到 Delta Lake 文档
CHECK 约束31CHECK 约束
变更数据流41变更数据流
生成列41使用生成列
列映射52Delta 列映射
标识列61使用标识列
表特性读取71什么是表特性?
表特性写入73什么是表特性?
删除向量73什么是删除向量?
不带时区的时间戳73TimestampNTZType
Iceberg 兼容性 V172IcebergCompatV1
V2 检查点73V2 检查点规范
真空协议检查73真空协议检查规范
行跟踪73为 Delta 表使用行跟踪
类型扩展(预览)73Delta 类型拓宽
类型扩展73Delta 类型拓宽
变体类型73变体类型
变体分片(预览)73变体分片

您可以选择手动将表更新到较新的协议版本。我们建议使用支持表所需的 Delta Lake 特性的最低协议版本。升级写入器协议可能比升级读取器协议造成的干扰小,因为使用旧 Delta Lake 版本的系统和工作负载仍然可以从表中读取,即使它们不支持更新的写入器协议。

要将表升级到较新的协议版本,请使用 DeltaTable.upgradeTableProtocol 方法

-- Upgrades the reader protocol version to 1 and the writer protocol version to 3.
ALTER TABLE <table_identifier> SET TBLPROPERTIES('delta.minReaderVersion' = '1', 'delta.minWriterVersion' = '3')