拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Apache Iceberg 1.11.0 发布:REST 目录协议、格式 V4 地基与全栈引擎升级全解析

Apache Iceberg 1.11.0 发布:REST 目录协议、格式 V4 地基与全栈引擎升级全解析 数据湖大数据数据存储【免费下载链接】icebergApache Iceberg项目地址https://gitcode.com/gh_mirrors/icebe/iceberg点击查看免费下载Apache Iceberg 社区于 2026 年 5 月 19 日正式发布 1.11.0 版本。本文基于本仓库发布的官方发布说明site/docs/blog/posts/2026-05-19-iceberg-1.11.0-release.md逐项拆解该版本在 REST Catalog 协议、OpenAPI 规范、Table Format V4 地基、加密、性能与各引擎集成方面的核心变化并结合仓库源码验证关键实现帮助读者完整掌握 1.11.0 的能力边界、升级影响与落地方式。版本概况与社区规模Apache Iceberg 1.11.0 是社区自 REST 目录协议引入以来推进最显著的版本之一凝聚了超过1,000 次提交、200 贡献者的成果。仓库的 site/docs/releases.md 同样记录了本次发布1.11.0 于 2026 年 5 月 19 日发布包含大量缺陷修复与新特性完整变更清单可在发布说明中查看。从版本定位看1.11.0 是一份协议级 地基级的发布一方面把 REST Catalog 从可用推向更完整另一方面为 Table Format V4 的演进提前铺设抽象层同时在各主流引擎Spark、Flink、Hive、Kafka Connect与云厂商AWS、Azure、GCP、Aliyun上落地了大量实用能力。REST Catalog协议走向完整远程扫描规划Remote Scan Planning1.11.0 最显著的变化是远程扫描规划。此前每个客户端都需要自行拉取 manifest list 与 manifest 来确定要读取的文件而远程扫描规划允许目录服务端直接规划表扫描并把文件扫描任务file scan tasks流式返回给客户端。客户端只拿到与查询相关的扫描任务从而显著降低驱动端driver内存压力让服务端优化对查询引擎透明生效。本次发布将远程扫描规划进一步扩展覆盖两类场景增量扫描incremental scans面向 Structured Streaming 工作负载#14661元数据表metadata tables如history、snapshots等#14881。同时提供了**按表覆盖per-table override**机制#15572中可以看到PlanTableScanResponse、FetchPlanningResultResponse等响应体结构它们是远程扫描规划在协议层的落点。基于 ETag 的新鲜度感知表加载Freshness-aware table loading 为表元数据引入了基于 ETag 的缓存。当客户端加载一张已持有元数据的表时服务端可以直接返回304 Not Modified而无需重发完整元数据载荷。这对紧密的读循环tight read loops和交互式工作负载收益明显——减少了大量不必要的往返请求。与之配套OpenAPI 规范为CommitTableResponse增加了 ETag 支持#14760使客户端能够检测加载表之后、提交之前是否有并发写改变了表与LoadTableResult上已有的 ETag 形成互补。幂等键Idempotency KeyIdempotency key support 为变更类目录操作引入了标准的Idempotency-Key请求头。重试的写操作——提交commit、建表create、删表drop——现在保证不会执行两次从而避免网络超时导致的重复快照与状态损坏。仓库核心实现core/src/main/java/org/apache/iceberg/rest/RESTUtil.java中定义了IDEMPOTENCY_KEY_HEADER Idempotency-Key并提供基于 UUIDv7 的键生成逻辑UUIDUtil.generateUuidV7().toString()确保每次重试使用稳定且唯一的幂等键服务端可以据此去重。Register View补齐视图生命周期Register View 让视图像表一样可以从元数据位置注册#14870。此前视图生命周期在 REST 目录中是不完整的——表可以从其 metadata location 注册视图却不行。现在视图也可以通过 REST API 注册支持跨目录迁移以及重新挂接孤儿视图元数据。配套地OpenAPI 规范新增了/register-viewREST 端点#14869将视图注册作为一项可独立授权的目录能力。服务端可以把它作为可选扩展实现不会影响现有客户端。自定义表与视图操作Custom Table and View Operations 允许用户向 REST 目录注入自定义的TableOperations与ViewOperations在不 fork 目录实现的前提下扩展或覆盖默认行为。这为云服务商与内部平台团队提供了钩子机制可以插入自定义逻辑如审计、缓存、权限校验。协议级新语义小结除上述主能力外REST 协议还新增了若干协议级语义added-rows字段恢复快照元数据中恢复added-rows#14048引擎与监控工具无需扫描数据文件即可获得每个快照的行数referenced-by字段loadTable响应新增referenced-by字段#13810列出依赖该表的视图与其他对象使依赖追踪下沉到协议层scan-planning-mode字段LoadTableResult中服务端可通告其偏好的扫描规划模式#14867客户端无需探测即可决定采用远程还是本地规划404 语义/v1/config在请求的 warehouse 不存在时返回 404#15746替代此前含糊的错误响应。OpenAPI 规范更新1.11.0 在 OpenAPI 层面收紧客户端与服务端的契约主要更新包括更新项说明关联 PRNamespace 分隔符可由服务端配置服务端可在 config 端点通告自定义 namespace 分隔符支持非.分隔符的目录#14448/register-view端点视图注册作为独立授权能力加入规范#14869CommitTableResponse支持 ETag客户端可检测 load 与 commit 之间的并发写#14760S3 签名端点升入主规范S3 signing endpoint 从扩展移入主 OpenAPI 规范成为协议正式部分#15450分区统计进入TableUpdateSetPartitionStatisticsUpdate、RemovePartitionStatisticsUpdate纳入TableUpdate联合类型分区统计走标准提交路径#14957存储凭据随扫描规划返回设置include-credentials标志后PlanTableScanResponse、FetchPlanningResultResponse直接携带存储凭据远程扫描规划客户端无需单独拉取凭据#15524仓库中的 open-api/rest-catalog-open-api.yaml 即为本次协议更新的具体载体读者可对照该文件查看各端点与字段的完整定义。Spec 更新SQL UDF 与地理空间类型SQL UDF 规范SQL UDF Specification。UDF 具备以下特性版本化函数可以有多个版本多 SQL 方言支持同一函数可适配不同引擎的 SQL 方言跨引擎可移植函数管理首次进入目录层摆脱了每个引擎各自管理函数的碎片化现状。地理空间边界框类型Geospatial bounding box types 目录即为该能力在 API 层的实现所在。性能与可靠性LIMIT 下推LIMIT pushdown to scan 使得查询包含LIMIT子句时扫描到足够行即停止而不再读取所有匹配文件。对探索式查询而言I/O 量可能下降若干个数量级。向量化读取覆盖更多 Parquet 编码向量化读取新增覆盖以下 Parquet 编码消除逐行回退row-at-a-time fallbackBYTE_STREAM_SPLIT#15373DELTA_LENGTH_BYTE_ARRAY与DELTA_BYTE_ARRAY#15362。这对使用 float/double 列且采用BYTE_STREAM_SPLIT编码的科学计算与机器学习数据集尤为受益。实现位于 parquet/src/main/java/org/apache/iceberg/parquet 模块。快照过期清理模式Snapshot expiration cleanup modes 引入新的cleanupModeAPI让用户对快照过期时的清理范围拥有更细粒度控制——例如可以决定是否删除孤儿数据文件、是否保留特定文件。唯一表位置Unique Table LocationsUnique table locations 通过新的目录属性在表存储路径上追加 UUID防止DeleteOrphanFiles误删改名表文件的灾难性数据丢失场景同时支持按表的存储生命周期策略与成本归因。该属性在源码中定义于 core/src/main/java/org/apache/iceberg/CatalogProperties.java/** * Requests that the catalog provide unique locations for new tables. * * pRelevant only for catalogs which support unique table locations. */ public static final String UNIQUE_TABLE_LOCATION unique-table-location; public static final boolean UNIQUE_TABLE_LOCATION_DEFAULT false;即默认关闭需要在支持该能力的目录上显式开启unique-table-locationtrue定时凭据刷新与 GCS 分析加速AWS S3FileIO#15678与GCS FileIO#15696新增定时凭据刷新在凭据过期前主动轮换消除长期运行的 Spark/Flink 作业中因初始凭据租约过期而导致的瞬时故障。GCSAnalyticsCore 库#14333集成进 GCSFileIO为 Google Cloud Storage 带来分析优化 I/O提升大规模分析工作负载的读吞吐与 S3 上的 AWS Analytics Accelerator 集成形成对应。Format V4 地基1.11.0 开始为 Table Format V4 铺设基础。自适应元数据树基础类型新增的基础类型——TrackedFile、TrackingInfo、ContentInfo、ManifestStats#15049——是 V4 自适应元数据树adaptive metadata tree的构建块定义了 Iceberg 在规模化场景下如何追踪文件。相关实现#15854、构建器#16092与分区支持#16253在整个发布周期中迭代添加。FormatModel 抽象新的 FormatModel 抽象 用可插拔接口取代硬编码的文件格式处理。Parquet#15253、ORC#15255、Avro 与 Arrow 各自实现了FormatModel契约使新增格式或定制读写行为更加简单。仓库中的核心接口定义在 core/src/main/java/org/apache/iceberg/formats/FormatModel.javapublic interface FormatModelD, S { /** The file format which is read/written by the object model. */ FileFormat format(); /** Return the row type class for the object model implementation processed by this factory. */ Class? extends D type(); /** Return the schema type class for the object model implementation processed by this factory. */ ClassS schemaType(); /** Creates a writer builder for data files. */ ModelWriteBuilderD, S writeBuilder(EncryptedOutputFile outputFile); /** Creates a file reader builder for the specified input file. */ ReadBuilderD, S readBuilder(InputFile inputFile); }接口的 Javadoc 明确说明FormatModel充当存储格式FileFormat与预期输入/输出数据结构之间的桥接通过免中间表示的直转优化性能处理引擎可以定义自己的对象模型并实现该接口通过 FormatModelRegistry 注册到 Iceberg。各格式的实现包括parquet/src/main/java/org/apache/iceberg/parquet/ParquetFormatModel.javaorc/src/main/java/org/apache/iceberg/orc/ORCFormatModel.javacore/src/main/java/org/apache/iceberg/avro/AvroFormatModel.javaarrow/src/main/java/org/apache/iceberg/arrow/vectorized/ArrowFormatModels.java同时 Spark、Flink 等引擎侧也有对应模型如 spark/v4.2/spark/src/main/java/org/apache/iceberg/spark/source/SparkFormatModels.java、flink/v2.3/flink/src/main/java/org/apache/iceberg/flink/data/FlinkFormatModels.java并配有 data/src/test/java/org/apache/iceberg/data/ReadFormatModelTests.java 等测试用例验证读写闭环。加密1.11.0 让表级加密真正对用户可用Hive 表加密激活Encryption integration and test 通过包含表主密钥 ID 的表属性激活 Hive 表的加密机制Manifest list 加密#7770将加密覆盖扩展到 manifest list 文件确保快照级元数据与数据文件一同受到保护自动密钥轮换#14396支持无需人工介入地轮换密钥加密密钥KEK云 KMS 支持#15272通过统一的encryption.kms-type属性覆盖 AWS、Azure、GCPHive 目录元数据完整性校验#14685加密表的元数据完整性检查。源码中的属性定义同样位于 core/src/main/java/org/apache/iceberg/CatalogProperties.javapublic static final String ENCRYPTION_KMS_TYPE encryption.kms-type; public static final String ENCRYPTION_KMS_TYPE_AWS aws; public static final String ENCRYPTION_KMS_TYPE_AZURE azure; public static final String ENCRYPTION_KMS_TYPE_GCP gcp; public static final String ENCRYPTION_KMS_IMPL encryption.kms-impl; public static final String ENCRYPTION_KMS_IMPL_AWS org.apache.iceberg.aws.AwsKeyManagementClient; public static final String ENCRYPTION_KMS_IMPL_AZURE org.apache.iceberg.azure.keymanagement.AzureKeyManagementClient; public static final String ENCRYPTION_KMS_IMPL_GCP org.apache.iceberg.gcp.GcpKeyManagementClient;可以看到三种云厂商的 KMS 客户端实现类均已在仓库中落地分别位于 aws、azure、gcp 模块使用时只需配置encryption.kms-typeaws|azure|gcp详细用法可参考 docs/docs/encryption.md。新 APIContent Stats API#13933引入文件级统计类——min/max 值、null 计数等为查询规划器提供更丰富的信息以做出更好的文件跳过file skipping与连接排序join-ordering决策Partition Stats Scan API#14640以可组合、可过滤的接口取代旧的单次分区统计读取器与 Iceberg 其余 Scan API 保持一致风格Overwrite-aware 表注册#15525与Scan API 中的 FileIO 访问#15561补全了本版本其余 API 增补。引擎更新SparkSpark 4.1 支持#14155MERGE INTO schema 演进初始支持合并写入期间的 schema 变更#14970并可通过表属性控制#15825Shredded Variant 写入#14297读取由行式 Parquet 读取器的ArrayData.getVariant支撑#14349异步微批规划器#15299Structured Streaming 中异步规划下一个微批降低调度开销自适应 split 大小#16088会话级配置可调 split 大小与并行度。异步微批规划器#15876、自适应 split 大小#16344与 shredded Variant 写入#16241同样在 Spark 4.0 可用。Spark 3.4 支持在本版本标记弃用#14099。FlinkFlink 2.1 支持#13714Flink 1.19 被移除。行谱系Row lineage支持读取_row_id与_last_updated_sequence_number#14148并且行谱系在RewriteDataFiles中得以保留#14149使行身份在压缩后依然存活。Flink Dynamic Sink 重大改进删除向量Deletion vector支持#14414无需重写数据文件即可实现高效行级删除Variant 类型支持#15265Flink 2.1 中支持半结构化数据摄取与处理Schema 演进支持删列#14728与大小写不敏感字段匹配#14729SQL 可配置选项Dynamic Sink 选项可通过 Flink SQL 配置#15279本版本又新增更多 SQL 选项#15780提交后维护#15566可通过 IcebergSink Builder 注册任意维护任务无需单独管道。TableMaintenance 协调器锁#15151防止分布式部署中并发维护操作冲突并可从 Flink SQL 访问#15459。维护能力增强RewriteDataFiles支持动态过滤器#15865用于定向压缩分支支持#15672允许针对特定分支运行维护任务。纳秒时间戳精度#15475匹配 Iceberg 时间戳规范的完整范围满足 IoT、金融与科学工作负载需求UUID 类型支持#16097加入 Avro 与 Parquet 读写器。Hive Catalog视图替换现在会同步更新 HMS 中存储的查询#14831保持视图定义变更时 Hive Metastore 同步注册表时检测同名视图是否已存在#15010防止意外覆盖快照过程snapshot procedure正确处理含 Variant 列的表#15964。Kafka ConnectVariant 类型摄取#15283半结构化 JSON 数据可直接摄入 Iceberg 的 Variant 类型提交时表 UUID 校验#14979提交时验证表身份防止写入过期或被替换的表SMT offset 追踪修复#15880修复 Single Message Transform 修改记录 topic 时可能导致的重复记录问题。云集成AWSKMS 端点可配置通过kms.endpoint属性#14246连接自定义或私有 KMS 端点S3 请求分块编码可配置#15242适合需要控制数据流向 S3 方式的工作负载自定义凭据提供器优先#15249配置自定义凭据提供器时优先于默认提供器链明确认证顺序代理配置#15506HTTP 客户端可通过系统属性与环境变量配置代理重试策略#15094应用于 Glue 与 DynamoDB 客户端提升高吞吐目录操作的可靠性。AzureAzure Key Vault 的 KeyManagementClient 实现#13186为 Iceberg 信封加密提供原生 Azure KMS 支持Token 凭据提供器支持#14136可指定自定义 token 凭据提供器类支持托管身份与服务主体等 Azure 认证流。GCPBigQueryMetastoreCatalog 服务账号模拟#14447基础服务账号可模拟另一个账号访问 BigQuery 元数据新属性gcp.auth.credentials-key#14713允许直接在目录配置中传入 base64 编码的服务账号密钥BigQueryMetastoreCatalog ETag 冲突检测#14940提交表更新时消除冗余表加载防止并发写下的更新丢失。AliyunOSS 的 RRSA 认证#14443为阿里云 OSS 上的 Iceberg 表带来细粒度 IAM 风格访问控制。仓库实现位于 aliyun/src/main/java/org/apache/iceberg/aliyun/AliyunClientFactories.java检测到 RRSA 环境变量RRSA 即 RAM Roles for Service Accounts允许 pod 通过服务账号角色访问不同云服务后基于 RRSA 凭据构建 OSS 客户端代码如下// Check if RRSA environment is available if (rrsaEnabled) { LOG.debug(Detected RRSA environment variables, creating OSS client with RRSA credentials for endpoint: {}, endpoint); // Getting credentials using RRSA return new OSSClientBuilder().build(endpoint, ossCredProvider); }Breaking Changes升级 1.11.0 前需要关注以下破坏性变更变更说明关联 PRApache DataFusion Comet 移除Comet 集成已从 Spark 模块中删除#15674Java 11 弃用Java 11 支持已移除Java 17 为最低要求版本#14400Flink 1.19 移除请升级到 Flink 1.20 或 2.x#13714依赖更新本版本的主要依赖版本变化如下依赖旧版本新版本AWS SDK2.33.02.44.4Parquet1.16.01.17.1ORC1.9.71.9.8Avro1.12.01.12.1Nessie0.104.50.107.5Guava33.4.8-jre33.6.0-jreHadoop3.4.13.4.3Jetty11.0.2612.1.8新增支持 Spark 4.14.1.1与 Flink 2.12.1.0。升级与参与升级路径若当前使用 Spark 3.4请规划迁移到 Spark 3.5 或 4.xSpark 3.4 已弃用若使用 Flink 1.19请升级到 Flink 1.20 或 2.x同时确认运行环境满足 Java 17 最低要求。REST 目录用户1.11.0 引入的远程扫描规划、幂等键与 ETag 能力均需要目录服务端如支持这些扩展的 REST catalog 实现配合客户端可渐进式启用如通过 per-table override 按表退出远程规划。进一步阅读本仓库中可继续阅读 docs/docs/rest-catalog.md、docs/docs/rest-protocol.md 与 docs/docs/encryption.md完整的协议定义见 open-api/rest-catalog-open-api.yaml发布历史总览见 site/docs/releases.md。Apache Iceberg 1.11.0 在协议完备性、格式演进地基与引擎集成三个维度同时取得实质进展。无论是正在搭建 REST 目录服务的平台团队还是运行 Spark/Flink 大规模作业的数据工程团队都可以从本版本中获得直接收益——而 Format V4 的早期铺垫则预示着未来元数据树与文件格式处理将迎来更深层的变化。赞分享数据湖大数据数据存储【免费下载链接】icebergApache Iceberg项目地址https://gitcode.com/gh_mirrors/icebe/iceberg点击查看免费下载相关推荐Apache Iceberg C 0.2.0 发布表扫描、REST Catalog 与表达式系统的全面升级Apache Iceberg C 0.2.0 发布表扫描、REST Catalog 与表达式系统的全面升级 Apache Iceberg 社区于 2026数据湖大数据数据存储Apache Iceberg REST Catalog 协议与 API 规范深度指南从 OpenAPI 契约到引擎接入实战Apache Iceberg REST Catalog 协议与 API 规范深度指南从 OpenAPI 契约到引擎接入实战 Apache Iceberg 的数据湖大数据数据存储Apache Iceberg Python 0.11.0 版本深度解析读写性能、快照管理与 REST 目录能力全面升级Apache Iceberg Python 0.11.0 版本深度解析读写性能、快照管理与 REST 目录能力全面升级 Apache Iceberg Pyth数据湖大数据数据存储上一篇免费音乐播放器Salt Player安卓播放器完整使用指南下一篇Windows持久化机制取证PWF教你定位Run键与计划任务后门创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表