datainfra前沿动态 · Vol.13

Databricks Lakebase引入Git式数据库分支让OLTP开发工作流走向即时隔离;DuckDB-Iceberg扩展补全DML与V3支持迈向完整湖仓客户端;Enzyme增量视图维护引擎获SIGMOD 2026荣誉提名

第十三期聚焦DataInfra三条动态:Databricks Lakebase发布数据库分支功能——Git式copy-on-write分支让TB级生产数据库1秒克隆,每个开发者拥有独立隔离环境,非生产分支闲置自动缩至零,CI/CD集成schema diff与临时分支,VS Code/Cursor原生集成;DuckDB-Iceberg扩展5月29日发布详细功能博客——MERGE INTO让湖仓表原生upsert、ALTER TABLE让模式演变无需重写数据、truncate/bucket分区转换支持写入、Iceberg V3全面支持(VARIANT/TIMESTAMP_NS/列级默认值/二进制删除向量/行血缘),DuckDB从'能读Iceberg'走向'能完整操作Iceberg';Databricks Enzyme增量视图维护引擎获SIGMOD 2026荣誉提名——支持复杂MV模式(JOIN/窗口函数/聚合/非确定性函数/AI函数)、多语言定义(SQL+Python)、自动分区级vs行级增量策略选择,为Spark Declarative Pipelines提供学术基础

DataInfra Databricks Lakebase 数据库分支 Copy-on-Write Git式工作流 OLTP CI/CD Scale-to-Zero DuckDB Iceberg MERGE INTO ALTER TABLE Schema Evolution Iceberg V3 VARIANT 删除向量 行血缘 分区转换 Enzyme SIGMOD 增量视图维护 Spark Declarative Pipelines 物化视图

第十三期追踪到DataInfra领域三条重要动态:Databricks 5月29日发布Lakebase数据库分支功能——这是OLTP数据库首次将Git式分支工作流原生集成到数据库引擎中,copy-on-write存储架构让创建TB级生产数据库的分支仅需1秒(O(1)操作复杂度),创建时零存储开销,每个开发者获得独立隔离的数据库实例(包含相同的schema、治理策略和生产级数据),分支重置(branch reset)可从父分支即时刷新子分支获取最新数据,时间点恢复(point-in-time recovery)可从历史任意时刻创建分支,非生产分支闲置时自动缩至零、连接时快速重启——这套机制让《演化式数据库设计》(2003年)中”每个人都有自己的数据库实例”这一第四实践从理想变为现实,Databricks称”让Postgres数据库成为开发工作流中最快的部分”;同日DuckDB发布Iceberg扩展详细功能博客——MERGE INTO让湖仓表原生支持upsert操作(merge-on-read语义+位置删除),ALTER TABLE覆盖重命名表/添加列/重命名列/删除列/设置格式版本五项模式演变操作(仅元数据变更无需重写数据文件),truncate和bucket分区转换支持带分区的Iceberg表的INSERT/UPDATE/DELETE,iceberg_schema_properties三函数对模式级键值属性的读写删,Iceberg V3全面支持——VARIANT数据类型、TIMESTAMP_NS纳秒时间戳、列级默认值、二进制删除向量(Puffin文件替代v2的Parquet位置删除)、行血缘追踪,DuckDB从”能读取Iceberg表”走向”能完整操作Iceberg表”;Databricks同日发布SIGMOD 2026参会博客——Enzyme增量视图维护引擎获SIGMOD荣誉提名,该引擎为Spark Declarative Pipelines的物化视图提供增量维护,支持JOIN/窗口函数/聚合/非确定性函数(current_date)/AI函数的复杂MV模式、SQL+Python多语言MV定义、自动判断分区级vs行级增量策略,配合选择性中间结果缓存和基于计划信息+历史执行的成本模型——这三条动态共同指向DataInfra的又一个趋势确认:数据库开发工作流正在从”共享+协调”走向”隔离+即时”,湖仓客户端正在从”只读查询”走向”完整操作”,增量处理正在从”手工编码”走向”引擎自动”。

Databricks Lakebase数据库分支:OLTP开发工作流走向Git式即时隔离

事件概述

