2026指南:Unity Catalog托管表存储规则
DataHot 速览
Databricks 官方博客介绍 Unity Catalog 托管表的存储模型:表数据仍存放在用户自有的云存储账户(如 S3、ADLS、GCS)中,而非厂商控制的存储或专有格式。无论使用 Iceberg 还是 Delta,Databricks 都会在用户选择的位置自动处理数据布局、调优和清理。Unity Catalog 通过开放 API 和凭证下发,让 Apache Spark、Flink、Trino、Kafka Connect、Snowflake 等外部工具以受治理方式读写托管表,避免复制数据。文章说明如何选择或更改 Databricks 托管存储位置。
为什么值得关注:对数据平台与湖仓从业者,理解 Unity Catalog 托管表的存储归属、开放格式互操作和治理访问机制,有助于评估数据主权、跨引擎架构与平台选型。
译文
AI 逐段翻译Unity catalog 托管表允许你在组织需要独立存储时控制数据的存放位置。与其他数据平台不同,Databricks 表数据保留在你拥有的云存储账户中,例如你的 S3 存储桶、ADLS 容器或 GCS 存储桶。
Unity Catalog托管表可自动完成表管理。无论你将 Unity Catalog 托管表存储为 Iceberg 还是 Delta 格式,Databricks 都会在你选择的位置为你处理数据布局、调优和清理,并随着你的表发生变化自动应用优化。
本博客介绍托管表存储模型的工作原理,以及你如何选择或更改 Databricks 托管存储位置。
你的表保留在你拥有的存储中
当你自带云存储时,托管表数据会存放在你拥有的云账户中。你保留对该存储的所有权,并能了解数据是如何组织的。你可以检查、审计并应用你自己的存储桶策略,同时控制数据的位置。
与其他提供托管表或原生表产品的平台不同——它们将表存放在提供商控制的存储或专有数据格式中——在 Databricks,你的数据保留在你自己的账户中。
设计上开放
将数据保留在你自己的云账户中,只是 Databricks 托管表开放性的一个方面。Unity Catalog 是业内唯一的主要目录,让你成为数据的所有者,并拥有跨 Iceberg 和 Delta 的完全受治理的读写访问权限,还能使用开放标准联合访问他人拥有的开放格式表。
Apache Spark™、Flink、Trino、Kafka connect 和 Snowflake 等外部工具可以通过 Iceberg Rest Catalog 和 Unity Catalog 的开放 API 读写托管表。通过开放 API 和凭证分发实现安全访问,使外部工具能够与受治理的数据交互而无需复制数据。这简化了架构,并在分析和 AI 工作负载之间实现单一事实来源。
当你自带存储时,文件仍可在你的云账户中访问,同时 Unity Catalog 治理对它们的访问。
你控制数据所在的位置
使用 Databricks 中的托管表,你可以决定托管表数据的存放位置。在元存储、目录或架构级别设置一次托管存储位置,其下的每个表都会继承它。最具体的级别优先:架构的位置优先于其目录的位置,目录的位置优先于元存储的位置。你可以设置一个宽泛的默认值,并在团队或领域需要自己的存储时覆盖它。
这种控制并非在设置时就固定下来。随着组织的变化,ALTER CATALOG或ALTER SCHEMA ... SET MANAGED LOCATION会将新表和卷指向新位置,而所有已写入的内容仍保留在原处。

