跳到正文
Databricks Blog·· 1 小时前AI 评分41

什么才算开放的数据目录?Unity Catalog 推进开放湖仓

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

AI 导读

Databricks 的 Unity Catalog 成为首个同时支持 Apache Iceberg REST catalog 规范中 REGISTER 与 UNREGISTER 的目录,表可在不移动数据的情况下迁入或迁出。

正文 · AI 翻译

虽然现在几乎所有平台都支持开放格式,但什么才让一个目录真正开放?一个开放目录将你的数据保存在你拥有的存储中,在那里为你提供最佳功能,并支持数据可移植性:即能够将你的表移动到另一个目录,同时保持数据原地不动。可移植性是开放湖仓一体架构的核心原则,而这正是大多数目录的不足之处。

作为首个同时支持 Apache Iceberg™ REST 目录规范中 REGISTER 和 UNREGISTER 的目录,Databricks Open Lakehouse 中的 Unity Catalog 拓展了开放目录的含义:你的表可以在不移动任何数据的情况下,将现有 Iceberg 表移入或移出。Databricks 将 UNREGISTER 贡献给了 Iceberg REST 目录规范,使其成为开放标准。阅读解锁数据可移植性。

本文逐一介绍开放目录的三项要求、Unity Catalog 如何满足每一项要求,并比较同一张 Iceberg 表在不同平台上的情况。

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

湖仓一体架构的开放程度取决于目录。许多提供商仍在其目录中的主要表类型上使用专有格式,因此格式值得关注。但除此之外,一个开放目录还必须满足三项要求:

image2.png

开放目录要求含义缺失时的后果
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 的 Predictive Optimization 可在客户自有存储中以 Delta 和 Iceberg 格式对 Unity Catalog 托管表运行。
  • 存储成本。 Snowflake 不会从你自己存储桶中的 Iceberg 表删除孤立文件,例如写入失败后遗留的文件,这意味着你仍需为没有任何表使用的文件付费。而在 Unity Catalog 托管表上,Predictive Optimization 会自动从你的存储桶中移除未被引用的文件,为你节省费用。
Unity Catalog 托管表的自动优化每年为我们节省了超过 100 万美元的存储成本,同时消除了每天繁琐的手动工作。—Abhinav Raghuvanshi,Zepto 数据工程副总监

[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 表可以零数据拷贝迁移到 Databricks 中的 Unity Catalog,完全开放地保留在您自己的存储中,并获得 Unity Catalog 和 Predictive Optimization 的所有优势:

要了解更多信息,请阅读解锁数据可移植性。有关如何使用 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 Catalog Open API 也支持管理表的读写访问。

使用 Apache Iceberg 能防止供应商锁定吗?

仅靠它本身不能。位于提供商控制存储中的 Iceberg 表可能和专有表一样难以迁移,而位于您自己存储中的 Iceberg 表可能获得的功能较少。避免锁定还需要您拥有的存储、这些表上的完整功能,以及支持干净、无拷贝交接的目录。

Unity Catalog 托管表和托管存储有什么区别?

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

我可以在不拷贝数据的情况下将表移出 Unity Catalog 吗?

可以。使用 UNREGISTER,您可以从 Unity Catalog 中移除表,并在另一个 Iceberg REST 目录中注册它,而无需拷贝数据文件。

Unity Catalog 托管表和托管存储有什么区别?

在 Unity Catalog 中,“托管”描述的是谁维护表,而不是谁拥有其存储。Unity Catalog 托管表由目录进行优化和维护,但其文件位于您拥有的云存储账户中。在其他一些平台上,“托管存储”意味着提供商拥有且通常以专有表格式保存的存储。

Databricks 可以写入外部 Iceberg 表吗?

外部 Iceberg 表在 Databricks 中是只读的,因为另一个目录拥有其提交,这可以防止两个目录写入同一个表。要让 Unity Catalog 管理客户拥有的存储中的表,请使用 REGISTER 将其注册到 Unity Catalog 中。您还可以使用 SET MANAGED 将外部表转换为客户拥有的存储中的 Unity Catalog 托管表。

来源:Databricks Blog · databricks.com