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

Como criar um Materialized View em Warehouse no Microsoft Fabric

João Barros 24 de October de 2026 6 min de leitura

Este tutorial mostra como criar um Materialized View em Warehouse no Microsoft Fabric para acelerar consultas T-SQL sobre dados de um Lakehouse. Um Materialized View guarda resultados pré-calculados, reduz latência e evita repetir transformações pesadas em cada consulta. Em cenários com milhões de linhas (por exemplo, 50–200M de registos de vendas), um Materialized View pode reduzir tempos de resposta de segundos/minutos para décimas de segundo, dependendo do tamanho do Warehouse.

Pré-requisitos

  • Conta com acesso a um workspace no Microsoft Fabric e permissões para criar um Warehouse (função com privilégios de Owner ou Contributor no workspace).
  • Um Lakehouse com uma tabela Delta já carregada (ex.: sales_delta). Idealmente, a tabela deve ter índices de partição por data ou colunas que facilitem o filtro (p.ex. sales_date, region).
  • Noções básicas de T-SQL e do conceito de Materialized View. Conhecimento de custos de compute (ex.: Small/Medium/Large ou vCores) ajuda a escolher o Warehouse correcto.
  • Estimativa de volume: por exemplo, 10M a 200M de linhas, com média de 5–20 colunas. Isto condiciona a frequência de refresh e o espaço usado pelo Materialized View.

Passo 1: Criar ou abrir um Warehouse

O Materialized View vai residir num Warehouse. Se já tiver um Warehouse, abra-o; caso contrário, crie um novo Warehouse no workspace. Configure o tamanho conforme a carga esperada: para testes, um tamanho Small ou 2 vCores é suficiente; para produção com relatórios concorrentes, considere Medium/4 vCores ou mais. Lembre-se que os custos por hora aumentam com o tamanho, por isso equilibre performance e custo. Configure também o auto-pause se estiver disponível, para reduzir custos durante períodos de inactividade.

Passo 2: Verificar a tabela base no Lakehouse

Confirme que a tabela Delta no Lakehouse está acessível através do Warehouse. No Warehouse, abra uma query T-SQL e faça uma consulta simples para validar os dados e obter estimativas de cardinalidade.

SELECT TOP 10 *
FROM lakehouse.your_lakehouse.sales_delta;

Faça ainda uma contagem aproximada para avaliar o impacto:

SELECT COUNT(*) AS total_rows
FROM lakehouse.your_lakehouse.sales_delta;

Se retornar, por exemplo, 125000000, saiba que estamos na casa dos 125M de linhas — isso influencia a estratégia de refresh e de partição.

Passo 3: Escolher a consulta para materializar

Pense que consulta quer acelerar: agregações, joins ou transformações pesadas. Simplifique a lógica para a versão que fará sentido materializar. Priorize colunas e períodos mais usados pelos relatórios (ex.: últimos 90 dias). Exemplos concretos ajudam: se os relatórios mostram total de vendas por dia e região para os últimos 90 dias, materialize apenas esse intervalo e essas colunas.

-- Exemplo de consulta que vamos 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 escolha reduz espaço e tempo: em vez de guardar todas as 20 colunas da tabela original, guarda apenas 4 colunas agregadas para 90 dias * número de regiões (p.ex. 90 * 10 = 900 registos por período).

Passo 4: Criar o Materialized View no Warehouse

No Warehouse, execute um CREATE MATERIALIZED VIEW com a consulta escolhida. Dê um nome claro e defina as colunas resultantes. Verifique que a consulta é determinística e evita funções voláteis que impeçam uma materialização 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;

Após criar, valide o tamanho em disco e os metadados do MV (em alguns minutos, dependendo do volume inicial pode demorar segundos a minutos para popular).

Passo 5: Agendar actualizações (Refresh) do Materialized View

Decida se o Materialized View será actualizado manualmente ou automaticamente. No Fabric Warehouse, pode usar REFRESH MATERIALIZED VIEW para forçar a actualização; para automatização, crie um agendamento com Pipelines, Tasks ou Jobs externos. Frequências comuns: a cada 15 minutos para relatórios quase em tempo real, a cada hora para dashboards operacionais, ou diária para análises históricas.

-- Refresh manual
REFRESH MATERIALIZED VIEW mv_sales_daily_region;

-- Se quiser automatizar com T-SQL dentro do Warehouse (exemplo simplificado)
-- Pode ser integrado com um Pipeline ou um Job programado no seu ambiente.

Considere refrescos incrementais, quando suportados, para reduzir custo. Monitorize o tempo de refresh — se demorar mais de, por exemplo, 5 minutos para um refresh horário, reveja a estratégia (partições, filtros, ou dimensionamento do Warehouse).

Passo 6: Consultar o Materialized View para acelerar relatórios

Substitua consultas pesadas pelo Materialized View. Isto reduz tempo de resposta e custo computacional. Em vez de agregações em 125M de linhas, está a ler 900–10k linhas pré-aggregadas, dependendo do período e da cardinalidade.

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;

Isto é especialmente útil para Power BI ou outras ferramentas que façam muitas consultas ad-hoc: tempos de resposta mais rápidos e menos carga no Warehouse.

Verificar o resultado

Compare tempos de execução entre a consulta original e a consulta ao Materialized View usando EXPLAIN ou medindo duração. Verifique também que os valores agregados coincidem após um REFRESH. Exemplos de verificações:

-- Medir tempo e plano
EXPLAIN SELECT * FROM mv_sales_daily_region WHERE sales_date = '2026-01-15';

-- Comparar totais
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';

Se houver diferenças, faça REFRESH e revalide. Registe também métricas de custo e latência durante algumas semanas para quantificar ganhos (ex.: redução de 70–95% no tempo de CPU para consultas agregadas).

Conclusão

Materialized Views em Warehouse no Microsoft Fabric são úteis para acelerar consultas analíticas e reduzir custos de processamento repetido. Próximos passos: testar políticas de refresh (frequência e incremental), automatizar o refresh com Pipelines ou Jobs e monitorizar impacto de custo/performance. Dica prática: experimente materializar apenas colunas e períodos mais usados (p.ex. últimos 30–90 dias) para optimizar espaço e rapidez; faça testes A/B antes de aplicar a toda a produção.