Atualizar uma visão materializada - Amazon Redshift

Atualizar uma visão materializada

Este tópico descreve como atualizar os dados em uma visão materializada das tabelas subjacentes.

Quando você cria uma visualização materializada, seu conteúdo reflete o estado da tabela ou das tabelas do banco de dados subjacente na ocasião. Os dados da visualização materializada permanecem inalterados, mesmo quando as aplicações fazem alterações nos dados nas tabelas subjacentes. Para atualizar os dados na visão materializada, você pode usar a instrução REFRESH MATERIALIZED VIEW a qualquer momento para atualizar manualmente as visões materializadas. Ao usar essa instrução, o Amazon Redshift identifica as alterações que ocorreram na tabela ou tabelas base e aplica essas alterações à visão materializada.

O Amazon Redshift tem duas estratégias para atualizar uma visão materializada:

  • Em muitos casos, o Amazon Redshift pode realizar uma atualização incremental. Em uma atualização incremental, o Amazon Redshift identifica rapidamente as alterações nos dados nas tabelas de base desde a última atualização e atualiza os dados na visão materializada. A atualização incremental é compatível com as seguintes construções SQL usadas na consulta ao definir a visualização materializada:

    • Construções que contêm as cláusulas SELECT, FROM, [INNER] JOIN, WHERE, GROUP BY ou HAVING.

    • Construções que contêm agregações, como SUM, MIN, MAX, AVG e COUNT.

    • A maioria das funções SQL integradas, especificamente aquelas que são imutáveis, visto que têm os mesmos argumentos de entrada e sempre produzem a mesma saída.

    A atualização incremental também é compatível para uma visão materializada baseada em uma tabela da unidade de compartilhamento de dados.

  • Se uma atualização incremental não for possível, o Amazon Redshift executa uma atualização completa. Uma atualização total executa novamente a instrução SQL subjacente substituindo todos os dados na visualização materializada.

  • O Amazon Redshift seleciona automaticamente o método de atualização para uma visão materializada, dependendo da consulta SELECT usada para defini-la.

Atualizar uma visão materializada em uma visão materializada não é um processo em cascata. Em outras palavras, suponha que você tenha uma visão materializada A que depende da visão materializada B. Neste caso, quando o REFRESH MATERIALIZED VIEW A é invocado, A é atualizado usando a versão atual de B, mesmo quando B está desatualizado. Para atualizar A totalmente, antes de atualizar A, primeiro atualize B em uma transação separada.

O exemplo a seguir mostra como criar um plano de atualização completo para uma visualização materializada programaticamente. Para atualizar a visualização materializada v, primeiro atualize a visualização materializada u. Para atualizar a visualização materializada w, primeiro atualize a visualização materializada u e, em seguida, a visualização materializada v.

CREATE TABLE t(a INT); CREATE MATERIALIZED VIEW u AS SELECT * FROM t; CREATE MATERIALIZED VIEW v AS SELECT * FROM u; CREATE MATERIALIZED VIEW w AS SELECT * FROM v; WITH RECURSIVE recursive_deps (mv_tgt, lvl, mv_dep) AS ( SELECT trim(name) as mv_tgt, 0 as lvl, trim(ref_name) as mv_dep FROM stv_mv_deps UNION ALL SELECT R.mv_tgt, R.lvl+1 as lvl, trim(S.ref_name) as mv_dep FROM stv_mv_deps S, recursive_deps R WHERE R.mv_dep = S.name ) SELECT mv_tgt, mv_dep from recursive_deps ORDER BY mv_tgt, lvl DESC; mv_tgt | mv_dep --------+-------- v | u w | u w | v (3 rows)

O exemplo a seguir mostra uma mensagem informativa quando você executa REFRESH MATERIALIZED VIEW em uma visualização materializada que depende de uma visualização materializada desatualizada.

