Como criar um Materialized View em Warehouse no Microsoft Fabric
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.