Pular para o conteúdo principal

Visão geral

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

Inicie o ClickHouse

Primeiro, crie um banco de dados no ClickHouse, caso ainda não tenha um. Uma forma rápida de começar é usar a imagem Docker:

Criar uma tabela

Vamos usar o [tutorial do ClickHouse] como base 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

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

Instale o pg_clickhouse

Faça a compilação e instale o pg_clickhouse a partir do PGXN ou do GitHub. Ou inicie um container Docker usando a [imagem do pg_clickhouse], que simplesmente adiciona o pg_clickhouse à [imagem do Postgres] no Docker:

Conectar pg_clickhouse

Agora conecte-se ao Postgres:
E crie pg_clickhouse:
Crie um servidor externo 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 remoto ClickHouse para um schema do Postgres:
E agora a tabela já deve estar importada: No psql, use \det+ para vê-la:
Sucesso! Use \d para mostrar todas as colunas:
Agora, consulte a tabela:
Observe como a consulta foi executada rapidamente. O pg_clickhouse envia toda a consulta, incluindo a agregação 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 executada no ClickHouse.

Analise os dados

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

Crie um dicionário

Crie um dicionário associado a uma tabela no seu serviço ClickHouse. A tabela e o dicionário se baseiam em um arquivo CSV que contém uma linha para cada bairro da cidade de Nova York. Os bairros são mapeados para os nomes dos cinco boroughs da cidade de Nova York (Bronx, Brooklyn, Manhattan, Queens e Staten Island), bem como para o aeroporto de Newark (EWR). Aqui está um trecho do arquivo CSV que você está usando em formato de tabela. A coluna LocationID no arquivo é mapeada para as 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 com base no arquivo CSV no S3:
Definir LIFETIME como 0 desativa as atualizações automáticas para evitar tráfego desnecessário no nosso bucket do S3. Em outros casos, talvez você o configure de outra forma. Para mais detalhes, consulte Atualização de dados de dicionário usando LIFETIME.
  1. Agora importe-o:
  1. Confirme se podemos consultá-la:
  1. Excelente. Agora use a função dictGet para recuperar o nome de um distrito em uma consulta. A consulta a seguir soma o número de corridas de táxi por distrito que terminam no aeroporto LaGuardia ou no JFK:
Esta consulta soma 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 taxi_zone_dictionary e sua tabela trips.
  1. Comece com um JOIN simples que funciona de forma semelhante à consulta de aeroporto anterior:
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 entre cada linha e 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 10 de junho de 2026