5月29日,Databricks发布博客介绍Lakebase数据库分支(Database Branching)功能。这是Lakebase自3月12日默认启用Autoscaling项目(包含分支和即时恢复能力)以来的首次详细技术博客,也是三部分系列的第一部分。数据库分支将Git的分支模型引入OLTP数据库——通过copy-on-write存储架构,创建TB级生产数据库的分支仅需1秒,创建时零存储开销,每个分支独立运行、互不影响。Databricks将此功能定位为”让Postgres数据库成为开发工作流中最快的部分”,实现《演化式数据库设计》(2003年)中”每个人都有自己的数据库实例”这一实践——该实践此前因成本和复杂性而无法在传统数据库中实现。博客通过开发者Jen的故事展示了传统共享数据库开发模式的痛点(等待协调、有限测试、缓慢反馈、风险规避),以及数据库分支如何让每个开发者拥有独立隔离环境、CI/CD自动创建临时分支运行测试、schema diff可视化变更。

技术解析

  • Copy-on-Write分支——1秒克隆TB级数据库:创建新分支时,它从父分支继承schema和数据,但通过指向相同数据的指针共享底层存储。仅当修改数据时,Lakebase才写入新数据。这意味着:分支立即出现(O(1)操作复杂度,数据库大小不影响创建时间)、只为分支间实际变更的数据付费、创建分支对生产工作负载零性能影响。传统数据库克隆需要完整复制数据(TB级数据库可能需要小时级),copy-on-write让”克隆”变为”指针共享+差异写入”。
  • 分支层次结构与隔离:每个分支(根分支除外)都有父分支,形成树状层次结构——production(根)→ staging(production的子分支)→ feature-test(staging的子分支)+ development(production的子分支)→ bugfix-branch(development的子分支)。子分支的变更不影响父分支,父分支的变更不自动出现在子分支中。隔离延伸到Postgres角色状态和数据库——在一个分支上创建的角色、GRANT/REVOKE、角色属性修改对其他分支无效。
  • 分支重置(Branch Reset):即时将子分支更新为匹配父分支的当前状态。当开发者需要从父分支同步最新数据以刷新开发或暂存分支时使用。操作使用copy-on-write技术即时完成,连接详情保持不变。分支重置仅单向工作(父→子),将变更从子分支推送到父分支需要使用标准迁移工具。
  • 时间点恢复(Point-in-Time Recovery):从可配置恢复窗口内的任意历史时刻创建分支。适用于数据错误恢复(如关键表被意外删除)、历史数据调查、合规审计等场景。与分支重置不同,时间点恢复创建新的根分支,同时保持原始分支不变。
  • 保护分支与默认分支:默认分支(通常为production)免受并发活跃计算限制,确保始终可用。保护分支无法被删除或从父分支重置,免于因不活跃而自动归档,且保护分支存在时阻止项目删除——确保关键基础设施不会被意外移除。
  • CI/CD集成:CI流程为每次测试运行创建临时分支——应用迁移、运行应用测试套件、运行数据库测试、验证迁移(可应用、幂等、可逆)、发布schema-diff注释到PR。测试完成后删除分支,避免残留状态。这与Git分支的CI模式完全对齐——每个PR一个数据库分支。
  • IDE原生集成:Lakebase SCM扩展为VS Code和Cursor提供分支管理、schema-diff视图和端到端IDE工作流。支持Flyway、Liquibase、Alembic、Knex、Prisma等主流迁移工具。
  • Scale-to-Zero:非生产分支闲置时自动缩至零(默认24小时不活跃超时),需要时连接即可快速重启。这让”每个开发者一个分支”在经济上可行——不为空闲的开发分支付费。

行业影响

Lakebase数据库分支的深层意义不是”又一个数据库克隆功能”,而是OLTP数据库开发工作流从”共享+协调”走向”隔离+即时”的根本性范式变更。此前的OLTP开发模式依赖共享数据库——多个开发者争用同一个开发实例,手动协调谁可以运行迁移,或者用本地SQLite/Docker模拟生产环境但数据过时且行为不一致。数据库分支让每个开发者拥有与生产完全相同的Postgres引擎、schema、治理策略和数据量的独立实例——这不是”接近生产”的模拟,而是”就是生产”的分支。

这与Vol.11报道的Lakebase CDF和弹性架构形成完整闭环——CDF解决”数据从运营数据库到湖仓的流入”(Bronze层),弹性架构解决”运营数据库的容灾可靠性”(可用性),数据库分支解决”运营数据库的开发效率”(开发工作流)。三者组合让Lakebase从”又一个托管Postgres”走向”为现代数据工程工作流重新设计的OLTP数据库”。

更值得注意的是分支与AI代理的关联——Databricks文档明确提到”AI代理可以通过Lakebase API编程生成数据库,任务完成后关闭”。当AI代理需要测试数据库变更、运行实验查询或构建临时数据管道时,分支提供了”即时创建、用完即弃”的数据库实例——这与Vol.10-12追踪的”为代理设计基础设施”趋势一致。

