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;
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 colunainvalid_reason
contém o motivo da invalidação. Por exemplo:SHOW MATERIALIZED VIEWS;
... +---------+------------------+ ... ... | 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));
INSERT INTO my_base_table VALUES (1, 1, 'valid data');
CREATE OR REPLACE MATERIALIZED VIEW my_mv AS SELECT a / b AS div FROM my_base_table;
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');
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;
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 | ...
... +---------+------------------+ ...
... | 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;
Ref: 1178