Skip to main content
Neste tutorial, você vai inserir 28 milhões de linhas do Hacker News em uma tabela do ClickHouse usando os formatos CSV e Parquet e executar algumas consultas simples para explorar os dados.

CSV

1

Baixar CSV

Uma versão CSV do conjunto de dados pode ser baixada do nosso bucket do S3 público ou com a execução deste comando:
Com 4,6 GB e 28 milhões de linhas, este arquivo comprimido deve levar de 5 a 10 minutos para baixar.
2

Faça uma amostragem dos dados

clickhouse-local permite processar arquivos locais rapidamente sem precisar implantar e configurar o servidor ClickHouse.Antes de armazenar qualquer dado no ClickHouse, vamos fazer uma amostragem do arquivo usando o clickhouse-local. No console, execute:
Em seguida, execute o seguinte comando para examinar os dados:
Query
Response
Esse comando tem vários recursos sutis. O operador file permite ler o arquivo a partir de um disco local, especificando apenas o formato CSVWithNames. O mais importante é que o esquema é inferido automaticamente a partir do conteúdo do arquivo. Observe também como o clickhouse-local consegue ler o arquivo comprimido, inferindo o formato gzip pela extensão. O formato Vertical é usado para facilitar a visualização dos dados de cada coluna.
3

Carregue os dados com inferência de esquema

A ferramenta mais simples e poderosa para carregar dados é o clickhouse-client: um cliente nativo de linha de comando completo. Para carregar dados, você pode mais uma vez usar a inferência de esquema, deixando que o ClickHouse determine os tipos das colunas.Execute o comando abaixo para criar uma tabela e inserir os dados diretamente do arquivo CSV remoto, acessando seu conteúdo por meio da função url. O esquema é inferido automaticamente:
Isso cria uma tabela vazia usando o esquema inferido a partir dos dados. O comando DESCRIBE TABLE nos permite entender quais tipos foram atribuídos.
Query
Response
Para inserir os dados nesta tabela, use o comando INSERT INTO, SELECT. Com a função url, os dados serão lidos diretamente da URL:
Você inseriu 28 milhões de linhas no ClickHouse com um único comando!
4

Explore os dados

Obtenha uma amostra das histórias do Hacker News e de colunas específicas executando a consulta a seguir:
Query
Response
Embora a inferência de esquema seja uma ótima ferramenta para a exploração inicial dos dados, ela funciona com base no melhor esforço e não substitui, no longo prazo, a definição de um esquema ideal para seus dados.
5

Defina um esquema

Uma otimização imediata e óbvia é definir um tipo para cada campo. Além de declarar o campo de tempo como do tipo DateTime, definimos um tipo apropriado para cada um dos campos abaixo após remover o conjunto de dados existente. No ClickHouse, o id da chave primária dos dados é definido por meio da cláusula ORDER BY.Selecionar os tipos apropriados e escolher quais colunas incluir na cláusula ORDER BY ajudará a melhorar a velocidade das consultas e a compressão.Execute a consulta abaixo para remover o esquema antigo e criar o esquema aprimorado:
Query
Com um esquema otimizado, agora você pode inserir os dados a partir do sistema de arquivos local. Novamente com o clickhouse-client, insira o arquivo usando a cláusula INFILE, com um INSERT INTO explícito.
Query
6

Executar consultas de exemplo

Algumas consultas de exemplo são apresentadas abaixo para inspirar você a escrever suas próprias consultas.

Com que frequência o tema “ClickHouse” aparece no Hacker News?

O campo score fornece uma métrica de popularidade para as histórias, enquanto o campo id e o operador de concatenação || podem ser usados para gerar um link para a publicação original.
Query
Response
O ClickHouse está gerando mais ruído ao longo do tempo? Aqui fica evidente a utilidade de definir o campo time como DateTime, pois usar um tipo de dado adequado permite utilizar a função toYYYYMM():
Query
Response
Parece que o “ClickHouse” está crescendo em popularidade com o tempo.

Quem são os que mais comentam em artigos relacionados ao ClickHouse?

Query
Response

Quais comentários geram mais interesse?

Query
Response

Parquet

Um dos pontos fortes do ClickHouse é sua capacidade de lidar com uma ampla variedade de formatos. O CSV representa um caso de uso bastante comum, mas não é o formato mais eficiente para troca de dados. Em seguida, você carregará os dados de um arquivo Parquet, um formato eficiente orientado a colunas. O Parquet tem um conjunto mínimo de tipos, que o ClickHouse precisa respeitar, e essas informações de tipo são codificadas no próprio formato. A inferência de tipos em um arquivo Parquet invariavelmente resultará em um esquema ligeiramente diferente do arquivo CSV.
1

Insira os dados

Execute a consulta a seguir para ler os mesmos dados no formato Parquet, usando novamente a função url para ler os dados remotos:
Chaves nulas no ParquetO esquema inferido define as colunas como Nullable, portanto allow_nullable_key é necessário, embora este conjunto de dados não contenha IDs nulos.
Execute o comando a seguir para visualizar o esquema inferido:
Query
Response
As etapas restantes usam nomes de coluna mais claros, como author e comment, portanto, continue com um schema definido manualmente. Primeiro, exclua a tabela inferida. Em seguida, crie a tabela e insira os dados diretamente do bucket público do S3:
2

Adicione um índice de texto para acelerar as pesquisas

Para saber quantos comentários mencionam “ClickHouse”, execute a seguinte consulta:
Query
Response
Em seguida, crie um índice de texto na coluna comment para acelerar esta consulta. Um índice de texto usa um índice invertido que mapeia tokens às linhas que os contêm. O tokenizador splitByNonAlpha divide o texto em caracteres não alfanuméricos. O índice e as consultas usam lower(comment) com termos de busca em minúsculas, de modo que a correspondência não diferencia maiúsculas de minúsculas. A expressão da consulta deve corresponder à expressão indexada.Execute os comandos a seguir para criar o índice:
A materialização cria o índice para os dados existentes. A configuração mutations_sync aguarda a conclusão da materialização. Você pode verificar a definição do índice na tabela system.data_skipping_indices.Execute novamente a mesma consulta após a materialização do índice:
Query
Response
O resultado permanece o mesmo porque o índice altera como o ClickHouse encontra as linhas correspondentes, e não quais linhas correspondem. A consulta indexada processa consideravelmente menos dados e é concluída muito mais rápido. Use EXPLAIN para confirmar que o ClickHouse pretende aplicar o índice:
Query
Response
A entrada comment_idx mostra que o ClickHouse planeja aplicar o índice de texto. Neste exemplo, o plano seleciona 547 dos 3527 grânulos, reduzindo substancialmente a quantidade de dados analisados.Você também pode pesquisar um ou todos entre vários tokens. Essas funções correspondem a tokens completos produzidos pelo tokenizador do índice. Use hasAnyTokens quando pelo menos um token precisar corresponder:
Query
Response
Use hasAllTokens quando todos os tokens precisarem corresponder, em qualquer ordem:
Query
Response
Última modificação em 26 de agosto de 2026