Delta Lake 4.0.0 新特性
发布时间:2026-01-10 | 作者:小白学苑
数据湖是存储大量结构化和非结构化数据的黄金标准,但经常会遇到数据不一致、模式演变和性能问题。Delta Lake通过在Apache Spark之上添加ACID事务、模式实施和可扩展的数据处理来解决这些挑战。
Delta Lake是什么?
Delta Lake是一个开源存储层,旨在与Apache Spark集成,使其成为使用Spark生态系统的团队的首选解决方案。它为大数据环境引入了ACID(原子性、一致性、隔离性、持久性)事务。
通过启用健壮的元数据管理、版本控制和模式实施,Delta Lake增强了数据库,并确保了分析和机器学习工作负载的高数据质量。
Delta Lake 4.0.0 新特性
最新的Delta Lake 4.0.0 于2025年6月发布最终版。这个版本包含了几个令人兴奋的新特性。
核心亮点
[Spark] 目录托管表的预览支持:作为面向目录的新型湖仓表格式特性,该功能将Delta Lake升级为目录导向的架构。目前仍处于RFC阶段,相关协议正在持续开发中,后续可能发生变更。
[Spark] Delta Connect扩展:作为Spark Connect的拓展组件,支持在Spark Connect解耦式客户端-服务器架构中使用Delta,实现跨架构的数据操作。
[Spark] Variant数据类型支持:为半结构化数据存储与处理提供支持,兼顾灵活性与性能表现。
[Spark] 新型DROP FEATURE实施方案:支持即时删除表功能特性且无需截断历史记录。
[Kernel] 版本校验和读写支持:通过校验和机制增强数据一致性保障与调试能力。
[Kernel] 日志压缩文件读写支持:支持读取日志压缩文件以加速快照构建,并提供提交后钩子机制实现压缩文件写入。
[Kernel] 集群表功能支持:支持定义与更新表的聚类列,为数据聚类方案提供基础能力。
[Kernel] 行追踪表写入支持:支持向启用行追踪功能的表写入数据,并自动处理行标识冲突。
[Kernel] 文件统计信息写入支持:支持将引擎提供的文件统计信息写入Delta日志,实现基于查询过滤器的运行时数据跳过优化。
Delta Spark
Delta Spark 4.0是基于Apache Spark™4.0构建的。
- 文档: https://docs.delta.io/4.0.0/index.html
- API文档: https://docs.delta.io/4.0.0/delta-apidoc.html#delta-spark
- Maven artifacts:delta-spark_2.13,delta_contribs_2.13,delta-storage,delta-storage-s3-dynamodb,delta-connect-client_2.13,delta-connect-common_2.13,delta-connect-server_2.13
- Python artifacts:https://pypi.org/project/delta-spark/4.0.0/
这个版本的主要特点是:
- Delta Connect为Apache Spark增加了对Delta Lake 的 Scala API 和Python API的Spark Connect支持。Spark Connect是Apache Spark 4.0中发布的一个新项目,它增加了一个解耦的客户端-服务器基础设施,允许从任何地方从Spark进行远程连接。Delta Connect使DeltaTable接口与新的Spark Connect协议兼容。
- 目录托管表(catalog-managed tables)的预览支持:Delta Spark 现已支持对启用 catalogOwned-preview 功能的表进行读写操作。该功能允许目录对其管理的表进行全量提交代理,使目录能够获得必要的控制权与可见性,从而阻止无效操作(例如违反外键约束的数据提交),强化安全与访问控制,并为未来性能优化奠定基础。目前写入操作支持 INSERT、MERGE INTO、UPDATE 和 DELETE。(注:该功能仍处于 RFC 阶段,相关协议尚在持续开发中,后续可能发生变更。请勿在生产环境中启用 catalogOwned-preview 功能,且基于此预览功能创建的表可能与未来版本的 Delta Spark 不兼容。)
- Variant 数据类型支持:Variant 是一种全新的 Apache Spark 数据类型。该数据类型支持对半结构化数据进行灵活高效的弹性处理,无需用户预定义数据模式。Variant 数据在写入时无需固定结构,而是采用读时模式的查询方式。其特性支持无需预定义写入模式的灵活数据摄取,并通过 Spark Variant 二进制编码格式实现更快速的数据处理。
- shredded variants(分片式变体数据)的预览支持:分片式变体(Shredded variants)是一种存储优化技术,通过牺牲部分写入性能换取高效子字段提取能力,可实现高达20倍的读取性能提升。分片式变体数据将依据Parquet Variant分片规范进行存储。(请注意,该功能尚处于预览阶段,启用此预览功能创建的数据表可能与未来版本的Delta Spark不兼容。)
- Type Widening (类型扩展功能)现已支持更广泛的数据类型变更,并结束预览状态正式发布。该功能支持在不重写底层数据文件的情况下,直接修改Delta表中列的数据类型。启用类型扩展功能的数据表需使用Delta 3.3及以上版本进行读取。
-
支持不截断历史记录的删除表功能特性:当前删除功能特性的实施方案需要执行两次命令,且间隔24小时等待期,同时会导致Delta表的历史记录被截断至最近24小时。新的DROP FEATURE实施方案支持即时删除功能特性且不截断历史记录。删除功能特性会为表引入新的写入器特性—checkpointProtection功能。
使用新操作方式删除功能特性的方法如下:ALTER TABLE table_name DROP FEATURE feature_name
仍可通过以下方式沿用原有操作方式删除功能特性(将截断历史记录):ALTER TABLE table_name DROP FEATURE feature_name TRUNCATE HISTORY
checkpointProtection 功能特性支持通过历史记录截断方式删除。
Delta Kernel Java
API 文档: https://docs.delta.io/4.0.0/api/java/kernel/index.html
Maven artifacts:
- delta-kernel-api:https://repo1.maven.org/maven2/io/delta/delta-kernel-api/4.0.0/
- delta-kernel-defaults:https://repo1.maven.org/maven2/io/delta/delta-kernel-defaults/4.0.0/
Delta Kernel项目是一套Java与Rust库集合,用于构建能够读写Delta表的连接器,无需理解Delta协议的技术细节。
本次版本的核心特性包括:
- Java Kernel版本校验和支持:Java Kernel现支持通过提交后钩子加载和写入每次表提交的版本校验和。文件计数、表大小、数据分布直方图等详细指标为数据生态系统提供更强的一致性保证和更优的调试工具。该校验和还可用于跳过读取多个日志文件来获取Java Kernel中的协议与元数据操作,从而降低快照初始化延迟。
- 支持当在日志回放期间读取delta日志时,读取日志压缩文件:该功能可加速快照构建过程,从而惠及所有需要创建快照的操作流程,如表扫描或数据写入。
- 支持将日志压缩文件写入作为提交后钩子:若表状态需要创建压缩文件,事务提交时将返回此钩子。调用该钩子将构建并写入压缩文件。压缩间隔可通过在TransactionBuilder上调用TransactionBuilder.withLogCompactionInterval进行设置。
- 支持集群表功能:该功能使Kernel能够定义和更新表的聚类列,为Delta聚类实现提供聚类信息支持。用户现可通过txnBuilder.withClusteringColumns创建集群表或更新现有聚类列。
- 支持在Kernel中收集主要操作指标报告:涵盖快照构建、扫描及事务等核心操作,并向引擎报告。这些报告包含当前操作的元数据及相关性能指标。引擎可通过创建MetricsReporters与该框架集成。在默认引擎中,我们提供了基础日志记录器,通过Log4J序列化报告并进行日志记录。
- 支持向启用行追踪功能的表写入数据:对于此类表,Kernel会为所有已提交行分配唯一的新行ID和行提交版本。同时能解决与分配重叠行ID和行提交版本的事务冲突。
- 改进表功能框架:更好支持读写器功能及其升级/启用流程。该框架标准化了向Kernel添加新功能的流程,便于将其集成到读写路径中。作为框架改进的一部分:新增支持向启用deletionVectors、v2Checkpoint和timestampNtz功能的表追加数据。
- 支持将文件统计信息写入Delta日志:引擎在调用generateAppendActions时可提供文件统计信息,Kernel会将其序列化并写入Delta日志。这些统计信息在读取过程中用于基于查询条件进行文件剪枝。
Delta Sharing
在本次Delta Sharing Spark版本中,我们将delta-sharing-client从1.2.2升级至1.3.2,主要带来以下更新:
- 升级Spark至4.0.0版本:平台升级至Spark 4.0.0、Java 17及Scala 2.13。
- 优化缓存使用以提升性能:简化Spark Parquet IO缓存的键结构,实现对相同查询的缓存复用,加速查询性能。
-
增强日志记录与错误传递机制,以便取得更好的可观测性:
- 在Delta Sharing客户端关键代码路径新增详细日志,辅助问题排查。
- 优化流式查询失败场景下的错误传递机制,将服务端错误信息透传至客户端。
当前限制说明
由于Spark 4.0暂未支持UniForm与Iceberg集成,Delta Spark中该功能目前不可用,将在后续版本中予以支持。