物化视图:刷新失败会使物化视图失效

注意

此行为变更在 2023_05 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

物化视图定期由后台进程自动更新。

目前,如果物化视图刷新失败,则物化视图的数据不会更新,并且后台进程会继续定期尝试刷新物化视图。

如果失败是由于会继续发生的问题(例如由物化视图定义或数据引起的除以零错误),则后台进程将持续无法刷新物化视图,并且物化视图的数据不会更新。

在当前版本中,刷新过程中特定类型的错误会使物化视图失效。此外:

  • 当您查询物化视图时,输出将包括失效的原因。

  • SHOW MATERIALIZED VIEWS 命令的输出将包含物化视图失效的原因。

根据这些命令的输出中的信息,解决物化视图的问题,并执行 ALTER MATERIALIZED VIEW ...RESUME 命令恢复物化视图。

综上所述,刷新和查询物化视图的流程发生了以下变化:

之前:

后台进程无法刷新物化视图。

虽然物化视图中的数据已过期,但查询物化视图的输出无法表明数据已过时。

当您执行 SHOW MATERIALIZED VIEWS 命令时,refreshed_on 列会指明数据已过期,但输出不包含过期原因。

现在:

后台进程会使物化视图失效。

查询物化视图会导致错误,指明刷新过程无法更新物化视图的原因。例如:

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero

当您执行 SHOW MATERIALIZED VIEWS 命令时,invalid 列会指明物化视图无效,并且 invalid_reason 列包含失效的原因。例如:

SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

例如,假设您执行以下语句来创建物化视图:

CREATE OR REPLACE TABLE my_base_table (a INT, b INT, c VARCHAR(16));
Copy
INSERT INTO my_base_table VALUES (1, 1, 'valid data');
Copy
CREATE OR REPLACE MATERIALIZED VIEW my_mv AS SELECT a / b AS div FROM my_base_table;
Copy

假设您向表中插入数据,这将导致物化视图刷新失败。例如,假设您执行以下语句:

INSERT INTO my_base_table VALUES (1, 0, 'invalid data');
Copy

当接下来刷新物化视图时,刷新将失败并显示“除以零”错误。由于刷新失败,物化视图将会失效。

要查看失效原因,请查询物化视图或者执行 SHOW MATERIALIZED VIEWS 命令:

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero
SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

解决导致失效的问题,并执行 ALTER MATERIALIZED VIEW ...RESUME 命令恢复物化视图:

ALTER MATERIALIZED VIEW my_mv RESUME;
Copy

参考:1178

语言: 中文