Skip to main content

Visão geral

Este tutorial segue o [Tutorial do ClickHouse], mas executa todas as consultas usando o pg_clickhouse.

Inicie o ClickHouse

Primeiro, crie um banco de dados no ClickHouse se você ainda não tiver um. Uma forma rápida de começar é com a imagem Docker:

Criar uma tabela

Vamos usar como base o [tutorial do ClickHouse] para criar um banco de dados simples com o conjunto de dados de táxis da cidade de Nova York:

Adicione o conjunto de dados

Em seguida, importe os dados:
Certifique-se de que é possível consultá-lo e, em seguida, saia do cliente:

Instale pg_clickhouse

Compile e instale o pg_clickhouse pelo PGXN ou pelo GitHub. Ou inicie um contêiner Docker usando a [imagem do pg_clickhouse], que simplesmente adiciona pg_clickhouse à [imagem do Postgres] no Docker:

Conectar o pg_clickhouse

Agora conecte-se ao Postgres:
Depois, crie pg_clickhouse:
Crie um foreign server usando o nome do host, a porta e o banco de dados da sua instância do ClickHouse.
Aqui, optamos por usar o driver binário, que usa o protocolo binário do ClickHouse. Você também pode usar o driver “http”, que usa a interface HTTP. Em seguida, mapeie um usuário do PostgreSQL para um usuário do ClickHouse. A forma mais simples de fazer isso é mapear o usuário atual do PostgreSQL para um usuário remoto no servidor externo:
Você também pode especificar a opção password. Agora, adicione a tabela de táxi: basta importar todas as tabelas do banco de dados ClickHouse remoto para um schema do Postgres:
E agora a tabela já deve estar importada: no psql, use \det+ para visualizá-la:
Pronto! Use \d para mostrar todas as colunas:
Agora, consulte a tabela:
Observe como a consulta foi executada rapidamente. O pg_clickhouse faz o pushdown de toda a consulta, incluindo o agregado COUNT(), para que ela seja executada no ClickHouse e retorne apenas uma única linha ao Postgres. Use EXPLAIN para ver isso:
Observe que “Foreign Scan” aparece na raiz do plano, o que significa que a consulta inteira foi enviada ao ClickHouse.

Analise os dados

Execute algumas consultas para analisar os dados. Confira os exemplos a seguir ou experimente sua própria consulta SQL.
  • Calcule o valor médio da gorjeta:
  • Calcule o custo médio com base no número de passageiros:
  • Calcule o número diário de coletas por bairro:
  • Calcule a duração de cada viagem em minutos e, em seguida, agrupe os resultados por duração da viagem:
  • Mostre o número de embarques em cada bairro, detalhado por hora do dia:
  • Defina o fuso horário de exibição para Nova York e obtenha corridas com destino aos aeroportos LaGuardia ou JFK:

Criar um Dicionário

Crie um dicionário associado a uma tabela no seu serviço ClickHouse. A tabela e o dicionário são baseados em um arquivo CSV que contém uma linha para cada bairro de Nova York. Os bairros são mapeados para os nomes dos cinco boroughs de Nova York (Bronx, Brooklyn, Manhattan, Queens e Staten Island), assim como para o Aeroporto de Newark (EWR). Veja abaixo um trecho do arquivo CSV que você está usando, em formato de tabela. A coluna LocationID no arquivo corresponde às colunas pickup_nyct2010_gid e dropoff_nyct2010_gid na sua tabela de viagens:
  1. Ainda no Postgres, use a função clickhouse_raw_query para criar um [dicionário] do ClickHouse chamado taxi_zone_dictionary e preencher o dicionário a partir do arquivo CSV no S3:
Definir LIFETIME como 0 desativa as atualizações automáticas para evitar tráfego desnecessário para nosso bucket do S3. Em outros casos, você pode configurá-lo de outra forma. Para mais detalhes, consulte Atualização de dados de dicionário usando LIFETIME.
  1. Agora importe-o:
  1. Confirme se conseguimos consultá-lo:
  1. Excelente. Agora use a função dictGet para obter o nome de um borough em uma consulta. Esta consulta soma o número de corridas de táxi por borough que terminam no aeroporto LaGuardia ou no JFK:
Esta consulta totaliza o número de corridas de táxi por borough que terminam em um dos aeroportos LaGuardia ou JFK. Observe que há várias corridas em que o bairro de origem é desconhecido.

Faça um join

Escreva algumas consultas que façam um join entre o taxi_zone_dictionary e a tabela trips.
  1. Comece com um JOIN simples que funciona de forma semelhante à consulta anterior sobre aeroportos:
Observe que a saída da consulta JOIN acima é a mesma da consulta dictGet acima (exceto porque os valores Unknown não estão incluídos). Nos bastidores, o ClickHouse está na verdade chamando a função dictGet para o Dicionário taxi_zone_dictionary, mas a sintaxe JOIN é mais familiar para desenvolvedores SQL.
  1. Esta consulta retorna as linhas das 1000 viagens com o maior valor de gorjeta e, em seguida, faz um inner join de cada linha com o dicionário:
Em geral, evitamos usar SELECT * no PostgreSQL e no ClickHouse. Você deve recuperar apenas as colunas de que realmente precisa.
Última modificação em 12 de junho de 2026