当前位置: 首页 > news >正文

为什么 Iceberg v3 是数据湖仓的“iPhone 时刻“?

2026年3月4日,snowflake 在其官方博客发表了名为《Announcing Apache Iceberg v3 Support in Public Preview on Snowflake》,一个月后的4月9日,Databricks 也在其官方博客发表了名为《The Next Era of the Open Lakehouse: Apache Iceberg™ v3 in Public Preview on Databricks》的文章。至此,四大云厂商(Databricks、Snowflake、Google、Dremio)湖仓引擎全力押注到 Iceberg v3,Iceberg 不再是"候选标准之一",它就是标准本身

Apache Iceberg v3 的规范在 2025 年 6 月正式通过,它不是一次常规的版本升级,而是数据湖仓架构的一次质变。其补齐了湖仓一体最后的几块关键拼图,让"用开放格式替代封闭数仓"从愿景变成了现实可行的工程路径。这就是为什么越来越多的云厂商湖仓架构押注到 Iceberg。今天,我们就来详细介绍一下 Iceberg v3 比较重要的新功能。

一、删除向量(Deletion Vectors):行级更新终于不再是性能灾难

以前有什么问题?

Iceberg v2 引入了行级删除的能力(通过 positional delete files),这在当时是一个巨大的进步。但它有一个严重的性能瓶颈:每次删除都会生成独立的小文件,查询时引擎需要将这些小文件与原始数据文件逐一匹配、合并、过滤。

当你的表有频繁的行级更新操作(比如用户修改订单状态、CDC 实时同步上游数据库变更),这些删除文件会像雪花一样越积越多。一张被频繁更新的大表,可能积累成千上万个小的删除文件。每次查询都要先"扫雪",然后才能真正读数据。

这样导致的问题就是写入越频繁的表,读取越慢。恰恰是最需要实时分析的场景,性能最差。

v3 怎么解的?

Iceberg v3 引入了二进制删除向量(Binary Deletion Vectors),这是一个根本性的架构变革。

核心思路:给每个数据文件附加一个位图(Bitmap),位图中的每一位对应数据文件中的一行。0表示有效行,1表示已删除行。底层数据结构采用Roaring Bitmap——一种专门为稀疏整数集设计的高效压缩算法。

这意味着什么?

  • 不再有成千上万的小删除文件。所有删除信息被压缩进一个紧凑的位图,附着在对应的数据文件旁边(通常存储在.puffin文件中)。

  • 查询时不再需要"扫雪"。引擎读取数据文件时,同时读取对应的删除向量,做一次位运算就能跳过所有被删除的行。开销极小,几乎可以忽略。

  • 写入放大大幅降低。修改几行数据不再需要重写整个数据文件,只需更新位图即可。

Databricks 在其博客中给出了一个惊人的数据:删除向量的数据处理速度比传统的 Copy-on-Write 方式快 10 倍。

更重要的是,v3 还强制要求引擎在写入时必须为每个数据文件维护单一的删除向量(而不是允许多个删除文件散落),从根本上杜绝了"小文件地狱"的回归。

二、行级血缘(Row Lineage):CDC 从"手工活"变成"表的固有属性"

以前有什么问题?

在 Iceberg 之前格式的表中,"这张表从上次查询以来,哪些行发生了变化?"——这个看似简单的问题,回答起来非常痛苦。

你需要自己维护增量标记:在 ETL 管道里加时间戳字段、维护 watermark、做全表比对或者依赖外部 CDC 工具(Debezium、Maxwell)来追踪变更。这些方案要么重、要么脆、要么贵。

下游要做增量刷新?对不起,你得自己想办法搞清楚哪些数据变了。这是一个困扰了整个数据工程界多年的基础设施级痛点。

v3 怎么解的?

Iceberg v3 在规范层面引入了行级血缘。每一行数据现在天然携带两个元数据字段:

  • 行 ID(Row ID):全局唯一的行标识符,伴随行的整个生命周期。

  • 序列号(Sequence Number):记录该行最后一次被添加或修改的提交版本。

这两个字段不是你手动加的业务字段,而是Iceberg 表格式规范本身的一部分。所有写入引擎在写入数据时必须维护它们。

这意味着什么?

"哪些行变了"这个问题,现在变成了一个简单的元数据查询。你只需要比较两次快照的序列号差异,就能精确地找到所有新增、修改和删除的行——不需要全表扫描、不需要外部 CDC 工具、不需要手工维护水位线。

Databricks 在博客中直接说了一句杀伤力极强的话:

Together, row lineage and deletion vectors make CDC a native property of the table itself.

有了行级血缘,增量刷新物化视图变得异常简单。你知道上次刷新以来哪些行变了,只需要重新计算涉及这些行的聚合结果,而不需要重新跑整张源表。对于数据量在 PB 级别的企业来说,这个差距可能是"跑 30 分钟"和"跑 10 秒"的区别。

