¿Cuándo se deben usar las vistas materializadas actualizables?
Las vistas materializadas actualizables pueden ejecutar procesos por lotes que realizan tareas como la desnormalización. Se pueden crear dependencias entre vistas materializadas actualizables, de modo que una vista dependa de los resultados de otra y solo se ejecute cuando esta haya finalizado. Esto puede sustituir flujos de trabajo programados o DAG sencillos, como un job de dbt. Para obtener más información sobre cómo establecer dependencias entre vistas materializadas actualizables, consulte CREATE VIEW, sección Dependencies.
¿Cómo se actualiza una vista materializada actualizable?
SYSTEM REFRESH VIEW:
¿Cuándo se actualizó por última vez una vista materializada actualizable?
system.view_refreshes, como se muestra a continuación:
¿Cómo puedo cambiar la frecuencia de actualización?
ALTER TABLE...MODIFY REFRESH.
Uso de APPEND para añadir nuevas filas
APPEND permite añadir nuevas filas al final de la tabla en lugar de reemplazar toda la vista.
Uno de los usos de esta funcionalidad es capturar instantáneas de valores en un momento determinado. Por ejemplo, imaginemos que tenemos una tabla events alimentada por un flujo de mensajes de Kafka, Redpanda u otra plataforma de datos en streaming.
4096 valores en la columna uuid. Podemos escribir la siguiente consulta para encontrar los que tienen el mayor recuento total:
uuid cada 10 segundos y almacenarlo en una nueva tabla llamada events_snapshot. El esquema de events_snapshot tendría este aspecto:
events_snapshot para obtener el recuento a lo largo del tiempo de un uuid específico:
Ejemplos
Stack Overflow
votes, users, badges, posts y postlinks.
En esa guía, mostramos cómo desnormalizar los datos de postlinks en la tabla posts con la siguiente consulta:
posts_with_links, pero en un sistema de producción querríamos ejecutar esta operación periódicamente.
Tanto la tabla posts como postlinks podrían actualizarse. Por lo tanto, en lugar de intentar implementar este JOIN mediante vistas materializadas incrementales, puede ser suficiente simplemente programar esta consulta para que se ejecute a intervalos fijos, por ejemplo, una vez por hora, almacenando los resultados en una tabla post_with_links.
Aquí es donde resulta útil una vista materializada actualizable, y podemos crear una con la siguiente consulta:
La sintaxis aquí es idéntica a la de una vista materializada incremental, salvo que incluimos una cláusula
REFRESH:IMDb
actors, directors, genres, movie_directors, movies y roles.
A continuación, podemos escribir la siguiente consulta para obtener un resumen de cada actor, ordenado por el mayor número de apariciones en películas.