Skip to main content
Uma dúvida comum entre os usuários é quando devem usar visões materializadas ou projeções. Neste artigo, vamos explorar as principais diferenças entre as duas e por que você pode preferir uma à outra em determinados cenários.

Resumo das principais diferenças

A tabela abaixo resume as principais diferenças entre visões materializadas e projeções em vários aspectos a considerar.

Comparação entre visões materializadas e projeções

Quando escolher visões materializadas

Você deve considerar o uso de visões materializadas quando:
  • Estiver trabalhando com ETL em tempo real e pipelines de dados em vários estágios: você precisa realizar transformações complexas, agregações ou direcionar os dados à medida que eles chegam, possivelmente em vários estágios ao encadear visões.
  • Precisar de desnormalização complexa: você precisa fazer JOIN prévio de dados de várias fontes (tabelas, subconsultas ou dicionários) em uma única tabela otimizada para consultas, especialmente se atualizações completas periódicas com o uso de visões materializadas atualizáveis forem aceitáveis.
  • Quiser controle explícito de schema: você precisa de uma tabela de destino separada e distinta, com seu próprio schema e engine para os resultados pré-computados, oferecendo maior flexibilidade para modelagem de dados.
  • Quiser filtrar durante a ingestão: você precisa filtrar os dados antes de serem materializados, reduzindo o volume de dados gravados na tabela de destino.

Quando evitar visões materializadas

Considere evitar o uso de visões materializadas quando:
  • Os dados de origem são atualizados ou excluídos com frequência: Sem estratégias adicionais para garantir a consistência entre as tabelas de origem e de destino, as visões materializadas incrementais podem ficar desatualizadas e inconsistentes.
  • Simplicidade e otimização automática são preferíveis: Se você quiser evitar o gerenciamento de tabelas de destino separadas.

Quando escolher projeções

Você deve considerar o uso de projeções quando:
  • Otimizar consultas para uma única tabela: seu objetivo principal é acelerar consultas em uma única tabela base, oferecendo ordens de classificação alternativas, otimizando filtros em colunas que não fazem parte da chave primária ou pré-computando agregações para uma única tabela.
  • Você quer transparência nas consultas: quer que as consultas tenham como alvo a tabela original sem modificações, contando com o ClickHouse para escolher a melhor organização de dados para uma determinada consulta.

Quando evitar projeções

Você deve considerar evitar o uso de projeções quando:
  • São necessárias transformações complexas de dados ou ETL em vários estágios: definições de projeção não oferecem suporte a operações JOIN, não podem ser encadeadas para criar pipelines de várias etapas e não dão suporte a alguns recursos de SQL, como funções de janela ou instruções CASE complexas. Embora consultas em tabelas com projeções possam usar JOIN livremente, as próprias projeções não são adequadas para transformações de dados complexas.
  • É necessária a filtragem explícita dos dados materializados: projeções não oferecem suporte a cláusulas WHERE em sua definição para filtrar os dados materializados na própria projeção.
  • São usados motores de tabela que não são da família MergeTree: projeções estão disponíveis exclusivamente para tabelas que usam a família de motores MergeTree.
  • Consultas com FINAL são essenciais: projeções não funcionam com consultas FINAL, que às vezes são usadas para desduplicação.
  • Você precisa de réplicas paralelas, pois elas não têm suporte com projeções.

Resumo

Visões materializadas e projeções são ferramentas poderosas para otimizar consultas e transformar dados e, em geral, recomendamos não tratá-las como uma escolha excludente. Em vez disso, elas podem ser usadas de forma complementar para extrair o máximo das suas consultas. Assim, a escolha entre visões materializadas e projeções no ClickHouse depende, na prática, do seu caso de uso específico e dos seus padrões de acesso. Como regra geral, você deve considerar o uso de visões materializadas quando precisar agregar dados de uma ou mais tabelas de origem em uma tabela de destino ou realizar transformações complexas em escala. Visões materializadas são excelentes para transferir o trabalho de agregações custosas do tempo de consulta para o tempo de inserção. Elas são uma ótima opção para rollups diários ou mensais, dashboards em tempo real ou resumos de dados. Por outro lado, você deve usar projeções quando precisar otimizar consultas que filtram por colunas diferentes daquelas usadas na chave primária da tabela, que determina a ordenação física dos dados em disco. Elas são particularmente úteis quando não é mais possível alterar a chave primária de uma tabela ou quando seus padrões de acesso são mais diversos do que a chave primária consegue atender.
Última modificação em 3 de julho de 2026