本页介绍如何启用目录管理的提交,这是一项 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 表功能并降级表协议。
警告
请勿在执行 ALTER 或 DROP 语句时取消升级或降级操作。 中断可能会导致表处于部分升级或降级状态,从而锁定其所有未来的读取和写入操作。 若要还原,请再次运行相应的命令,而不是取消。 如果表被锁定,请联系 Databricks 支持部门。
局限性
- 无法使用
CREATE OR REPLACE TABLE或REPLACE TABLE来启用或禁用目录管理的提交。 与CREATE TABLE属性一起使用delta.feature.catalogManaged,以便在创建表时启用它,或在ALTER TABLE现有表上启用或禁用它。
- 启用目录管理提交功能的表通过 增量共享 使用预先签名的 URL 而不是云令牌进行共享。
- 启用目录管理提交的表顶部视图不能进行 Delta 共享。
- 具体化视图 和 流表 不能启用由目录管理的提交。
- 启用了目录管理提交的表不能作为 Lakeflow 作业触发器的源表。