create table a(a int);
create materialized view b as select * from a;
create materialized view c as select * from b;
insert into a values (1);
refresh materialized view c; INFO: Materialized view c is already up to date. However, it depends on another materialized view that is not up to date.
REFRESH MATERIALIZED VIEW b; INFO: Materialized view b was incrementally updated successfully.
REFRESH MATERIALIZED VIEW c; INFO: Materialized view c was incrementally updated successfully.

No momento, o Amazon Redshift tem as limitações a seguir para atualização incremental de visões materializadas.

O Amazon Redshift não oferece suporte à atualização incremental para visões materializadas que são definidas com uma consulta usando os seguintes elementos SQL:

  • OUTER JOIN (RIGHT, LEFT ou FULL).

  • As operações definidas UNION, INTERSECT, EXCEPT e MINUS.

  • As funções de agregação MEDIAN, PERCENTILE_CONT, LISTAGG, STDDEV_SAMP, STDDEV_POP, APPROXIMATE COUNT e APPROXIMATE PERCENTILE e funções de agregação bit a bit.

    nota

    As funções agregadas COUNT, SUM e AVG são aceitas.

  • Funções agregadas DISTINCT, como DISTINCT COUNT, DISTINCT SUM e assim por diante.

  • Funções de janela.

  • Uma consulta que usa tabelas temporárias para otimização de consultas, como para otimizar subexpressões comuns.

  • Subconsultas.

  • Tabelas externas referenciando os formatos a seguir na consulta que define a visão materializada.

    • Delta Lake

    • Hudi

    Há suporte para a atualização incremental para visões materializadas definidas usando formatos diferentes dos listados acima. Para ter mais informações, consulte Visões materializadas em tabelas externas de data lake no Amazon Redshift Spectrum.

Atualizar automaticamente uma visualização materializada

O Amazon Redshift pode atualizar automaticamente as visões materializadas com dados atualizados de suas tabelas base quando as visões materializadas são criadas ou alteradas para ter a opção de atualização automática. O Amazon Redshift atualiza automaticamente as visões materializadas o mais rápido possível após as alterações nas tabelas base.

Para concluir a atualização das visões materializadas mais importantes com impacto mínimo nos workloads ativos em seu cluster, o Amazon Redshift considera vários fatores. Esses fatores incluem a carga atual do sistema, os recursos necessários para atualização, os recursos de cluster disponíveis e a frequência com que as visões materializadas são usadas.

O Amazon Redshift prioriza suas workloads sobre a atualização automática e pode interromper a atualização automática para preservar a performance da workload do usuário. Essa abordagem pode atrasar a atualização de algumas visões materializadas. Em alguns casos, você precisará de um comportamento de atualização mais determinístico para as visões materializadas. Nesse caso, considere usar a atualização manual conforme descrito em REFRESH MATERIALIZED VIEW ou atualização programada usando as operações da API do programador do Amazon Redshift ou o console.

Você pode definir a atualização automática para visões materializadas usando CREATE MATERIALIZED VIEW. Você também pode usar a cláusula AUTO REFRESH para atualizar visões materializadas automaticamente. Para obter mais informações sobre como criar visões materializadas, consulte CREATE MATERIALIZED VIEW. Você pode ativar a atualização automática para uma visualizações materializada atual usando ALTER MATERIALIZED VIEW.

Considere o seguinte ao atualizar visões materializadas:

  • Você ainda pode atualizar uma visualizações materializada explicitamente usando o comando REFRESH MATERIALIZED VIEW mesmo que não tenha ativado a renovação automática para a visualizações materializada.

  • O Amazon Redshift não atualiza automaticamente as visões materializadas definidas em tabelas externas.

  • Para status de atualização, você pode verificar SVL_MV_REFRESH_STATUS, que registra consultas iniciadas pelo usuário ou atualizadas automaticamente.

  • Para executar REFRESH em exibições materializadas somente recomputadas, certifique-se de que você tenha a permissão CREATE em esquemas. Para obter mais informações, consulte GRANT.