Unity Catalog 托管表的预测优化

预测优化可在 Azure Databricks 上针对由 Unity Catalog 管理的表(Delta Lake 和 Iceberg)自动运行 OPTIMIZEVACUUMANALYZE,从而免除手动维护,并减少用于跟踪性能问题的时间。

注意

对于在 2024 年 11 月 11 日或之后创建的帐户,默认启用预测优化。 Databricks 正在逐步为现有账户启用该功能。 预计到 2026 年 8 月,此推出将完成。 若要检查帐户是否已启用,请参阅 验证是否已启用预测优化

启用预测优化后,Databricks 会自动执行以下操作:

  • 识别可从维护操作中受益的表,并将这些操作排入队列以运行。
  • 在将数据写入托管表时收集统计信息。

这消除了不必要的维护运行以及手动跟踪和故障排除性能的负担。

Databricks 建议对所有 Unity 目录托管表进行预测优化。 例如,自动液体聚类根据数据使用模式智能优化数据布局。 请参阅对表使用 liquid 聚类分析

预测优化运行哪些操作?

预测优化在 Unity 目录托管表上运行以下操作:

操作 说明
OPTIMIZE 为已启用的表触发增量聚类分析。 请参阅对表使用 liquid 聚类分析。 通过优化文件大小来提高查询性能。 请参阅优化数据文件布局
VACUUM 通过删除表不再引用的数据文件来降低存储成本。 在启用 Iceberg 读取的表中,还会清理无法访问的 Iceberg 元数据文件。 请参阅 使用 vacuum 删除未使用的数据文件VACUUMIceberg 元数据清理
ANALYZE 扫描表并收集统计信息以提高查询性能。 请参阅 ANALYZE TABLE ...计算统计信息。 若要删除预测优化收集的统计信息,请参阅 ANALYZE TABLE ...DROP STATISTICS

注意

OPTIMIZE 在由预测优化执行时不运行 ZORDER 。 在使用 Z 顺序的表上,预测优化将忽略 Z 排序的文件。

如果启用了自动液体聚类分析,预测优化可能会在聚类分析数据之前选择新的聚类分析键。 请参阅 自动液体聚类

警告

保留时段 VACUUMdelta.deletedFileRetentionDuration 表属性确定,默认为 7 天。 VACUUM 删除在该时间范围内不再被 Delta 表版本引用的数据文件。 若要保留较长持续时间的数据(例如,为了支持延长时间旅行),在启用预测优化之前设置此属性:

ALTER TABLE table_name SET TBLPROPERTIES ('delta.deletedFileRetentionDuration' = '30 days');

计算和计费

预测性优化使用无服务器计算运行 ANALYZEOPTIMIZEVACUUM 操作来处理作业。 你的帐户将使用无服务器作业 SKU 对此计算进行计费。

请参阅 Databricks 托管服务的定价。 请参阅使用系统表跟踪预测性优化

先决条件

必须满足以下要求才能使用预测优化:

  • Azure Databricks 工作区必须在高级计划下,并位于受支持的区域
  • 必须使用 SQL 仓库或 Databricks Runtime 12.2 LTS 或更高版本。
  • 仅支持 Unity Catalog 托管表。

启用预测优化

可以为帐户、目录、架构或表启用预测优化。 默认情况下,所有 Unity 目录托管表都继承帐户值。 可以在目录、架构或表级别替代帐户默认值。

必须具有以下权限才能启用或禁用预测优化:

Unity Catalog 对象 权限
帐户​​ 帐户管理员
目录 目录所有者或具有 MANAGE 目录特权的用户
架构 架构所有者或具有 MANAGE 架构特权的用户
Table 表所有者,或对该表具有 MANAGE 权限的用户

启用或禁用帐户的预测优化

帐户管理员可以为帐户中的所有元存储启用预测优化。 目录和架构默认继承此设置,但可以在任一级别重写此设置。

  1. 转到帐户控制台。
  2. 导航到“设置”,然后导航到“功能启用”。
  3. 选择预测优化旁边的选项(例如已启用)。