在 AI 工程领域,行级血缘同样意义重大——你可以精确追踪某条训练数据的来源和变更历史,这对于数据质量管理、模型可审计性和合规要求都是关键能力。

三、VARIANT 类型:半结构化数据终于不再是二等公民

以前有什么问题?

现实世界的数据,有一半以上是半结构化的。API 响应、IoT 传感器数据、用户行为日志、第三方 webhook——这些数据的特点是:字段不固定、层级不确定、模式随时可能变。

在 Iceberg v2 中处理这类数据,你只有两个选择:

选择一:把 JSON 展平成固定列。结果就是一张几百列的超宽表,大量 NULL 值,每次上游加一个字段就得跑一次 schema evolution。维护成本高到让人崩溃。

选择二:把 JSON 作为字符串存储。列式存储的一切性能优势全部丧失。谓词下推?不存在的。读取时需要全量解析字符串。查询性能惨不忍睹。

无论哪种选择,半结构化数据在数据湖里始终是"二等公民"。

v3 怎么解的?

Iceberg v3 引入了原生的VARIANT 数据类型

VARIANT 不是简单地把 JSON 存成 Binary——它使用了一种高效的二进制编码格式,能够在保持模式灵活性的同时,支持列式存储引擎的核心优化特性:

  • 谓词下推:查询引擎可以在不解析整个 VARIANT 的情况下,直接对内部字段做过滤。比如WHERE payload.event_type = 'purchase'可以在文件扫描阶段就完成过滤,而不需要把整个 JSON 读进内存再解析。

  • 切碎优化(Shredding):对于高频访问的内部字段,引擎可以将其"切碎"为独立的列式存储,实现接近原生列的读取性能。不常访问的字段仍以紧凑的二进制格式存储。

  • 零 Schema 迁移:新字段出现时,不需要任何 ALTER TABLE 操作。直接写入,直接查询。

-- 直接在 Iceberg v3 表中存储和查询半结构化数据 CREATETABLEevents ( event_id BIGINT, ts TIMESTAMP_NS, payload VARIANT ) USING iceberg TBLPROPERTIES ('format-version' = '3'); -- 用标准 SQL 查询嵌套字段 SELECT payload:user_id, payload:action, payload:metadata:device_type FROMevents WHERE payload:action = 'purchase' AND ts > current_timestamp() - INTERVAL1HOUR;

有了 VARIANT,你的策略变成了:原始数据直接入湖,查询时再提取你需要的字段。

对于 AI 工程师来说,这意味着你可以用 SQL 直接查询 LLM 的原始推理日志、Agent 的工具调用记录、模型 A/B 测试的完整 trace——不需要先把它们"规整"成关系型表。数据分析的速度被提升了一个数量级,因为你消灭了从"数据产生"到"数据可查"之间的等待时间。

四、默认列值:一秒完成十亿行的 Schema 变更

这个功能看起来不起眼,但对日常数据工程的体验改善是巨大的。

以前在 Iceberg 中给一张已有十亿行数据的表加一列并指定默认值,你需要做回填——重写所有数据文件,在每一行中写入新列的值。对于一张 PB 级的表,这可能意味着几个小时的计算资源消耗和服务中断风险。

Iceberg v3 的默认列值功能让这个操作变成了纯元数据操作:

ALTER TABLE orders ADD COLUMN priority STRING DEFAULT 'normal';

执行时间只需要亚秒级。 因为它只修改了表的元数据文件,没有触碰任何数据文件。当查询引擎读取没有priority列的旧数据文件时,会自动从表模式中查找默认值并在结果中即时填充。

五、纳秒级时间戳:精度的最后一公里

v3 新增了timestamp_nstimestamptz_ns数据类型,将时间精度从微秒提升到纳秒

这听起来像是一个细节优化,但对于特定场景意义重大:

  • 高频交易:金融市场的订单簿事件间隔可能在纳秒级,微秒精度会导致事件顺序丢失。

  • IoT 传感器:工业物联网中的振动传感器、电力监控设备的采样率可能达到百万次/秒。

  • 分布式系统调试:在微服务架构中,纳秒级时间戳是重建因果关系和排查竞态条件的基础。

以前这些场景不得不用 BIGINT 存储纳秒时间戳,丧失了时间类型的语义信息和查询便利性。现在,时间就是时间,精度到纳秒。

六、行业变化

Iceberg v3 的技术细节固然重要,但真正让我确信这是一次"质变"的,是整个行业生态的响应速度

Databricks不仅全力支持 Iceberg v3,还在博客中公开宣布:Iceberg v3 的删除向量、行级血缘、VARIANT 类型与 Delta Lake 实现了同一数据层的互操作。通过 UniForm 技术,客户只需写入一次 Delta Lake,即可以 Iceberg 格式从 Snowflake、BigQuery、Redshift 等引擎读取。这等于 Databricks 在说:"你用 Iceberg 还是 Delta,已经不重要了。"

