Cómo crear una Materialized View en Warehouse en Microsoft Fabric
Este tutorial muestra cómo crear una Materialized View en Warehouse en Microsoft Fabric para acelerar consultas T-SQL sobre datos de un Lakehouse. Una Materialized View guarda resultados pre-calculados, reduce latencia y evita repetir transformaciones pesadas en cada consulta. En escenarios con millones de filas (por ejemplo, 50–200M de registros de ventas), una Materialized View puede reducir tiempos de respuesta de segundos/minutos a décimas de segundo, dependiendo del tamaño del Warehouse.
Prerequisitos
- Cuenta con acceso a un workspace en Microsoft Fabric y permisos para crear un Warehouse (rol con privilegios de Owner o Contributor en el workspace).
- Un Lakehouse con una tabla Delta ya cargada (p. ej.: sales_delta). Idealmente, la tabla debe tener índices de partición por fecha o columnas que faciliten el filtrado (p. ej. sales_date, region).
- Conocimientos básicos de T-SQL y del concepto de Materialized View. Conocer los costes de cómputo (p. ej.: Small/Medium/Large o vCores) ayuda a elegir el Warehouse correcto.
- Estimación de volumen: por ejemplo, 10M a 200M de filas, con una media de 5–20 columnas. Esto condiciona la frecuencia de refresh y el espacio usado por la Materialized View.
Paso 1: Crear o abrir un Warehouse
La Materialized View residirá en un Warehouse. Si ya tiene un Warehouse, ábralo; en caso contrario, cree uno nuevo en el workspace. Configure el tamaño según la carga esperada: para pruebas, un tamaño Small o 2 vCores es suficiente; para producción con informes concurrentes, considere Medium/4 vCores o más. Recuerde que los costes por hora aumentan con el tamaño, por lo que debe equilibrar rendimiento y coste. Configure también el auto-pause si está disponible, para reducir costes durante periodos de inactividad.
Paso 2: Verificar la tabla base en el Lakehouse
Compruebe que la tabla Delta en el Lakehouse es accesible desde el Warehouse. En el Warehouse, abra una query T-SQL y haga una consulta simple para validar los datos y obtener estimaciones de cardinalidad.
SELECT TOP 10 *
FROM lakehouse.your_lakehouse.sales_delta;
Haga también un conteo aproximado para evaluar el impacto:
SELECT COUNT(*) AS total_rows
FROM lakehouse.your_lakehouse.sales_delta;
Si devuelve, por ejemplo, 125000000, sepa que estamos en el orden de 125M de filas — eso influye en la estrategia de refresh y de partición.
Paso 3: Elegir la consulta para materializar
Piense qué consulta quiere acelerar: agregaciones, joins o transformaciones pesadas. Simplifique la lógica a la versión que tenga sentido materializar. Priorice columnas y periodos más usados por los informes (p. ej.: últimos 90 días). Ejemplos concretos ayudan: si los informes muestran total de ventas por día y región para los últimos 90 días, materialice solo ese intervalo y esas columnas.
-- Ejemplo de consulta que vamos a materializar
SELECT
sales_date,
region,
SUM(amount) AS total_amount,
COUNT(*) AS transactions
FROM lakehouse.your_lakehouse.sales_delta
WHERE sales_date >= DATEADD(day, -90, CURRENT_DATE)
GROUP BY sales_date, region;
Esta elección reduce espacio y tiempo: en lugar de guardar las 20 columnas de la tabla original, guarda solo 4 columnas agregadas para 90 días * número de regiones (p. ej. 90 * 10 = 900 registros por periodo).
Paso 4: Crear la Materialized View en el Warehouse
En el Warehouse, ejecute un CREATE MATERIALIZED VIEW con la consulta elegida. Dé un nombre claro y defina las columnas resultantes. Verifique que la consulta es determinista y evita funciones volátiles que impidan una materialización eficiente.
CREATE MATERIALIZED VIEW mv_sales_daily_region
AS
SELECT
sales_date,
region,
SUM(amount) AS total_amount,
COUNT(*) AS transactions
FROM lakehouse.your_lakehouse.sales_delta
WHERE sales_date >= DATEADD(day, -90, CURRENT_DATE)
GROUP BY sales_date, region;
Tras crearla, valide el tamaño en disco y los metadatos del MV (en unos minutos, dependiendo del volumen inicial puede tardar segundos o minutos en poblarse).
Paso 5: Programar actualizaciones (Refresh) de la Materialized View
Decida si la Materialized View se actualizará manualmente o automáticamente. En el Fabric Warehouse, puede usar REFRESH MATERIALIZED VIEW para forzar la actualización; para automatizar, cree una programación con Pipelines, Tasks o Jobs externos. Frecuencias comunes: cada 15 minutos para informes casi en tiempo real, cada hora para dashboards operativos, o diaria para análisis históricos.
-- Refresh manual
REFRESH MATERIALIZED VIEW mv_sales_daily_region;
-- Si desea automatizar con T-SQL dentro del Warehouse (ejemplo simplificado)
-- Puede integrarse con un Pipeline o un Job programado en su entorno.
Considere refreshes incrementales, cuando estén soportados, para reducir coste. Monitorice el tiempo de refresh — si tarda más de, por ejemplo, 5 minutos para un refresh horario, revise la estrategia (particiones, filtros o dimensionamiento del Warehouse).
Paso 6: Consultar la Materialized View para acelerar informes
Reemplace consultas pesadas por la Materialized View. Esto reduce tiempo de respuesta y coste computacional. En lugar de agregaciones sobre 125M de filas, estará leyendo 900–10k filas pre-aggregadas, dependiendo del periodo y de la cardinalidad.
SELECT sales_date, region, total_amount
FROM mv_sales_daily_region
WHERE sales_date BETWEEN '2026-01-01' AND '2026-01-31'
ORDER BY sales_date;
Esto es especialmente útil para Power BI u otras herramientas que realizan muchas consultas ad-hoc: tiempos de respuesta más rápidos y menos carga en el Warehouse.
Verificar el resultado
Compare tiempos de ejecución entre la consulta original y la consulta a la Materialized View usando EXPLAIN o midiendo la duración. Verifique también que los valores agregados coinciden tras un REFRESH. Ejemplos de comprobaciones:
-- Medir tiempo y plan
EXPLAIN SELECT * FROM mv_sales_daily_region WHERE sales_date = '2026-01-15';
-- Comparar totales
SELECT SUM(amount) FROM lakehouse.your_lakehouse.sales_delta WHERE sales_date = '2026-01-15';
SELECT total_amount FROM mv_sales_daily_region WHERE sales_date = '2026-01-15' AND region = 'North';
Si hay diferencias, haga REFRESH y revalide. Registre también métricas de coste y latencia durante algunas semanas para cuantificar ganancias (p. ej.: reducción de 70–95% en el tiempo de CPU para consultas agregadas).
Conclusión
Las Materialized Views en Warehouse en Microsoft Fabric son útiles para acelerar consultas analíticas y reducir costes de procesamiento repetido. Próximos pasos: probar políticas de refresh (frecuencia e incremental), automatizar el refresh con Pipelines o Jobs y monitorizar el impacto en coste/rendimiento. Consejo práctico: pruebe a materializar solo las columnas y periodos más usados (p. ej. últimos 30–90 días) para optimizar espacio y velocidad; haga pruebas A/B antes de aplicarlo a toda la producción.