当你需要独立存储时拥有更多控制
大多数团队通过目录和架构以逻辑方式组织数据,从不需要考虑底层文件实际存放在哪里:他们的目录和架构所继承的托管存储位置就足够了。结合 Unity Catalog 中基于角色和基于属性的访问控制,这种方式可满足标准的 GDPR 数据隔离要求。
然而,有些组织需要将边界延伸到物理存储本身。某个业务线可能需要独立的存储以进行管理或云成本分配。或者区域和监管规则可能规定某些数据的物理存放位置。在这些情况下,你可以为特定目录或架构分配自己的托管存储位置,使数据的物理放置与其所需的边界保持一致。
在转换为托管表时选择数据的存放位置
当你将外部表转换为托管表时,数据会存放在其目录或架构当前解析到的托管存储位置。如果该外部表已经位于临时或非标准位置,你可能希望托管表存放在别处,即你今天为该领域使用的存储中。
在转换过程中,Databricks 会将表的数据和事务日志复制到你设置的托管存储位置,因此托管表会存放在你所选择的位置。
总结
托管表可自动完成表维护,同时你的数据可以保留在你拥有的存储中。这不同于其他将表数据存放在提供商控制存储中的托管平台。你可以在元存储、目录或架构级别控制放置位置,更改新表的存放位置,并在将外部表转换为托管表时选择位置。你的数据保持开放格式,可通过 Iceberg Rest Catalog 和 Unity Catalog 开放 API 访问。
当你准备好设置或更改托管存储位置时,托管存储文档涵盖了具体细节。
| 能力 | Databricks Unity Catalog | 其他平台 |
| 数据存储在客户拥有的存储中 | ✅ 是 | 通常为专有 |
| 开放表格式(Iceberg 和 Delta) | ✅ 是 | 因格式而异 |
| 外部工具读写访问并具备行级和列级治理 | ✅ 通过 Iceberg REST Catalog 或 Unity Catalog 开放 API | 有限 |
| 可以在目录/架构级别控制存储位置 | ✅ SET MANAGED LOCATION | 不常见 |
定义
这些术语中有很多重复使用同样的几个词,因此很容易混淆。以下是本文中每个术语的含义。
- 托管表:一种由 Unity Catalog 为你管理其数据和生命周期的表。你创建它时无需
LOCATION子句。 - 托管存储位置:元存储、目录或架构的托管表和卷所写入的云存储路径。你通过
SET MANAGED LOCATION子句来设置它。 - 外部位置:一种 Unity Catalog 对象,将云路径与存储凭证配对,以治理对该路径的访问。外部位置同时治理外部表和托管存储:目录级或架构级的托管存储位置位于其中一个外部位置内。
- 客户拥有的存储:一种存储选项,其中底层云存储位于客户自己的云账户中。Databricks 中绝大多数表都属于这种情况。
- 默认存储: 另一种存储选项,由 Databricks 为你预置底层云存储,而无需你自带存储桶。
- ALTER CATALOG / ALTER SCHEMA … SET MANAGED LOCATION: 该命令用于更改目录或模式的新的托管表和卷的写入位置。现有表不受影响。
- 外部表转托管表(ALTER TABLE … SET MANAGED): 该命令用于将外部表转换为托管表。转换期间,数据和事务日志会被复制到当前托管存储位置。
常见问题解答
1. Unity Catalog 将托管表数据存储在哪里,是 Databricks 拥有的存储还是我自己的云账户?
在你自己账户中。托管表数据会写入你自己账户中的云存储,无论是 S3、ADLS 还是 GCS,位置是你在元存储、目录或模式上设置的托管存储位置。Databricks 管理表的布局和生命周期,但底层文件位于你拥有并向 Unity Catalog 注册的存储桶或容器中,而不是 Databricks 控制的账户中。
2. Unity Catalog 托管表会让我被锁定在 Databricks 上吗?
不会。托管表使用包括 Iceberg 和 Delta 在内的开放表格式,这些格式保留在你拥有的云存储中。外部引擎可以通过 Iceberg REST Catalog 和 Unity Catalog 的开放 API 对其读写,因此你的数据不会被困在专有接口之后。你保留存储的所有权,数据保持开放格式,访问通过开放标准进行。托管表不会造成锁定:在托管表上迁入或迁出 Databricks 与在外部表上一样可行,在两种情况下,你都可以让数据在物理上留在同一位置。
3. 出于合规或数据驻留要求,我可以将某些数据保存在单独的存储中吗?
可以。如果有需要,你可以为特定目录或模式指定其自己的托管存储位置,与其他所有内容分开,以便将不同国家或监管制度的数据保存在不同的存储中,或将存储成本归属到特定团队或业务部门。
4. Databricks 以外的引擎和工具可以写入和读取我的托管表吗?
可以。托管表可通过 Iceberg REST Catalog 和 Unity Catalog 的开放 API 进行读取或写入,因此 Apache Spark、Trino 和 Flink 等外部引擎可以访问它们。Unity Catalog 负责存储访问的治理,防止绕过它们可能导致的数据损坏。还提供基于路径的直接访问,方式包括 基于路径的重定向 和 兼容模式。
5. 在设置之后,我可以更改托管表数据的存储位置吗?
可以。使用 ALTER CATALOG … SET MANAGED LOCATION 或 ALTER SCHEMA … SET MANAGED LOCATION 可在你的组织需要物理分离发生变化时,将新表指向不同的位置:重组、新存储桶、新区域。现有表仍留在原处,新表会落在新位置。每当你将外部表转换为托管表时,其数据会被复制到你设置的位置,因此你可以在同一步骤中将数据迁移到正确的归属位置。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