适用于:
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_EXCEEDED和TABLE_SIZE_THRESHOLD_EXCEEDED:成本模型估计,对于当前数据量,全面重新计算更为便宜。
成本模型拒绝并不意味着具象化的观点不能进行增量化。 这意味着优化者选择了不这么做。 设置 REFRESH POLICY INCREMENTAL 是覆盖该选择的有效方式。