内容提要
开放数据目录的核心在于数据可移植性。Unity Catalog将托管表存储在用户自有云存储中,由目录负责优化维护,并支持Iceberg REST规范的REGISTER与UNREGISTER,使表可在目录间迁移而无需复制数据。相比之下,许多平台将表锁定在自有存储和专有格式中,迁移需导出重写。Unity Catalog托管表保留完整功能且无锁定,未来还将支持原地转换外部表。
延伸解读
“开放格式”不等于“开放目录”
文章指出,许多平台虽支持Iceberg等开放格式,但若表存储在提供商控制的桶中,格式开放只是名义上的。用户无法在自己的云账户中查看文件,存储费用通过提供商结算,迁移时仍需复制所有表。真正的开放目录需满足三个条件:数据存储在用户自有存储中、在该存储上提供完整功能、支持无数据复制的可移植性。Unity Catalog声称同时满足这三点。
托管表的所有权与维护权分离
在Databricks中,“托管”描述的是谁维护表,而非谁拥有存储。Unity Catalog托管表由目录负责优化、维护和升级,但文件存放在用户自有的云存储账户中。文章称99%的UC托管表位于客户自有存储。相比之下,一些平台的“托管存储”指提供商拥有并控制的存储,表默认锁定在专有格式中,迁移需导出重写。这种所有权差异直接影响退出成本。
REGISTER与UNREGISTER实现无复制迁移
Unity Catalog是首个同时支持Iceberg REST目录规范中REGISTER和UNREGISTER的目录。UNREGISTER由Databricks贡献给该规范,成为开放标准。两者配合,可将现有Iceberg表移入或移出Unity Catalog,无需移动数据文件。文章强调,UNREGISTER无法在提供商控制的存储上实现,因为退出API无法交出用户带不走的文件指针。目前该功能处于Private Preview阶段。
功能完整性是开放性的隐性门槛
文章提醒,仅提供客户自有存储选项还不够。一些平台将最佳能力保留给提供商控制的托管存储,客户自有存储路径功能受限,形成“开放假象”。Unity Catalog则声称在客户自有存储路径上支持完整功能,包括自动优化和预测性优化。文中引用Zepto案例称,自动优化每年节省超100万美元存储成本。读者需注意,功能完整性是评估目录开放性的关键维度。
Q&A
什么样的数据目录才算真正开放?
真正开放的数据目录需要满足三个要求:数据存储在用户自己拥有的云存储中;在该存储上提供完整功能;支持数据可移植性,即表可以在不同目录间迁移而无需复制数据。
Unity Catalog 的托管表存储在谁拥有的存储中?
Unity Catalog 的托管表存储在用户自己拥有的云存储账户中,而不是平台控制的存储。在 Databricks 中,99% 的 UC 托管表位于客户拥有的存储里。
如何在不复制数据的情况下将 Iceberg 表移出 Unity Catalog?
使用 UNREGISTER 操作。Unity Catalog 是首个同时支持 Iceberg REST 规范中 REGISTER 和 UNREGISTER 的目录,UNREGISTER 可以将表从 Unity Catalog 中移除,之后可在另一个 Iceberg REST 目录中注册,无需移动任何数据文件。
为什么有些平台即使支持 Iceberg 格式仍然存在锁定?
因为这些平台将表存储在提供商控制的存储桶中,并使用专有格式。虽然格式是开放的,但数据文件不在用户自己的云账户中,用户无法直接查看文件,存储费用通过提供商结算,离开时需要先复制所有表,因此格式开放只是名义上的。
Unity Catalog 中的“托管”是什么意思?
在 Unity Catalog 中,“托管”描述的是谁负责维护表,而不是谁拥有存储。目录负责优化、维护和升级表,但文件存储在用户拥有的云存储账户中。这与一些其他平台将“托管存储”定义为提供商拥有和控制的存储不同。
外部 Iceberg 表在 Databricks 中为什么是只读的?
因为外部 Iceberg 表由另一个目录拥有其提交权,为了防止两个目录同时写入同一张表,所以 Databricks 将其设为只读。若要让 Unity Catalog 管理该表,可以使用 REGISTER 将其注册到 Unity Catalog 中,数据仍留在客户拥有的存储里。