由目录管理的提交

本页介绍如何启用目录管理的提交,这是一项 Delta 表功能,该功能将提交协调从文件系统转移到 Unity 目录,使目录成为表状态的单一事实来源。

概述

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

优点

目录管理的提交提供以下功能:

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

    重要

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

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

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

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

要求

  • 表必须是 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');

重要

对现有表启用目录管理提交会将表状态与目录同步。 对于具有高写入工作负荷的表,此操作可能需要几分钟时间。

检查目录管理提交是否已启用

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

DESCRIBE DETAIL sales_data;

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

禁用目录管理的提交

您可以使用 Databricks Runtime 18.0 及更高版本禁用由目录管理的提交。 请参阅删除 Delta Lake 表功能并降级表协议

警告

请勿在执行 ALTERDROP 语句时取消升级或降级操作。 中断可能会导致表处于部分升级或降级状态,从而锁定其所有未来的读取和写入操作。 若要还原,请再次运行相应的命令,而不是取消。 如果表被锁定,请联系 Databricks 支持部门。

局限性

  • 无法使用CREATE OR REPLACE TABLEREPLACE TABLE来启用或禁用目录管理的提交。 与 CREATE TABLE 属性一起使用 delta.feature.catalogManaged ,以便在创建表时启用它,或在 ALTER TABLE 现有表上启用或禁用它。
  • 启用目录管理提交功能的表通过 增量共享 使用预先签名的 URL 而不是云令牌进行共享。
  • 启用目录管理提交的表顶部视图不能进行 Delta 共享。
  • 具体化视图流表 不能启用由目录管理的提交。
  • 启用了目录管理提交的表不能作为 Lakeflow 作业触发器的源表。

后续步骤