相关链接


DuckDB-Iceberg扩展补全DML与V3支持:从”能读Iceberg”走向”能完整操作Iceberg”

事件概述

5月29日,DuckDB发布博客详细介绍DuckDB-Iceberg扩展在v1.5.3版本中的多项新功能。此前Vol.4在报道DuckDB v1.5.3时简要提及”Iceberg MERGE INTO”,本次博客提供了完整的技术细节和更多未报道的功能:MERGE INTO让湖仓表原生支持upsert操作;ALTER TABLE覆盖重命名表/添加列/重命名列/删除列/设置格式版本五项模式演变操作;truncate和bucket分区转换支持带分区的Iceberg表的INSERT/UPDATE/DELETE;新增iceberg_schema_properties三函数管理模式级属性;最关键的是Iceberg V3全面支持——VARIANT数据类型、TIMESTAMP_NS纳秒时间戳、列级默认值、二进制删除向量(Puffin文件格式)、行血缘追踪。这些功能让DuckDB从”能读取Iceberg表的嵌入式分析数据库”走向”能完整操作Iceberg表的湖仓客户端”——此前DuckDB对Iceberg的支持以只读查询为主,现在DML写入、模式演变和V3特性均已覆盖。

技术解析

  • MERGE INTO——湖仓表原生upsert:此前湖仓表的upsert操作需要先读再写两步完成。MERGE INTO让单个语句按行决定插入、更新或删除——WHEN MATCHED THEN UPDATE处理已存在记录的更新,WHEN NOT MATCHED THEN INSERT处理新记录的插入,WHEN MATCHED THEN DELETE可在同一语句中表达删除集。使用merge-on-read语义,将位置删除写入Iceberg表。DuckDB博客特别推荐MERGE INTO用于”目标表没有主键的情况”——这是所有湖仓格式的共同特点(Parquet文件没有主键约束),MERGE INTO成为湖仓场景下表达upsert的推荐方式。
  • ALTER TABLE——模式演变无需重写数据:v1.4中Iceberg表的模式演变是已知限制。v1.5.3支持五项操作:RENAME TO(重命名表)、ADD COLUMN(添加列)、RENAME COLUMN(重命名列)、DROP COLUMN(删除列)、SET (‘format-version’ = 3)(设置格式版本)。每个ALTER TABLE语句更新Iceberg表的current-schema-id,变更对其他Iceberg感知引擎立即可见。关键优势:模式演变仅涉及元数据,无需重写数据文件——这与传统RDBMS的ALTER TABLE可能触发表重建形成鲜明对比,也是Iceberg”读时模式”设计的直接收益。
  • Truncate和Bucket分区转换:支持Iceberg规范定义的两种分区转换——bucket(N, col)将列值哈希到N个桶中(适用于高基数列的稳定分区),truncate(W, col)按前W个字符分组(数值列向下舍入到W的倍数)。此前仅支持identity和year/month/day/hour分区转换,truncate和bucket的加入让DuckDB能处理更多生产环境中的Iceberg表。支持创建、插入和更新使用这些分区转换的表,以及针对分区表的更新和删除操作。
  • Iceberg Schema Properties:三个新函数——iceberg_schema_properties()读取模式属性、set_iceberg_schema_properties()设置模式属性、remove_iceberg_schema_properties()移除模式属性。Iceberg目录允许在模式(命名空间)级别附加任意键值属性,用于记录所有权、描述、默认存储位置等。属性通过Iceberg REST Catalog写入,其他Iceberg感知引擎可立即看到更新——这是多引擎协作湖仓中的关键治理能力。
  • Iceberg V3全面支持:这是本次博客最重要的技术内容。V3规范的核心新能力在DuckDB中均已实现:①VARIANT数据类型——半结构化数据直接存储,与Vol.12报道的Databricks Iceberg v3 GA中VARIANT对齐;②TIMESTAMP_NS纳秒时间戳——更高精度的时间数据;③列级默认值——模式级定义列的默认值;④二进制删除向量——v2表的位置删除写为Parquet文件,v3表将相同信息编码为更紧凑的二进制删除向量(Puffin文件),DuckDB根据表的format-version自动选择正确格式;⑤行血缘追踪——为每行分配唯一ID跨快照追踪变更历史。注意:Geography类型和Unknown类型暂不支持,计划在DuckDB v2.0.0中添加。

行业影响

