(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo crear y usar Materialized Views en Azure Synapse Analytics

João Barros 10 de August de 2026 5 min de lectura

Este tutorial muestra cómo crear y usar Materialized Views en Azure Synapse Analytics para acelerar consultas analíticas sobre grandes hechos y reducir costes de computación. Explico por qué la técnica, cuándo usar Materialized Views y un ejemplo práctico con pasos para crear, actualizar y validar una Materialized View.

Requisitos previos

  • Workspace de Azure Synapse Analytics con Dedicated SQL Pool disponible.
  • Permisos para crear objetos en una base de datos del Dedicated SQL Pool (CREATE TABLE, CREATE VIEW, CREATE MATERIALIZED VIEW).
  • Datos de origen cargados en una tabla hecho (ej.: dbo.fact_sales) y dimensiones (ej.: dbo.dim_date, dbo.dim_product).
  • Conocimientos básicos de T-SQL.

Paso 1: Por qué usar Materialized Views en Azure Synapse Analytics

Materialized Views almacenan resultados de una query materializada en disco, evitando el reprocesamiento completo en cada consulta. Son útiles cuando tienes queries pesadas de agregación que se ejecutan con frecuencia. En Dedicated SQL Pool mejoran la latencia y reducen el uso de recursos, pero requieren mantenimiento (refresh) cuando los datos cambian.

Paso 2: Crear la tabla de ejemplo

Si aún no tienes tablas de ejemplo, crea una tabla hecho simple y puebla con algunos registros para probar. Aquí hay un ejemplo mínimo para probar la Materialized View.

CREATE TABLE dbo.fact_sales (
  sale_id BIGINT NOT NULL,
  product_id INT NOT NULL,
  sale_date DATE NOT NULL,
  quantity INT,
  amount DECIMAL(18,2)
);

INSERT INTO dbo.fact_sales (sale_id, product_id, sale_date, quantity, amount)
VALUES (1, 100, '2026-01-01', 2, 19.98),
       (2, 101, '2026-01-02', 1, 9.99),
       (3, 100, '2026-01-02', 3, 29.97);

Paso 3: Crear una Materialized View de agregación

Decide la agregación que necesitas con frecuencia. Aquí creamos una Materialized View con ventas por product_id y mes. En Dedicated SQL Pool la sintaxis es CREATE MATERIALIZED VIEW. Importante: la query tiene restricciones (no soportan funciones no determinísticas, etc.).

CREATE MATERIALIZED VIEW dbo.mv_sales_monthly
WITH (DISTRIBUTION = HASH(product_id), CLUSTERED COLUMNSTORE INDEX)
AS
SELECT
  product_id,
  DATEFROMPARTS(YEAR(sale_date), MONTH(sale_date), 1) AS month_start,
  SUM(quantity) AS total_qty,
  SUM(amount) AS total_amount
FROM dbo.fact_sales
GROUP BY product_id, DATEFROMPARTS(YEAR(sale_date), MONTH(sale_date), 1);

Paso 4: Verificar propiedades y limitaciones

Confirma que la Materialized View fue creada y que tiene un objeto físicamente almacenado. Consulta metadata para ver distribución e índices. Recuerda que las Materialized Views en Dedicated SQL Pool se actualizan cuando ocurren operaciones DML, pero tienes opciones para controlar refreshes y mantenimiento si haces loads masivos.

-- Verificar existencia
SELECT name, type_desc FROM sys.objects WHERE name = 'mv_sales_monthly';

-- Ver detalles de índices
SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.mv_sales_monthly');

Paso 5: Consultar la Materialized View (ejemplo de uso)

Tras creada, las queries que la usan pueden ser mucho más rápidas. Ejemplo simple de consulta que se beneficia de la Materialized View:

SELECT product_id, month_start, total_qty, total_amount
FROM dbo.mv_sales_monthly
WHERE month_start = '2026-01-01';

Paso 6: Actualizar los datos y forzar refresh

Si haces cargas masivas en la tabla base con COPY/CTAS o usando pasos en bloque, confirma que la Materialized View refleja los nuevos datos. En Dedicated SQL Pool puedes recrear la MV o usar técnicas de mantenimiento. Una operación común es DROP + CREATE cuando haces reload masivo; para cargas incrementales, asegura que las operaciones DML desencadenen actualización.

-- Ejemplo: insertar nuevos registros
INSERT INTO dbo.fact_sales (sale_id, product_id, sale_date, quantity, amount)
VALUES (4, 100, '2026-01-15', 1, 9.99);

-- Dependiendo de la forma en que cargaste, puede que necesites rebuild:
ALTER MATERIALIZED VIEW dbo.mv_sales_monthly REBUILD; -- si está soportado
-- Si REBUILD no está disponible en tu escenario, usa DROP + CREATE

Verificar el resultado

Consulta la Materialized View y compara con la agregación directa de la tabla base. Mide tiempos de ejecución para ver la mejora y confirma que los valores coinciden (o que la diferencia corresponde a cargas pendientes).

-- Comparar resultados
SELECT product_id, month_start, total_qty, total_amount
FROM dbo.mv_sales_monthly
ORDER BY product_id, month_start;

-- Agregación directa (más lenta)
SELECT product_id,
       DATEFROMPARTS(YEAR(sale_date), MONTH(sale_date), 1) AS month_start,
       SUM(quantity) AS total_qty,
       SUM(amount) AS total_amount
FROM dbo.fact_sales
GROUP BY product_id, DATEFROMPARTS(YEAR(sale_date), MONTH(sale_date), 1)
ORDER BY product_id, month_start;

Conclusión

Materialized Views en Azure Synapse Analytics son una herramienta poderosa para acelerar queries analíticas en Dedicated SQL Pool, reduciendo latencia y costes de CPU cuando se usan correctamente. Próximos pasos: probar con datasets más grandes, definir políticas de refresh para cargas batch y analizar distribución/índices para optimizar el rendimiento. Consejo: verifica siempre las limitaciones de expresión en la definición de la view y prueba el comportamiento tras cargas masivas — ¿has probado medir la mejora con el mismo escenario de consulta antes/después?