O Amazon Redshift não permitirá mais a criação de funções definidas pelo usuário (UDFs) do Python a partir de 1.º de novembro de 2025. Se quiser usar UDFs do Python, você deve criá-las antes dessa data. As UDFs do Python existentes continuarão a funcionar normalmente. Para ter mais informações, consulte a publicação de blog
Atualizar uma visualização materializada
Este tópico descreve como atualizar os dados em uma visão materializada das tabelas subjacentes.
Quando você cria uma visão materializada, o respectivo conteúdo mostra o estado das relações entre bancos de dados subjacentes (tabelas ou outra visões materializadas) naquele momento. Os dados da visã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 nas relações básicas 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 relações básicas 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 visã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 visã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.
Visões materializadas aninhadas
É possível definir uma visão materializada acima de outras visões materializadas. Para atualizar essa visão materializada, você deve usar explicitamente a palavra-chave CASCADE
na atualização da visão materializada no nível mais alto. Por exemplo, considere a seguinte estrutura de visão materializada aninhada:
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; -- w -> v -> u -> t INSERT INTO t VALUES (1);
Para atualizar a visão w totalmente, há duas opções:
-
(Recomendado) Atualize a visão w usando o comando
REFRESH MATERIALIZED VIEW w CASCADE
. Esse comando executa a atualização de todas as visões materializadas em uma única transação. -
Atualize u, v e w como comandos separados, em ordem de dependência (primeiro u, depois v, depois w).
Se a palavra-chave CASCADE
não for usada explicitamente, a visão materializada será atualizada no modo RESTRICT
, atualizando somente a visão materializada atual. O exemplo a seguir mostra uma mensagem informativa quando você executa REFRESH MATERIALIZED VIEW
em uma visão materializada que depende de uma visão materializada desatualizada.
REFRESH MATERIALIZED VIEW w; INFO: Materialized view w is already up to date. However, it depends on another materialized view that is not up to date. REFRESH MATERIALIZED VIEW w CASCADE; INFO: Materialized view w was incrementally updated successfully.
REFRESH MATERIALIZED VIEW v; INFO: Materialized view v is already up to date. However, it depends on another materialized view that is not up to date. REFRESH MATERIALIZED VIEW v CASCADE; INFO: Materialized view v was incrementally updated successfully.
Nos exemplos acima com a opção de atualização em cascata, a visão materializada u é atualizada primeiro, a visão materializada v é atualizada em seguida e a visão materializada w não é atualizada.
O exemplo a seguir mostra como criar um plano de atualização completo para uma visão materializada programaticamente. Para atualizar a visão materializada v, primeiro atualize a visão materializada u. Para atualizar a visão materializada w, primeiro atualize a visão materializada u e, em seguida, a visão materializada 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)
Limitações
O Amazon Redshift não permite a atualização em cascata de visões materializadas com base em outras origens além de:
-
Tabelas locais
-
VMs locais
-
MVs de streaming
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 obter mais informações, consulte Visões materializadas em tabelas externas de data lake no Amazon Redshift Spectrum.
-
Atualizar automaticamente uma visã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 é compatível com visões materializadas definidas em tabelas de unidade de compartilhamento de dados e tabelas do Iceberg.
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.