重要
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。