REFRESH POLICY 子句

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

重要

此功能在 Beta 版中。 在 Databricks Runtime 17.3 及更高版本中可用。

将刷新策略添加到具体化视图,控制何时增量化刷新。 适用于 CREATE MATERIALIZED VIEW 语句。

若要了解增量化,请参阅 具体化视图的增量刷新。 可以使用该语句检查 SQL 查询是否可 EXPLAIN CREATE MATERIALIZED VIEW 增量化。 请参阅 EXPLAIN CREATE MATERIALIZED VIEW

Syntax

REFRESH POLICY refresh_policy

refresh_policy:
  AUTO | INCREMENTAL | INCREMENTAL STRICT | FULL

参数

  • refresh_policy

    定义具体化视图的刷新策略。 如果省略,REFRESH POLICYAUTO则为默认策略。

    刷新策略定义刷新如何处理具体化视图的增量化。

    • AUTO

      系统根据成本模型自动选择增量刷新或完全刷新。

      State 行为
      增量可用于刷新。 使用成本模型来确定哪种成本更便宜、增量或完整。
      增量不可用于刷新。 执行完全刷新。
      创建或重新初始化是必需的(例如,在架构更改时) 执行完全刷新。
    • INCREMENTAL

      系统尽可能使用增量刷新。 打开 CREATE时,如果无法增量化查询,则创建会失败。

      State 行为
      增量可用于刷新。 执行增量刷新。
      增量不可用于刷新。 执行完全刷新。
      创建或重新初始化是必需的,但对于查询,增量化是可能的。 执行完全刷新。
      创建或重新初始化是必需的,并且查询无法进行增量化。 作失败。
    • INCREMENTAL STRICT

      系统使用增量刷新。 打开 CREATE时,如果无法增量化查询,则创建会失败。

      State 行为
      增量可用于刷新。 执行增量刷新。
      增量不可用于刷新。 刷新失败。
      创建或重新初始化是必需的,但对于查询,增量化是可能的。 执行完全刷新。
      创建或重新初始化是必需的,并且查询无法进行增量化。 作失败。
    • FULL

      系统始终使用完全刷新。

      State 行为
      增量可用于刷新。 执行完全刷新。
      增量不可用于刷新。 执行完全刷新。
      创建或重新初始化是必需的。 执行完全刷新。

失败时的行为

当刷新失败,因为它无法满足刷新策略(for REFRESH POLICY INCREMENTAL (STRICT)),系统将返回错误类, MATERIALIZED_VIEW_NOT_INCREMENTALIZABLE 其中包含描述不可增量化的原因的详细信息。 例如:

  • OPERATOR_NOT_SUPPORTED:运算符(如复杂联接)可防止增量化。
  • EXPRESSION_NOT_DETERMINSTIC:查询中使用非确定性函数,例如 RAND

若要了解查询可增量化的原因,请参阅 具体化视图的增量刷新

若要检查 SQL 查询是否可增量化,请使用 EXPLAIN CREATE MATERIALIZED VIEW 语句。 请参阅 EXPLAIN CREATE MATERIALIZED VIEW

例子

-- Create a materialized view with an incremental policy
CREATE MATERIALIZED VIEW IF NOT EXISTS my_mv
REFRESH POLICY INCREMENTAL
AS SELECT a, sum(b) FROM my_catalog.example.my_table GROUP BY a;