注意

  • 不支持预测优化的区域中的元存储未启用。
  • 在帐户级别禁用预测优化不会影响那些已经明确启用了该功能的目录或架构。

启用或禁用目录、架构或表的预测优化

预测优化使用继承模型。 为目录启用时,该目录中的架构将继承该设置,并且启用的架构中的表也会继承该设置。 可以显式启用或禁用目录、架构或表的预测优化以替代此行为。

注意

在帐户级别启用预测优化之前,可以在目录、架构或表级别禁用预测优化。 如果稍后在账户级别启用预测优化,则对于已明确禁用该功能的对象,预测优化仍会被阻止。

使用以下语法启用、禁用或重置预测优化,以便从父对象继承:

ALTER CATALOG [catalog_name] { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION;
ALTER { SCHEMA | DATABASE } schema_name { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION;
ALTER TABLE table_name { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION;

请参阅 ALTER TABLE

验证是否启用了预测优化

Predictive Optimization 字段是一个 Unity 目录属性,用于显示是否启用预测优化。 如果设置继承自父对象,则字段值将指示这一点。

使用以下语法检查状态:

DESCRIBE (CATALOG | SCHEMA | TABLE) EXTENDED name

检查预测优化为何跳过表

在 Databricks Runtime 18 LTS 及更高版本上,预测优化评估托管表后,可以通过两种方式检查操作被跳过的原因:

  • 使用 DESCRIBE TABLE EXTENDED ... AS JSON 查询表。
  • 使用目录资源管理器中的“ 历史记录 ”选项卡。

结果最多可能需要 24 小时才能显示。

使用 DESCRIBE TABLE EXTENDED ... AS JSON

DESCRIBE TABLE EXTENDED ... AS JSON 返回输出中的字段 predictive_optimization_evaluations 。 此字段列出了每个操作类型及其最新的评估结果。

若要检查表的评估结果,请运行以下命令:

DESCRIBE TABLE EXTENDED catalog_name.schema_name.table_name AS JSON

predictive_optimization_evaluations 字段显示每个操作类型的最新结果。 仅显示最新评估,不显示历史记录。 操作类型包括:

  • COMPACTION
  • CLUSTERING
  • AUTO_CLUSTERING_COLUMN_SELECTION
  • VACUUM

评估输出中不显示 ANALYZE 操作的跳过原因。

使用目录资源管理器中的“历史记录”选项卡

可以在目录浏览器中某个表的 “历史记录” 选项卡中查看跳过原因。 在 “操作 ”列中, “自动” 标签指示操作已运行, “未应用 ”标签指示已跳过该操作。 Auto 标签包括预测优化和其他自动操作,例如流式自动压缩。

若要查看跳过原因,请单击操作列中“未应用标签”的行。

显示预测性优化跳过原因的目录浏览器历史记录选项卡

下表显示了输出中的 DESCRIBE TABLE EXTENDED 操作类型如何映射到目录资源管理器中显示的操作:

DESCRIBE TABLE EXTENDED 操作类型 目录浏览器操作 说明
COMPACTION OPTIMIZE 文件压缩以提高查询性能
CLUSTERING OPTIMIZE 增量液体聚类分析
AUTO_CLUSTERING_COLUMN_SELECTION AUTO LIQUID 液态聚类键的评估或演变
VACUUM VACUUM 删除表不再引用的数据文件

使用系统表跟踪预测优化

Databricks 提供系统表 system.storage.predictive_optimization_operations_history 用于监控预测优化操作、成本和影响。 请参阅预测优化系统表参考

如果系统表将操作标记为失败并显示 FAILED: PRIVATE_LINK_SETUP_ERROR,则可能未正确配置无服务器专用链接。 请参阅 配置与 Azure 资源的专用连接

限制

预测优化不会在下表类型上运行:

  • 作为 OpenSharing 接收方加载到工作区的表
  • 外部表