Analytics em Tempo RealArmazenamento de DadosObservabilidadeIA/MLCloudOSS
Pré-requisitos
- A running ClickHouse Cloud service. If you don’t have one yet, complete the Create your first Cloud service quickstart first.
uk_price_paid e nos conceitos apresentados neles:
O que você vai criar
uk_price_paid por town ou county exige uma varredura completa da tabela, porque ela está ordenada por (postcode, addr1, addr2).
Neste guia de início rápido, você resolverá esse problema criando uma projeção — uma representação adicional ordenada dos seus dados armazenada dentro da mesma tabela. Ao contrário das visões materializadas, as projeções não exigem uma tabela de destino separada, permanecem sincronizadas com as mutações (exclusões e atualizações) e são usadas de forma transparente pelo otimizador de consultas — ou seja, você continua consultando a mesma tabela.
Ao final, você entenderá como adicionar e materializar uma projeção, como o ClickHouse a seleciona automaticamente e quando escolher projeções em vez de visões materializadas.
1
Entenda por que você precisa de uma projeção
Sua tabelauk_price_paid está ordenada por (postcode, addr1, addr2). Isso significa que o ClickHouse pode pular grandes blocos de dados quando você filtra por postcode, addr1 ou addr2, mas consultas que filtram por town precisam varrer todas as linhas — 30 milhões ao todo.Uma projeção armazena uma cópia adicional ordenada de (algumas ou todas as) colunas dentro da mesma tabela. Quando você consulta a tabela, o otimizador de consultas verifica automaticamente se ler da projeção exigiria acessar menos grânulos do que os dados base e, se for o caso, a utiliza de forma transparente.Principais diferenças em relação a visões materializadas:- Sem tabela separada - a projeção fica dentro da própria
uk_price_paid - Otimização transparente de consultas - você consulta
uk_price_paidnormalmente; o ClickHouse escolhe a projeção automaticamente - Permanece sincronizada com mutações - exclusões e atualizações aplicadas à tabela são refletidas na projeção
2
Adicione uma projeção à sua tabela
Defina uma projeção emuk_price_paid que armazene town, date, price e type, ordenada por (town, date):PROJECTION uk_price_paid_by_town na saída.3
Materialize a projeção para os dados existentes
Assim como as visões materializadas, uma projeção recém-adicionada só se aplica a inserções futuras. Para preenchê-la com os 30 milhões de linhas que já estão na tabela, materialize-a explicitamente:is_done = 1, a projeção está totalmente materializada. Você também pode confirmar isso consultando system.projection_parts:4
Consulte a tabela e observe o uso automático da projeção
Agora execute uma consulta com filtro portown — na mesma tabela que você sempre consultou:uk_price_paid_by_town em vez de varrer os dados da tabela base.Você pode confirmar que a projeção foi usada com EXPLAIN:ReadFromMergeTree na saída, fazendo referência ao nome da projeção. Se quiser comparar o desempenho explicitamente, você pode desativar a otimização de projeção para uma única consulta:5
Compare projeções com visões materializadas
Projeções e visões materializadas resolvem o mesmo problema — leituras mais rápidas em padrões de acesso alternativos —, mas envolvem trade-offs diferentes. Em resumo, as projeções são melhores quando você só precisa de uma ordenação diferente sobre os mesmos dados; visões materializadas são mais flexíveis quando você precisa transformar, agregar ou direcionar dados para um schema diferente. Para uma comparação detalhada, consulte Visões materializadas versus projeções.6
Observe a sobrecarga no armazenamento
As projeções armazenam uma segunda cópia das colunas selecionadas na mesma tabela, aumentando o uso de espaço em disco. Consultesystem.parts para ver o tamanho total de uk_price_paid (que agora inclui os dados da projeção):Próximos passos
Neste guia de início rápido, você adicionou uma projeção auk_price_paid que armazena os dados ordenados por (town, date), permitindo consultas rápidas por cidade sem criar uma tabela separada. Você aprendeu que as projeções são escolhidas automaticamente pelo otimizador de consultas, permanecem sincronizadas com as mutações e trocam espaço em disco por desempenho de leitura.
Confira a seguir os próximos guias de início rápido:
Ou aprofunde-se com a documentação de referência:
