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

重要

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

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

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

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

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

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

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

对托管表的所有读取和写入都必须使用表名称和目录和架构名称(例如, catalog_name.schema_name.table_name)。

注释

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

为何使用 Unity 目录托管表?

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

功能 / 特点 优点
预测优化 使用 AI 优化数据布局和计算,方法是自动调整计算大小、打包作业以实现最大效率,并记录结果,以便观察所发生的事情。
预测优化会自动运行:

此功能通过节省存储大小来降低计算和存储成本。 请参阅 Unity Catalog 托管表的预测优化
自动液体聚类分析 基于表查询访问模式自动对数据进行最高效地聚集,这会增加所有客户端(Databricks 和非 Databricks)的查询速度。 请参阅 自动液体聚类
自动统计 统计信息收集通过实现高效的数据跳过和联接策略来提高查询性能。 Azure Databricks 可以自动收集基本统计信息(例如列的最小值和最大值),以确定哪些文件不相关,并在查询执行期间排除它们。 这减少了计算开销。 Unity Catalog 外部表默认情况下基于前 32 列生成统计信息,而 Unity Catalog 托管表则动态生成与查询工作负载最相关的列的统计信息。
元数据缓存 事务元数据的内存中缓存,以最大程度地减少对存储在云中的事务日志的请求。 此功能可增强查询性能。
文件大小优化 Azure Databricks 通过学习从幕后数千个生产部署收集的数据,自动压缩文件大小,使其达到合适的大小。 Azure Databricks 将自动确定目标文件大小,并调整写入以更好地符合这些文件大小,这有助于提高查询性能并节省存储成本。 请参阅配置 Delta Lake 以控制数据文件大小
DROP TABLE 如果 删除 托管表,数据将在 7 天后自动在云存储中删除,从而减少存储成本。 对于外部表,必须手动转到存储桶并删除文件。

创建托管表

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

  • 对表父架构的 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 权限。 此操作仅写入表的元数据,并且计算过程仅在任务期间维护对该表的权限。

注释

若要创建 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 命令在 7 天内恢复已删除的托管表。 7 天后,Azure Databricks 会标记要从云租户中删除的基础数据,并在自动表维护期间删除文件。 请参阅 UNDROP