说明创建具体化视图

适用于:勾选是 Databricks SQL 勾选是 Databricks Runtime 17.3 及更高版本

报告是否可以逐步刷新实体化视图的查询。 在创建具体视图或运行昂贵刷新前,先在语句前检查EXPLAINCREATE MATERIALIZED VIEW增量化的资格。

若要了解具体化视图增量化,请参阅 具体化视图的增量刷新

WHAT EXPLAIN 报告

EXPLAIN CREATE MATERIALIZED VIEW 检查查询是否 结构性符合 增量刷新的条件。 Incremental Update Eligibility输出部分报告了两种结果之一:

  • The Materialized View can be incrementally refreshed查询模式支持增量刷新。
  • The Materialized View cannot be incrementally refreshed:该查询在结构上不符合增量刷新的资格。 在和AUTOFULL刷新策略下,实体化视图使用完整的重新计算。 在 或 INCREMENTALINCREMENTAL STRICT下,由于无法进行增量刷新,导致 CREATE 失败。 该 Detailed Incrementalization Info 部分列出了防止增量化的因素。

结构性资格并不保证增量刷新一定会运行。 在默认 AUTO 刷新策略下,成本模型在运行时做出最终决策,并且仍可为符合条件的实体化视图选择完整重新计算。 详情请参见 资格和运行时行为

何时使用 EXPLAIN

运行 EXPLAIN CREATE MATERIALIZED VIEW

  • 在部署新的具体化视图之前,先验证查询模式是否支持增量刷新。
  • 调试时,可以进行慢刷新,以确认实体化视图是否符合条件。 如果不是,就重写查询。
  • 在你重写查询后,要确认新版本是否符合条件。
  • 当你从dbt或其他工具迁移时,可以验证转换后的查询是否受益于增量刷新。

Syntax

EXPLAIN [CREATE MATERIALIZED VIEW query]

参数

  • 查询

    创建具体化视图的 SQL 查询。 请在提问前补充 EXPLAIN

    注释

    CREATE MATERIALIZED VIEW 来自 Lakeflow 管道的查询在更新的情况下可能无法使用 EXPLAIN 。 例如:

    • 必须从查询中删除预期(CONSTRAINT...EXPECT 子句)。
    • 在管道上下文中运行时,源数据集可能需要使用目录、架构或其他不需要的路径进行限定。

例子

以下示例展示了合格查询和两个无法增量刷新的查询的输出。

符合增量刷新资格

对三角洲湖表应用过滤器、投影和聚合的查询符合条件:

EXPLAIN CREATE MATERIALIZED VIEW sales_summary AS
SELECT region, SUM(revenue) AS total_revenue, COUNT(*) AS order_count
FROM catalog.schema.orders
WHERE order_date >= '2024-01-01'
GROUP BY region;
== Incremental Update Eligibility ==
The Materialized View can be incrementally refreshed.

== Detailed Incrementalization Info ==
No issues detected.

不符合条件:使用 LIMIT

使用 的 LIMIT 查询不可增量化,因为极限算子无法增量维护:

EXPLAIN CREATE MATERIALIZED VIEW top_customers AS
SELECT customer_id, total_spend
FROM catalog.schema.customer_summary
ORDER BY total_spend DESC
LIMIT 100;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- OPERATOR_NOT_INCREMENTALIZABLE: Operators GlobalLimit, LocalLimit are not incrementalizable. Consider rewriting the query to avoid using them.

不符合条件:非三角洲湖来源

从非Delta Lake来源读取的查询,如CSV文件,则不可增量化:

EXPLAIN CREATE MATERIALIZED VIEW external_data AS
SELECT * FROM csv.`/path/to/files/`;
== Incremental Update Eligibility ==
The Materialized View cannot be incrementally refreshed.

== Detailed Incrementalization Info ==
- INPUT_NOT_IN_DELTA: Tables are not in Delta format. Consider converting them to Delta tables.

资格和运行时行为

EXPLAIN 报告查询结构是否支持增量刷新。 它无法预测优化器在运行时的表现。 在默认 REFRESH POLICY AUTO情况下,成本模型做出最终决策,甚至对于符合条件的具体化视图,也可以选择完整重算,例如当它估计算符嵌套或当前数据量使得完整重算更高效时。 完整的刷新政策列表,请参见 刷新政策

如果一个合格的物质化视图在 下 AUTO持续使用完整的重算,你可以:

  • 设置为 REFRESH POLICY INCREMENTAL 优先选择增量刷新而非基于成本的选择。 有关语法,请参阅 REFRESH POLICY 子句
  • 查看管道事件日志 INCREMENTAL_PLAN_REJECTED_BY_COST_MODEL 中的事件,了解为何成本模型拒绝了增量计划。 详情请参见管道事件日志CostModelRejectionSubType管道事件日志模式中的值。

常见的成本模型拒绝原因包括:

  • EXCESSIVE_OPERATOR_NESTING查询定义复杂且包含多层算子嵌套,成本模型认为增量处理存在风险。
  • CHANGESET_SIZE_THRESHOLD_EXCEEDEDTABLE_SIZE_THRESHOLD_EXCEEDED:成本模型估计,对于当前数据量,全面重新计算更为便宜。

成本模型拒绝并不意味着具象化的观点不能进行增量化。 这意味着优化者选择了不这么做。 设置 REFRESH POLICY INCREMENTAL 是覆盖该选择的有效方式。