DuckDB-Iceberg扩展的这批功能让DuckDB完成了从”Iceberg读取器”到”Iceberg完整客户端”的跃迁。此前的DuckDB对Iceberg支持以SELECT查询为主——能读取和查询Iceberg表,但写入、模式变更和高级格式特性需要借助其他工具。MERGE INTO + ALTER TABLE + 分区写入 + V3支持的组合让DuckDB用户可以在单一工具中完成”创建表→写入数据→模式演变→增量更新→格式升级”的完整湖仓操作链。

这与Vol.12报道的Databricks Iceberg v3 GA形成互补——Databricks在平台层(Unity Catalog)让Iceberg v3达到生产就绪,DuckDB在客户端层(嵌入式分析引擎)让Iceberg v3可被任何开发者直接操作。两者共同指向一个趋势:Iceberg V3正在从”规范文本”走向”全栈可用”——平台层有Databricks/Snowflake提供生产级托管,客户端层有DuckDB提供轻量级操作,格式层有Apache Iceberg 1.11.0(Vol.7)提供核心实现。

Iceberg V3在DuckDB中的完整支持也验证了Vol.12的判断——格式层的功能差距已被弥合。当DuckDB这样的轻量级客户端都能完整操作Iceberg V3表(包括删除向量、VARIANT、行血缘),当Databricks和Snowflake在平台层同时将V3推至GA,Iceberg V3已从”新规范”变为”行业默认”。

相关链接


Enzyme增量视图维护引擎获SIGMOD 2026荣誉提名:SDP的学术根基

事件概述

5月29日,Databricks发布博客介绍其参加SIGMOD 2026(6月1-5日,印度班加罗尔)的论文和活动。其中,论文”Enzyme: Incremental View Maintenance for Data Engineering”获SIGMOD 2026荣誉提名(honorable mention)。Enzyme是Spark Declarative Pipelines(SDP)中物化视图增量维护的引擎——当新数据到达时,Enzyme自动计算增量更新,将物化视图保持最新,所有增量处理的复杂性对物化视图的创建者完全透明。博客同时预告VLDB 2026将发表”A Decade of Apache Spark Structured Streaming: How We Evolved the Architecture To Meet Real-world Needs”。SDP的增量处理有两条路径:①物化视图(Enzyme引擎自动增量维护,适合数据工程师声明式定义转换)②流式API(SDP的流式引擎增量处理,适合熟悉流处理的数据工程师表达复杂业务逻辑),两条路径可在同一管道中混合使用。

技术解析

  • 从查询加速到ETL——Enzyme的定位差异:传统物化视图(MVs)用于查询加速——加速数据仓库中的仪表板查询。Enzyme将MVs应用于ETL场景——如果MVs能被高效且增量地维护,将显著简化原本需要编写复杂自定义代码的ETL工作负载。这个定位差异是根本性的:查询加速关注”读路径优化”(让现有查询更快),ETL关注”写路径自动化”(让数据管道更简单)。
  • 复杂MV模式支持:Enzyme增量维护生产环境中的复杂MVs——包括JOIN、窗口函数、聚合以及它们的组合。与其他行业方案不同,Enzyme还支持非确定性函数(如current_date())和AI专用函数——这两类函数在传统增量视图维护中是已知的难题(非确定性函数的输出随时间变化,AI函数的输出不透明且不可逆)。
  • 多语言支持:大多数行业方案仅支持SQL定义MVs。Enzyme同时支持SQL和Python定义——Python现在是数据工程和AI工作负载的首选语言。多语言支持带来独特挑战,如准确检测MV定义的变更(Python函数体的等价性判断比SQL困难得多)。
  • 性能优化——三级策略:①自动判断分区级vs行级增量——当更新可以按分区应用而非逐行重写时,减少重写开销;②选择性缓存中间结果——减少IO成本;③成本模型——利用计划信息和历史执行记录确定最高效的增量策略。Databricks声称Enzyme在性能上显著优于另一个竞争行业方案(匿名化为CV-IVM)。
  • SDP双路径架构:数据工程师可以在同一管道中混合使用物化视图(声明式,Enzyme自动增量维护)和流式API(命令式,SDP流式引擎增量处理)。这种混合模式让简单转换用声明式(更少的代码、更少的错误),复杂业务逻辑用命令式(更精细的控制),两者在同一个管道中协同工作。

行业影响