Snowflake于 2026 年 3 月宣布对 Iceberg v3 进入公开预览支持,覆盖托管表和外部 Iceberg 目录,并且同步推进开源数据目录 Apache Polaris 的治理联邦能力。

Google Cloud的 BigQuery Managed Iceberg(BigLake)全面支持 v3 新特性。Google 工程师还直接参与了 v3 规范的核心贡献。

Dremio在 v3 规范通过当天就发布了详细的技术解读。

当 Databricks、Snowflake、Google、Dremio 四大湖仓引擎同时全力押注一个开放规范时,格式之战基本上可以宣告结束了。Iceberg 不再是"候选标准之一",它就是标准本身。

七、结论

Apache Iceberg v3 不是一次"又加了几个功能"的例行升级。它是数据湖仓架构从"可行"到"成熟"的分水岭。

删除向量让行级更新快了 10 倍,行级血缘让 CDC 变成表的原生能力,VARIANT 类型让半结构化数据不再是二等公民,默认列值让 Schema 变更从小时级变成秒级,地理空间类型和纳秒时间戳填补了最后的能力空白。

更重要的是,它获得了整个行业生态的集体认可——Databricks、Snowflake、Google、Dremio 同时全力押注,格式之战实质结束。数据湖和数据仓库之间的柏林墙,在 Iceberg v3 这里,正式倒塌了。

参考资料:

  • Google Open Source Blog: What's new in Apache Iceberg v3? (2025.08)

  • Databricks Blog: Apache Iceberg™ v3: Moving the Ecosystem Towards Unification (2025.06)

  • Databricks Blog: The Next Era of the Open Lakehouse: Apache Iceberg™ v3 in Public Preview on Databricks (2026.04)

  • Dremio Blog: What's New in Apache Iceberg Format Version 3? (2025.04)

  • Snowflake: Announcing Apache Iceberg v3 Support in Public Preview on Snowflake (2026.03)

http://www.jsqmd.com/news/674341/

相关文章:

  • ANSYS WORKBENCH轴承动力学仿真:内圈、外圈及滚子故障模拟与凯斯西储大学SKF轴承...
  • STNN算法研究
  • Unity学习笔记(六)——3DRPG游戏(4)
  • 如何永久保存QQ空间青春记忆?GetQzonehistory一键备份终极方案
  • 从理论到实战:手把手教你用Python(NumPy+Pandas)搞定拉丁超立方抽样并导出Excel
  • 2026 云南 AIGEO 服务市场对比分析:云南企服科技综合实力评估
  • 2026最稳代练创业项目:三角洲护航系统——全端部署+智能匹配,破解获客与信任难题
  • 存储过程详解:把SQL逻辑“打包”存起来,下次一键调用!|转行学DB第12天
  • Vue3项目里,除了clearFiles,Element-Plus上传组件还有哪些隐藏技巧?
  • 国际半导体全产业链展会推荐:全球覆盖上下游优质展会精选 - 品牌2026
  • 全国一体化算力网调度:政务 AI 规模化应用的算力底座如何搭建
  • 多视角视频扩散策略:一种三维时空-觉察视频动作模型
  • GD32F103串口调试:从printf重定向到中断收发,一个工程搞定所有(附完整代码)
  • JavaScript中严格模式use-strict对引擎解析的辅助
  • AIGC部署和生成图片
  • 移动号码状态查询 API 集成指南
  • Claude Code 安装报错 “不兼容 Windows 版本“ 完整修复记录
  • 【Dify v0.8+多模态调试黄金标准】:基于37个企业级部署案例验证的4层可观测性接入方案
  • 2026年评价高的新能源汽车改装榜单优选公司 - 行业平台推荐
  • Java项目如何零停机迁入Loom响应式架构?:2026最新3步渐进式改造路径(含Spring Boot 3.4+ Reactive Loom适配器实战)
  • 手机访问家里局域网共享文件?MoleSDN 叶子路由一步融入家庭内网
  • 010、展望:架构演化的逻辑与未来——效率、智能与硬件协同设计之路
  • 别光会explain()了!Spark 3.0+ 中这几个隐藏的执行计划模式更实用
  • 军用级水下动力系统标准方案(ROV/AUV/无人潜航器)
  • 【Dify 2026边缘部署权威指南】:20年架构师亲授7步极简落地法,错过再等三年
  • 当n和L大到1e18时,别再暴力模拟了!详解‘3437 melon’吃瓜问题的O(1)公式推导与边界条件处理
  • SCI 论文 Abstract 中 100 + 学术句式(2)
  • 告别手动布线烦恼:用Allegro快速布局STM32核心板的5个高效技巧
  • Spring Boot 4.0 Agent-Ready 架构深度解耦实践(Agent生命周期管理+无侵入监控+灰度探针部署大揭秘)
  • QMCDecode终极指南:3分钟解锁QQ音乐加密文件,让你的音乐收藏重获自由!