Databricks

What makes a catalog open? Unity Catalog Advances the Open Lakehouse

8.5内容质量

TL;DR · AI 摘要

Unity Catalog通过支持Apache Iceberg REST catalog spec实现数据可移植性,允许在不同目录间移动表而无需复制数据。

核心要点

  • Unity Catalog支持Apache Iceberg的REGISTER和UNREGISTER操作,实现零数据复制迁移
  • 客户存储数据所有权是开放目录的核心要求,避免云厂商锁定
  • Databricks将UNREGISTER贡献给Iceberg REST标准,推动行业规范

结构提纲

按章节快速跳转。

  1. 定义开放目录的核心要素并介绍Unity Catalog的突破性功能

  2. 明确存储所有权、功能完整性和数据可移植性三大标准

  3. 强调客户存储数据的重要性,避免云厂商控制存储账户

  4. 要求所有高级功能必须在客户存储数据上可用

  5. 通过Iceberg REST spec实现跨目录迁移而无需数据复制

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Unity Catalog开放目录
    • 核心要求
      • 存储所有权(客户控制)
      • 功能完整性(客户存储可用)
      • 数据可移植性(Iceberg REST)
    • 技术实现
      • Apache Iceberg REST spec
      • UNREGISTER标准贡献

金句 / Highlights

值得收藏与分享的关键句。

#Databricks#Apache Iceberg#Lakehouse#数据可移植性#云存储
打开原文

什么让一个目录真正开放?Unity Catalog 推动开放湖仓架构 | Databricks 博客

跳至主要内容

平台与产品及公告

2026年10月19日

什么让一个目录真正开放?Unity Catalog 推动开放湖仓架构

Unity Catalog 将您的数据存储在您拥有的存储中,允许外部引擎读写,并且现在可以在不同目录之间自由移动数据而无需复制。

作者:Elizabeth Bowman

摘要

  • 客户拥有的存储:与使用托管存储中本地表的其他平台不同,Unity Catalog 的托管表存储在客户拥有的存储中,实现无需复制数据的可移植性。
  • Unity Catalog 是最开放的目录:作为首个支持 Apache Iceberg REST 目录规范中 REGISTER 和 UNREGISTER 操作的目录,Unity Catalog 允许您在不同目录之间移动表而无需数据重复。
  • 最佳功能适用于您拥有的表:像 Unity Catalog 这样的开放目录会在您存储中的表上提供所有高级表功能,而不仅限于提供商为您存储的表。

尽管几乎所有平台现在都支持开放格式,但什么让一个目录真正开放?一个开放目录会将您的数据存储在您拥有的存储中,为您提供最佳功能,并支持数据可移植性:即在不移动数据的情况下将您的表迁移到另一个目录的能力。可移植性是开放湖仓架构的核心原则,而这也是大多数目录的不足之处。

作为首个同时支持 Apache Iceberg™ REST 目录规范中 REGISTER 和 UNREGISTER 操作的目录,Databricks 的 Unity Catalog 在 Open Lakehouse 中扩展了开放目录的定义:您的表可以无需任何数据移动地导入或导出现有 Iceberg 表。Databricks 向 Iceberg REST 目录规范贡献了 UNREGISTER 功能,使这一标准成为开放标准。阅读《解锁数据可移植性》。

本文将逐步介绍开放目录的三个要求,说明 Unity Catalog 如何满足每个要求,并比较相同 Iceberg 表在不同平台上的表现。

超越开放格式:开放目录的三个要求

湖仓架构的开放程度取决于目录。许多提供商仍在其目录的主要表类型中使用专有格式,因此需要关注格式问题。然而,除了这一点,开放目录还必须满足三个要求:

