Exibições materializadas: falha na atualização invalida uma exibição materializada

Atenção

Essa mudança de comportamento está no pacote 2023_05.

Para saber o status atual do pacote, consulte Histórico do pacote.

As exibições materializadas são atualizadas automaticamente e regularmente por um processo em segundo plano.

Atualmente, se a atualização de uma exibição materializada falhar, os dados da exibição materializada não serão atualizados e o processo em segundo plano continuará tentando atualizar a exibição materializada periodicamente.

Se a falha for devido a um problema que continuará a ocorrer (por exemplo, um erro de divisão por zero causado pela definição da exibição materializada ou pelos dados), o processo em segundo plano falhará continuamente ao atualizar a exibição materializada e os dados da exibição materializada não serão atualizados.

Na versão atual, tipos específicos de erros durante o processo de atualização invalidam a exibição materializada. Além disso:

  • Ao consultar a exibição materializada, a saída incluirá o motivo da invalidação.

  • A saída do comando SHOW MATERIALIZED VIEWS incluirá o motivo pelo qual a exibição materializada foi invalidada.

Usando as informações da saída desses comandos, resolva o problema com a exibição materializada e execute o comando ALTER MATERIALIZED VIEW … RESUME para retomar a exibição materializada.

Em resumo, o processo de atualização e consulta da exibição materializada foi alterado conforme descrito abaixo:

Anteriormente

O processo em segundo plano falha ao atualizar a exibição materializada.

Embora os dados na exibição materializada estejam desatualizados, a saída da consulta da exibição materializada não indica que os dados estão obsoletos.

Ao executar o comando SHOW MATERIALIZED VIEWS, a coluna freshed_on indica que os dados estão desatualizados, mas a saída não inclui um motivo para isso.

Atualmente

O processo em segundo plano invalida a exibição materializada.

Consultar a exibição materializada resulta em um erro que indica por que o processo de atualização falhou ao atualizar a exibição materializada. Por exemplo:

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

Ao executar o comando SHOW MATERIALIZED VIEWS, a coluna invalid indica que a exibição materializada é inválida e a coluna invalid_reason contém o motivo da invalidação. Por exemplo:

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

Por exemplo, suponha que você execute as seguintes instruções para criar uma exibição materializada:

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

Suponha que você insira dados na tabela que causarão falha na atualização da exibição materializada. Por exemplo, suponha que você execute as seguintes instruções:

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

Quando a exibição materializada for atualizada em seguida, a atualização falhará com um erro de «divisão por zero». Como a atualização falha, a exibição materializada será invalidada.

Para visualizar o motivo da invalidação, consulte a exibição materializada ou execute o comando 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 | ...
...  +---------+------------------+ ...

Resolva o problema que causou a invalidação e execute o comando ALTER MATERIALIZED VIEW … RESUME para retomar a exibição materializada:

ALTER MATERIALIZED VIEW my_mv RESUME;
Copy

Ref: 1178