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

本页介绍 Delta Lake 和 Apache Iceberg 中的 Unity 目录托管表,这是 Azure Databricks 中的默认表类型和建议表类型。 与 外部表和外部表以外的表相比,这些表由 Unity Catalog 完全治理和优化,提供更好的性能和操作优势,以及较低的存储和计算成本,因为托管表会从您的读取和写入模式中学习。 Unity 目录管理托管表的所有读取、写入、存储和优化责任。 请参阅 将外部 Delta 表转换为托管 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 目录托管表优化存储成本和查询速度,并允许与 Delta Lake 和 Apache Iceberg 的第三方工具的互操作性。 为了简化数据管理和性能,这些托管表使用 AI 提供支持的技术,例如文件大小压缩和智能统计信息收集。

以下功能仅适用于 Unity Catalog 托管表,不适用于外部表和外来表:

Feature Benefits 默认情况下是否启用? 可配置?
目录提交 支持跨表多语句事务、通过直接从 Unity Catalog 提供元数据来加快查询规划速度、可强制执行架构和约束变更,以及支持从外部引擎安全写入。 否。 是的。
设置delta.feature.catalogManaged表属性。 请参阅 “启用目录提交”。
预测优化 预测性优化利用 AI 自动优化您的数据布局和计算资源,无需手动维护操作。 Databricks 建议为所有托管表启用预测优化,以减少存储和计算成本。
预测优化会自动运行:
是,对于在 2024 年 11 月 11 日或之后创建的所有新帐户。
对于当前帐户,默认情况下,Azure Databricks将逐步启用预测优化。 请参阅 “验证是否启用了预测优化”。
是的。 请参阅 “启用预测优化”。
多语句事务 允许对一个或多个表执行多条 SQL 语句,并作为一次原子提交,且具备 ACID 保证。 所有更改要么一起成功,要么一起回滚。 用于任务关键型仓库工作负荷中的 存储过程SQL 脚本
对托管 Delta Lake 表进行写入的事务目前处于公开预览阶段。
写入托管 Apache Iceberg 表的事务目前处于专属预览阶段。
否。 是的。 对于非交互式事务,请使用 BEGIN ATOMIC ... END;;对于交互式事务,请使用 BEGIN TRANSACTION; ... COMMIT;。 请参阅 事务模式
自动液体聚类分析 对于启用了预测性优化的表,自动液态聚类可让 Azure Databricks 智能地选择聚类键。 随着查询模式的变化,Azure Databricks 自动更新群集密钥以提高性能和降低成本。 否。 是的。 请参阅启用液体聚类
元数据缓存 事务元数据的内存中缓存可最大程度地减少对存储在云中的事务日志的请求,从而提高查询性能。 是的。 否。 始终为托管表启用元数据缓存。
全文搜索索引 全文搜索索引可加速托管表文本列的子字符串和关键字查找。 应用索引时,Azure Databricks跳过不能包含匹配行的文件,从而减少扫描的数据量。
全文搜索索引使用 searchisearch 函数加快子字符串和字词查找的速度。
全文搜索索引为 Beta 版,需要 Databricks Runtime 18.2 及更高版本。
否。 是的。 使用 CREATE INDEX(次要)或 CREATE SEARCH INDEX(全文)进行创建。
命令后 DROP TABLE 自动删除文件 如果您DROP托管表,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