| 开放目录要求 | 含义 | 缺少它会发生什么 | |--------------|------|------------------| | 1. 您拥有的存储 | 表存储在客户拥有的存储中,而非托管存储(即“提供商控制的存储”) | 存储桶位于提供商的云账户中,而非您的账户。存储费用由提供商计费,因此您需支付存储“租金”,并且提供商将对数据外移收取费用。 | | 2. 包含最佳功能 | 自动优化和所有高级表功能适用于客户拥有的存储中的表,而不仅限于提供商控制的存储中的表 | 团队会将表移至提供商控制的存储以获取客户拥有所缺少的功能。此后,提供商的产品路线图将决定您能对数据做什么。 | | 3. 无需复制即可自由移动 | 表可通过 REGISTER 和 UNREGISTER 进入或离开目录,数据保留在原处 | 更改目录意味着需要导出并重写每个表,以将其移出提供商控制的存储。 |

[1] Unity Catalog 托管表及每种表类型的客户拥有的存储

大多数数据平台都支持开放表格式,如 Apache Iceberg。然而,当这些表存储在提供商拥有的存储桶中时,你的表就不再开放。这使得这种格式仅在名称上是开放的:你无法在自己的云账户中查看文件,存储费用由提供商计费,想要离开时必须先将所有表复制出去。

Unity Catalog 采用了完全相反的策略。在 Databricks 中,“托管”描述的是谁维护表,而不是谁拥有其存储。目录负责优化、维护和升级,而文件则保留在你拥有的云存储账户中,而不是其他平台通常称为“托管存储”的专有存储中。在 Databricks 中,99% 的 UC 托管表都存储在客户拥有的存储中。而在以提供商控制的存储为核心的平台上,情况正好相反:几乎所有表都存储在提供商控制的存储中,默认使用专有格式锁定。这种差异会在你决定离开目录的那一天显现出来。

[2] 最佳功能应适用于你拥有的表

拥有自己的存储只有在目录将这些表视为首要对象时才有意义。一些平台提供客户拥有的存储选项,但会将最佳功能保留给他们控制的托管存储中的表,制造出开放的假象。开放路径确实存在,但功能较少,因此大多数表最终还是会进入提供商管理的存储。

对于 Unity Catalog 托管表,最佳功能支持客户拥有存储(“自带存储”)路径,而其他平台则存在限制:

  • 安全的数据保护。Snowflake 和其他平台将故障安全恢复仅限于其自有存储中的表。相比之下,Unity Catalog 托管表在客户拥有存储中支持数据恢复:你可以查询早期版本,或在 30 天内恢复被删除的表。
  • 自动优化。在 Snowflake 中,数据压缩在提供商控制的存储中成本更高。对于其他平台,表维护和 V-order 适用于存储在客户拥有存储中的表,而不是通过快捷方式访问的数据。Databricks 的预测性优化在 Unity Catalog 托管表上对 Delta 和 Iceberg 格式都适用,且存储在客户拥有存储中。
  • 存储成本。Snowflake 不会从你自己的存储桶中删除 Iceberg 表的孤立文件,例如因写入失败而遗留的文件,这意味着你仍需为没有表使用的文件付费。而在 Unity Catalog 托管表上,预测性优化会自动从你的存储桶中删除未引用的文件,帮你节省开支。

Unity Catalog 托管表的自动优化每年为我们在存储成本上节省了超过 100 万美元,同时消除了日常繁琐的手动操作。——Zepto 数据工程高级总监 Abhinav Raghuvanshi

[3] 开放目录提供数据可移植性:Unity Catalog 在无需数据复制的情况下实现

判断一个目录是否开放的最重要标准是可移植性:你是否可以随时轻松离开目录,通过在目录之间移动表而无需复制数据。

直到最近,生态系统中还没有一种标准方法可以从目录管理中释放表。因此,Databricks 向 Apache Iceberg REST 目录规范贡献了 UNREGISTER 功能,使客户能够在不复制、移动或重写任何数据文件的情况下自由离开。

在 Unity Catalog 中,REGISTER 和 UNREGISTER 命令配合使用:

  • UNREGISTER 会从 Unity Catalog 中移除一张表,并返回该表最新的元数据位置,这个位置是下一个目录接管提交操作时需要的精确指针。
  • REGISTER 会将该元数据位置附加到新的目录,新目录会写入一条记录,将表名与元数据关联起来。