Enzyme获SIGMOD荣誉提名的意义不在于奖项本身,而在于增量视图维护从学术课题走向生产ETL引擎的完整闭环。Vol.7报道SDP时称其为”第三次抽象跃迁”——从MapReduce(手工编码分布式逻辑)到Spark SQL(声明式查询)到SDP(声明式管道)。Enzyme是SDP声明式能力的技术根基——如果MVs不能被高效增量维护,声明式管道就只能处理全量批处理,无法处理增量数据,而生产ETL绝大多数场景需要增量处理。

Enzyme对非确定性函数和AI函数的增量维护支持尤其值得关注。当MV定义中包含current_date()或LLM调用时,传统增量维护方案要么不支持,要么需要全量重新计算。Enzyme的解决方案虽然博客未详细披露技术细节,但其存在本身说明了一个趋势:增量处理的边界正在从”确定性关系代数”扩展到”包含非确定性和AI函数的混合工作负载”——这与Vol.10-12追踪的”数据库走向代理原生”趋势在增量处理维度上的投射。

VLDB 2026即将发表的Spark Structured Streaming十年回顾论文也值得期待——从2016年Structured Streaming首次发布到2026年SDP,Spark的流式处理架构经历了根本性演进,这篇论文将为理解SDP的双路径架构(Enzyme + 流式引擎)提供历史脉络。

相关链接


编者评

第十三期的三条动态,从前十二期的主线中提炼出一个被反复触及但尚未明确表述的主题:DataInfra正在经历从”手工编排”到”引擎自动”的范式迁移——这个迁移同时发生在OLTP开发工作流、湖仓客户端操作和增量数据处理三个维度。

第一个维度是OLTP开发工作流:从”手工协调”到”引擎自动隔离”。 Lakebase数据库分支让”每个人都有自己的数据库实例”从理想变为现实——此前这个实践无法落地不是因为没有需求,而是因为传统数据库的克隆成本(时间+存储+运维)太高。copy-on-write让克隆成本从O(N)降到O(1),scale-to-zero让空闲成本从”持续计费”降到”零费用”,分支重置让同步成本从”手动种子脚本”降到”一键刷新”。当克隆、空闲、同步三项成本同时趋近于零时,“共享+协调”的工作模式自然被”隔离+即时”取代——这不是管理实践的改进,而是技术约束的消除导致工作模式的根本性变更。

第二个维度是湖仓客户端操作:从”读取查询”到”完整操作”。 DuckDB-Iceberg从只读走向完整DML,不是功能列表的简单延长,而是湖仓客户端角色的根本转变。此前的湖仓生态有一个隐含假设:写入和模式演变由”重型引擎”(Spark/Trino/Flink)负责,“轻型客户端”(DuckDB)只负责读取查询。这个假设的合理性建立在两个前提上:①Iceberg表的写入需要复杂的文件管理(元数据/清单文件/快照管理),嵌入式引擎难以胜任;②模式演变是低频操作,不需要轻量级工具。MERGE INTO和ALTER TABLE的加入打破了这个假设——当轻量级客户端也能完整操作Iceberg表时,“读写分离”的架构不再是必须的,单机湖仓工作流(数据探索+清洗+写入+模式演变在同一DuckDB进程中完成)成为可能。这与Vol.5报道的DuckDB Lance扩展(在DuckDB中读写Lance格式)一脉相承——DuckDB正在从”嵌入式分析引擎”走向”嵌入式湖仓操作系统”。

第三个维度是增量数据处理:从”手工编码”到”引擎自动”。 Enzyme将增量视图维护从”需要数据工程师手工编写增量逻辑”变为”声明式定义MV后引擎自动增量维护”。这与Lakebase数据库分支的逻辑一致——不是工作流本身需要改变,而是技术约束此前阻止了更优工作流的采用。当增量维护可以自动处理JOIN、窗口函数、甚至非确定性和AI函数时,“为增量性能手工编码复杂管道”不再是必须的——声明式定义+引擎自动优化成为默认选择。

将三个维度串联,一个统一的方向浮现:DataInfra的每一层都在经历从”需要人类手工编排”到”引擎自动处理”的迁移。 OLTP开发从手工协调开发数据库到引擎自动隔离分支(Lakebase),湖仓操作从手工切换读写工具到引擎统一操作接口(DuckDB-Iceberg),增量处理从手工编写增量逻辑到引擎自动增量维护(Enzyme)。这个迁移的底层驱动力是技术约束的消除——copy-on-write消除了克隆约束,扩展生态消除了功能约束,增量算法消除了计算约束。当约束消除时,更优但此前不可行的工作模式自然浮现——这不是”选择更好的工具”,而是”工具消除了选择的必要性”。