Databricks 多语句事务正式 GA,在湖仓上支持 Delta Lake 与 Apache Iceberg
Transactions are Generally Available, advancing warehousing on the Lakehouse
Databricks 宣布多语句事务(Multi-Statement Transactions)正式 GA,可在 Delta Lake 和 Apache Iceberg 表上原生运行跨多表、多语句的原子工作流,无需再依赖独立数仓系统。
多语句事务现已正式发布,使组织能够以原子性保证运行复杂的多步骤工作流,而无需单独的仓库系统。
数据仓库支撑着企业一些最重要的工作负载,包括数据摄取、转换、商业智能、应用程序和运营分析。其中许多工作负载需要跨多个表的更改共同成功或失败。过去,组织依赖单独的仓库系统来实现这些事务保证,这带来了昂贵的数据移动、重复副本、碎片化治理和运营复杂性。
Databricks 是首个在 Delta Lake 和 Apache Iceberg 表上原生支持多语句事务的湖仓架构。与存储过程、临时表和 SQL 脚本一起,多语句事务将传统数据仓库工作负载带到了湖仓上开放、受治理的数据中。
传统和云仓库中事务的问题
传统和云仓库提供事务保证,但往往以碎片化的数据架构为代价:
- 额外的副本和数据移动:将数据移入和移出单独的仓库会增加延迟、成本和不一致风险。
- 碎片化治理:团队必须在各系统之间复制和同步访问策略、审计和运营控制。
- 复杂的一致性变通方案:开发人员需要自定义编排、对账和重试逻辑来保持相关更改的一致性。
多语句事务将这些保证直接带到开放、受治理的湖仓中,减少重复系统以及保持它们一致所需的运营工作。
湖仓上的事务为数据仓库提供统一基础
湖仓上的事务为在开放的企业数据上运行高要求仓库工作负载提供了基础。它们将对开放表格式的支持与统一治理和高并发性能相结合。它们还与熟悉的仓库开发工具、数据管道和生产可观测性能力集成。
跨 Delta Lake 和 Apache Iceberg 开放
多语句事务同时支持 Delta Lake 和 Apache Iceberg 表。团队可以保留开放表格式,同时获得跨多个语句和表的原子性保证。他们无需将受治理的数据移入专有格式,也无需在另一个系统中维护事务副本。
高并发下快速
湖仓架构支持行级并发,允许并发事务写入同一张表,只要它们不更新同一行。与传统数据仓库使用锁来串行化写入不同,行级并发使更多事务能够并行运行。因此,Databricks 提供比传统云仓库和旧式仓库显著更强的性能,使组织能够直接在湖仓上运行高要求的仓库工作负载。

与仓库开发和数据管道集成
事务可与其他数据仓库能力组合,使团队能够在湖仓上构建传统数据仓库工作负载。例如,开发者可以将中间结果暂存到 临时表中,将多步骤业务逻辑封装在 存储过程中,并以原子方式提交整个工作流。
事务还可以写入 流式表,为持续摄取、转换和发布数据的工作流带来原子性保证。现在,下游管道可以接收到一致的更新,从而避免处理不完整的数据。
对敏感数据的受治理事务
事务在读取和写入时均遵循 Unity Catalog 基于属性的访问控制,包括行级安全性和列掩码。这对于暂存、验证和发布敏感数据的工作流尤为重要。
生产环境中的可观测性
生产事务不仅需要正确,还需要易于理解。开发者可以使用诸如 DESCRIBE TABLE、 SHOW COLUMNS和 GET DIAGNOSTICS等命令来检查事务中涉及的表,并捕获有关事务执行的信息。这些能力使事务工作流更易于开发、运维和故障排查。
这种完全集成的体验使 Fivetran 能够在湖仓事务之上构建其连接器。
“Fivetran History Mode 使用缓慢变化维度(SCD)Type 2 保留记录的每个版本。每次源变更对应两次目标写入:关闭先前版本并插入新的活动版本——两者必须一起成功。此前,由于事务保证仅限于单条语句,我们将这些作为单独操作运行,并通过后续同步中的对账逻辑和一致性检查来防范部分失败。借助多语句、多表事务,我们现在将关闭和插入作为一个原子单元提交,因此要么应用完整变更,要么完全不应用。这使 Fivetran 得以移除一整类一致性修复代码,并为我们的客户提供了对历史数据更强的正确性保证。”—Egidio Terra,Fivetran 员工产品经理
同样,Accolade 使用事务每天处理数千条索赔和负债记录。
“在 Accolade,我们每天在生产环境中处理大约 1,700 个事务,以处理传入的索赔和负债。这些更新中的每一个都必须可靠且一致地完成。多语句、多表事务让我们能够直接在受治理的湖仓上以完整的事务保证运行这些多步骤操作。这种可靠性对于我们更广泛地将关键工作负载迁移到开放湖仓、而无需搭建单独的数据仓库至关重要。”—Akshay Ajgaonkar,Accolade 工程经理
开放格式、集中治理、行级并发、熟悉的 SQL 功能、管道集成和可观测性共同在湖仓上打造了完整的事务体验。
多语句事务的关键用例
多语句、多表事务支持多种常见模式,用于现代化 ETL、迁移数仓工作负载以及发布可信数据。
为 ETL 提供多表事务保证
一个 ETL 作业可以将相关表作为一个单元进行更新。在此示例中,订单状态和库存余额不会失去同步。
如果任一更新失败,工作流可以回滚这两项更改,而不是在未进行相应库存调整的情况下发布已履行订单。
将数仓存储过程迁移到湖仓
存储过程和临时表让开发者能够保留熟悉的数仓开发模式,同时在受治理的湖仓数据上运行。
Unity Catalog 的行级安全性和列掩码策略继续适用于受治理的读写操作。该过程还使用 DESCRIBE TABLE 在下一组写入之前检查目标的模式和元数据,帮助开发者验证其配置并排查问题,而无需离开事务工作流。
实现 Write-Audit-Publish
Write-Audit-Publish 可防止数据在通过所需质量检查之前变为可见。
该工作流暂存新数据、记录其质量结果,并在一次原子操作中发布已验证的记录。如果验证或写入失败,事务可以回滚,而不是暴露部分结果。当下游管道需要持续获取已发布数据时,同一模式还可以包含对流式表的事务性写入。
立即开始使用事务
多语句事务已在 Databricks 上针对 UC 托管的 Delta Lake 和 Apache Iceberg 表正式发布。立即使用 Databricks 的 文档 或通过提示产品内 Assistant 开始使用事务。
借助湖仓上的事务,您可以将关键数仓工作负载迁移到开放、受治理的数据上,同时减少重复系统、数据移动和运维复杂性。
来源:Databricks Blog · databricks.com