Quando as views materializadas atualizáveis devem ser usadas?
As views materializadas atualizáveis podem executar processos em lote para realizar tarefas como desnormalização. É possível criar dependências entre views materializadas atualizáveis, de modo que uma view dependa dos resultados de outra e só seja executada depois que ela for concluída. Isso pode substituir fluxos de trabalho agendados ou DAGs simples, como um job do dbt. Para saber mais sobre como definir dependências entre views materializadas atualizáveis, acesse CREATE VIEW, na seção Dependencies.
Como atualizar uma view materializada atualizável?
SYSTEM REFRESH VIEW:
Quando uma view materializada atualizável foi atualizada pela última vez?
system.view_refreshes, como mostrado abaixo:
Como posso alterar a frequência de atualização?
ALTER TABLE...MODIFY REFRESH.
Usando APPEND para adicionar novas linhas
APPEND permite adicionar novas linhas ao final da tabela, em vez de substituir toda a view.
Um dos usos desse recurso é capturar snapshots de valores em um determinado momento. Por exemplo, imagine que temos uma tabela events populada por um fluxo de mensagens do Kafka, Redpanda ou de outra plataforma de dados em streaming.
4096 valores na coluna uuid. Podemos escrever a seguinte consulta para encontrar aqueles com a maior contagem total:
uuid a cada 10 segundos e armazená-la em uma nova tabela chamada events_snapshot. O esquema de events_snapshot seria assim:
events_snapshot para obter a contagem ao longo do tempo para um uuid específico:
Exemplos
Stack Overflow
votes, users, badges, posts e postlinks.
Nesse guia, mostramos como desnormalizar os dados de postlinks na tabela posts com a seguinte consulta:
posts_with_links, mas, em um sistema de produção, o ideal seria executar essa operação periodicamente.
Tanto a tabela posts quanto a postlinks podem ser atualizadas. Portanto, em vez de tentar implementar esse join usando views materializadas incrementais, pode ser suficiente simplesmente agendar essa consulta para ser executada em um intervalo fixo, por exemplo, uma vez por hora, armazenando os resultados em uma tabela post_with_links.
É nesse ponto que uma view materializada atualizável ajuda, e podemos criar uma com a seguinte consulta:
A sintaxe aqui é idêntica à de uma view materializada incremental, exceto por incluir uma cláusula
REFRESH:IMDb
actors, directors, genres, movie_directors, movies e roles.
Em seguida, podemos escrever a consulta a seguir para gerar um resumo de cada ator, ordenado pelo maior número de aparições em filmes.