适用于 Delta Lake 和 Apache Iceberg 的 Azure Databricks 中的 Unity Catalog 托管表

Important

Unity Catalog 托管表通常适用于 Delta Lake 表。 对于 Apache Iceberg 表,此功能以 公共预览版 提供,在 Databricks Runtime 16.4 LTS 及更高版本中可用。

本页介绍 Delta Lake 和 Apache Iceberg 中的 Unity 目录托管表,这是 Azure Databricks 中的默认表类型和建议表类型。 与 外部表和外部表以外的表相比,这些表由 Unity Catalog 完全治理和优化,提供更好的性能和操作优势,以及较低的存储和计算成本,因为托管表会从您的读取和写入模式中学习。 Unity 目录管理托管表的所有读取、写入、存储和优化责任。 请参阅 将外部表转换为托管 Unity 目录表

托管表的数据文件存储在包含它们的架构或目录中。 请参阅在 Unity Catalog 中指定托管存储位置

Databricks 建议使用托管表来利用:

  • 降低了存储和计算成本。
  • 跨所有客户端类型加快查询性能。
  • 自动数据表维护和优化。
  • 通过打开的 API 保护非 Databricks 客户端的访问。
  • 支持 Delta Lake 和 Iceberg 格式。
  • 自动升级到最新的平台功能。

托管表通过允许从 Delta Lake 和 Iceberg 客户端进行访问来支持互作性。 通过开放 API 和凭据发放,Unity Catalog 使外部引擎(如 Trino、DuckDB、Apache Spark、Daft)以及与 Iceberg REST 集成的目录引擎(如 Dremio)能够访问管理表。 对于不支持开放 API 的外部客户端,可以使用 兼容性模式 通过任何 Delta Lake 或 Iceberg 客户端读取托管表。 Delta Sharing是一种开源协议,支持与外部合作伙伴和平台进行安全且受治理的数据共享。

可以在 Azure Databricks 支持的所有语言和产品中使用托管表。 需要某些权限才能创建、更新、删除或查询托管表。 请参阅在 Unity Catalog 中管理权限

Note

本页重点介绍 Unity 目录托管表。 有关旧 Hive 元存储中的托管表,请参阅 旧 Hive 元存储中的数据库对象

为何使用 Unity 目录托管表?

Unity 目录托管表使用 AI 驱动的技术(例如自动群集、文件大小压缩和智能统计信息收集)自动优化存储成本和查询速度。 这些表使用自动清扫和元数据缓存等功能简化数据管理,同时确保与 Delta 和 Iceberg 第三方工具的互作性。

以下功能对于 Unity 目录托管表是唯一的,不适用于外部表和外表。

Feature Benefits 默认情况下是否启用? 配置?
预测优化 使用 AI 自动优化数据布局和计算,因此无需手动处理托管表的作。 Databricks 建议为所有托管表启用预测优化,以减少存储和计算成本。
预测优化会自动运行:
是,对于在 2024 年 11 月 11 日或之后创建的所有新帐户。
对于当前帐户,Azure Databricks 默认开始推出预测优化。 请参阅 检查是否启用了预测优化
是的。 请参阅 “启用预测优化”。
自动液体聚类分析 对于 具有预测优化的表,启用自动液体聚类分析允许 Azure Databricks 智能选择聚类分析键。 随着查询模式的变化,Azure Databricks 自动更新群集密钥以提高性能和降低成本。 是的。 请参阅启用液体聚类
元数据缓存 事务元数据的内存中缓存可最大程度地减少对存储在云中的事务日志的请求,从而提高查询性能。 此功能可增强查询性能。 是的 否。 始终为托管表启用元数据缓存。
命令后 DROP TABLE 自动删除文件 如果 删除 托管表,Azure Databricks 将在 8 天后删除云存储中的数据,从而减少存储成本。 对于外部表,必须手动转到存储存储桶并删除文件。 是的 否。 对于托管表,文件始终在 8 天后自动删除。

使用外部系统来访问 Databricks 数据

托管表通过允许从 Delta Lake 和 Iceberg 客户端进行访问来支持 互作性 。 通过开放 API 和凭据分发,Unity 目录服务支持外部引擎(如 Trino、DuckDB、Apache Spark、Daft)以及 Iceberg REST 目录集成的引擎(如 Dremio 和 Snowflake)来访问托管表。 请参阅集成以获取受支持的外部引擎列表,或者如果您的引擎未包含在此列表中,请检查其文档。

以下开放 API 提供对 Unity 目录托管表的外部系统访问权限:

  • Unity REST API:为 Delta 客户端提供对托管 Delta 表的只读访问权限。
  • Iceberg REST 目录 (IRC):为 Iceberg 客户端提供读取和写入访问权限,以管理 Iceberg 表,以及对启用了 Iceberg 读取的 Delta 表的只读访问权限(UniForm)。

两个 API 都支持凭据分发,提供临时、限定范围的凭证,这些凭证继承请求 Azure Databricks 主体的权限,并保持安全和治理控制。

此外, Delta 共享 是一种开放源代码协议,允许对外部合作伙伴和平台进行安全和管理的数据访问。 可以使用 Delta Sharing 向合作伙伴授予临时只读访问权限。

对托管表的所有读取和写入都必须使用表名称和目录和架构名称(如果存在)。 例如,catalog_name.schema_name.table_name。 不支持对 Unity 目录托管表进行基于路径的访问(在 兼容模式下除外),因为它绕过 Unity 目录访问控制并阻止托管表功能正常工作。

创建托管表

若要创建托管表,你必须具备:

  • 对表父架构的 USE SCHEMA 权限。
  • 对表父级目录的 USE CATALOG 特权。
  • 对表父架构的 CREATE TABLE 权限。

使用以下 SQL 语法通过 SQL 创建空托管表。 替换占位符值:

  • <catalog-name>:将包含表的目录的名称。
  • <schema-name>:包含表的架构名称。
  • <table-name>:表的名称。
  • <column-specification>:每个列的名称和数据类型。
-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
)
USING iceberg;

为了保持读取和写入的性能,Azure Databricks 会定期运行作来优化托管的 Iceberg 表元数据。 此任务使用无服务器计算执行,该计算对 Iceberg 表具有 MODIFY 权限。 此操作仅写入表的元数据,并且计算过程仅在任务期间维护对该表的权限。

Note

若要创建 Iceberg 表,请显式指定 USING iceberg。 否则,Azure Databricks 默认创建 Delta Lake 表。

你可以根据查询结果或 DataFrame 写入操作创建托管表。 以下文章演示了可用于在 Azure Databricks 上创建托管表的一些模式:

删除托管表

若要删除托管表,你必须具备:

  • 表的 MANAGE 权限,或者你必须是表的所有者。
  • 对表父架构的 USE SCHEMA 权限。
  • 对表父级目录的 USE CATALOG 特权。

若要删除托管表,请运行以下 SQL 命令:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Unity 目录支持 UNDROP TABLE 命令在 8 天内恢复已删除的托管表。 8 天后,Azure Databricks 会标记要从云租户中删除的基础数据,并在自动表维护期间删除文件。 请参阅 UNDROP