这之所以能够实现,是因为 Unity Catalog 管理的表存储在您拥有的存储中。对于由提供商控制的存储,无法执行注销操作,因为退出 API 无法为您提供指向您无法带走的文件的指针。

Unity Catalog 管理的表完全可移植且开放,不存在锁定问题:您始终保有自己的数据控制权。

入门指南

要在 Databricks 开始使用,请联系您的账户团队以获取 REGISTER 和 UNREGISTER 的访问权限(目前处于私密预览阶段)。通过 REGISTER 和 UNREGISTER,您的 Iceberg 表可以零数据复制地迁移到 Unity Catalog,继续保留在您自己的存储中完全开放,并获得 Unity Catalog 和预测性优化的所有优势:

如需了解更多内容,请阅读《解锁数据可移植性》。有关如何使用 Unity Catalog 管理表的详细信息,请参阅 Unity Catalog 管理表文档,这些表存储在客户拥有的存储中。

未来路线图

未来,我们计划通过 SET MANAGED IN PLACE 命令支持将外部表或外部表转换为 Databricks 管理表。这将允许您保留与之前相同的客户定义存储路径,且无需任何数据移动。

$

/$

常见问题 (FAQ)

Unity Catalog 是否是开源的?

是的。Unity Catalog 是开源的,并满足开放目录的三个要求。其管理的表(基于 Apache Iceberg 或 Delta Lake)存储在您拥有的云存储账户中,可以在那里获得完整功能集,并通过 REGISTER 和 UNREGISTER 在不复制数据的情况下迁移到其他目录。最重要的是,Unity Catalog 管理的表存储在客户拥有的存储中,因此在 Databricks 中执行 UNREGISTER 可实现目录可移植性,而无需在 Unity Catalog 端移动数据。通过 Unity Catalog 和 Iceberg REST 目录开放 API,也支持对管理表的读写访问。

使用 Apache Iceberg 是否能避免供应商锁定?

仅靠这一点无法做到。存储在提供商控制的存储中的 Iceberg 表可能像专有表一样难以迁移,而存储在您自己存储中的 Iceberg 表可能功能较少。要避免锁定,还需要拥有自己的存储、在这些表上提供完整功能,以及支持干净无复制交接的目录。

Unity Catalog 管理表与管理存储有何区别?

在 Unity Catalog 中,“管理”描述的是谁维护表,而不是谁拥有其存储。Unity Catalog 管理的表由目录进行优化和维护,其文件存储在您拥有的云存储账户中。在某些其他平台上,“管理存储”意味着提供商拥有并控制存储,而不仅仅是进行优化。

不复制数据的情况下,能否将表移出 Unity Catalog?

可以。通过 UNREGISTER,您可以将表从 Unity Catalog 中移除,并在另一个 Iceberg REST 目录中注册,而无需复制数据文件。

在 Unity Catalog 中,"managed"(托管)描述的是表的维护者,而不是存储的所有者。Unity Catalog 的托管表由目录进行优化和维护,但其文件存储在您拥有的云存储账户中。在某些其他平台上,"managed storage"(托管存储)意味着存储由服务提供商拥有,并且通常以专有的表格式进行存储。

Databricks 能否写入外部 Iceberg 表?

在 Databricks 中,外部 Iceberg 表是只读的,因为另一个目录拥有其提交权限,这会阻止两个目录同时写入同一张表。若希望 Unity Catalog 管理客户存储中的表,请通过 REGISTER 命令在 Unity Catalog 中进行注册。您也可以通过 SET MANAGED 命令将外部表转换为 Unity Catalog 托管表,并存储在客户拥有的存储中。

订阅以获取最新文章

订阅我们的博客,即可将最新文章发送至您的邮箱。

立即订阅

查看所有博客

slice-start id="_gatsby-scripts-1"

slice-end id="_gatsby-scripts-1"