目录提交

目录提交将提交协调工作从文件系统转移到 Unity Catalog,使其成为 Delta Lake 和 Apache Iceberg 表状态的唯一可信来源。 这样就可以支持多表事务、更快的查询规划,以及跨所有表操作的受管控访问。

传统的 Delta Lake 事务在单个表级别上协调提交。 每个表单独管理自己的事务日志和冲突检测。 通过将提交协调移动到目录级别,这样组织就可以一致地通过 Unity 目录管理对 Lakehouse 的所有访问。 它还允许 Unity 目录协调单个事务边界内多个表的提交,同时维护 Delta Lake 的 ACID 保证。

Benefits

目录提交提供以下功能:

  • 跨多个表的事务:以单次原子提交形式在多个表中运行多条 SQL 语句。 所有变更同时成功或同时失败。 请参阅 事务

    Important

    写入 Unity Catalog 托管 Delta 表的事务目前处于公共预览阶段。

  • 受管理的访问权限:读取和写入通过 Unity Catalog 目录进行协调,因此引擎能够看到最新的已提交状态,并应用治理策略。

  • 更快的查询规划和写入:Unity 目录在访问表时直接通知 Delta 客户端表级元数据,跳过云存储并删除元数据延迟的主要源。

  • 可强制约束:Unity 目录验证或拒绝架构和约束更改,防止可能会破坏数据完整性或下游工作负荷的不兼容更新。

  • 外部访问:安全地从外部引擎写入 Unity 目录托管表。 Unity Catalog 管理提交以防止数据损坏和并发冲突。 请参阅使用外部系统来访问 Databricks 数据

    Important

    此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版

Requirements

  • 表必须是 Unity Catalog 管理的表(Delta)。

  • 为了读取、写入或创建启用了目录提交的表,需要 Databricks Runtime 16.4 及更高版本。

  • 若要在现有表上启用或禁用目录提交,需要 Databricks Runtime 18.0 及更高版本。

启用目录提交

可以在新的表和现有表上启用目录提交。

为新表启用目录提交

创建表时使用 delta.feature.catalogManaged 表属性:

CREATE TABLE sales_data (
  sale_id BIGINT,
  amount DECIMAL(10,2),
  sale_date DATE
)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

为现有表启用目录变更功能

用于 ALTER TABLE 向现有表添加目录提交:

ALTER TABLE sales_data SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Important

在现有表上启用目录提交会将表状态与目录同步。 对于具有大量写入操作的表,此操作可能需要几分钟时间。

检查是否启用了目录提交

若要验证表是否已启用目录提交,请执行以下操作:

DESCRIBE DETAIL sales_data;

如果已启用, catalogManaged 则显示在 tableFeatures 列中。

关闭目录提交

在使用 Databricks Runtime 18.0 及更高版本时,可以关闭目录提交。 请参阅删除 Delta Lake 表功能并降级表协议

警告

请勿在执行 ALTERDROP 语句时取消升级或降级操作。 中断可能会使该表处于部分升级或降级的状态,导致其此后无法进行任何读写操作。 若要还原,请再次运行相应的命令,而不是取消。 如果表被锁定,请联系 Databricks 支持部门。

Limitations

  • 不能在现有表上使用 CREATE OR REPLACE TABLEREPLACE TABLE 来开启或关闭目录提交。 与 CREATE TABLE 属性一起使用 delta.feature.catalogManaged ,在创建表时打开它,或 ALTER TABLE 打开或关闭现有表。
  • 若要在流式表上使用目录提交,您必须联系 Databricks 客户团队并申请加入公开预览。
  • 目录提交操作与流式表上的外部数据访问不兼容。 若要使用目录提交,必须先禁用外部访问。 请参阅 为流式表和物化视图启用外部数据访问
  • 启用了目录提交的表通过 OpenSharing 共享时,使用预签名 URL 而非云令牌。
  • 具体化视图 不能启用目录提交。
  • 单用户群集无法访问启用了目录提交功能的流式表。

其他资源