Skip to main content
JupySQL é uma biblioteca Python que permite executar SQL em notebooks Jupyter e no shell do IPython. Neste guia, vamos aprender a consultar dados usando o chDB e o JupySQL.

Configuração

Vamos criar primeiro um ambiente virtual:
E então, vamos instalar o JupySQL, o IPython e o Jupyter Lab:
Podemos usar o JupySQL no IPython, que pode ser iniciado executando:
Ou, no Jupyter Lab, executando:
Se você estiver usando o Jupyter Lab, precisará criar um notebook antes de seguir com o restante do guia.

Baixando um conjunto de dados

Vamos usar o conjunto de dados de táxis da cidade de Nova York, que contém cerca de 3 milhões de corridas, incluindo a tarifa, a gorjeta e o bairro de embarque de cada uma. As corridas estão divididas em vários arquivos TSV, então vamos começar fazendo o download deles:

Configurando o chDB e o JupySQL

Em seguida, vamos importar o módulo dbapi do chDB:
E vamos criar uma conexão com o chDB. Todos os dados que persistirmos serão salvos no diretório taxi.chdb:
Agora, vamos carregar a magic sql e criar uma conexão com o chDB:
Em seguida, vamos mostrar o limite de exibição para que os resultados das consultas não sejam truncados:

Consultando dados em arquivos TSV

Baixamos vários arquivos com o prefixo trips_. Vamos usar a cláusula DESCRIBE para entender o esquema:
Também podemos executar uma consulta SELECT diretamente nesses arquivos para ver como os dados se apresentam:
Ao examinarmos novamente o esquema, algumas colunas relacionadas a valores monetários — trip_distance, fare_amount e tip_amount — foram inferidas como String, em vez de um tipo numérico. Vamos corrigir isso ao importar os dados para uma tabela.

Importando arquivos TSV para o chDB

Agora, vamos armazenar os dados desses arquivos TSV em uma tabela. O banco de dados default não persiste dados em disco, portanto, primeiro precisamos criar outro banco de dados:
Agora, vamos criar uma tabela chamada trips, cujo esquema será derivado da estrutura dos dados nos arquivos TSV. Usaremos a cláusula REPLACE para converter as colunas de valores monetários em Float64 e a função transform para converter a coluna numérica pickup_borocode em um nome de distrito legível:
Vamos verificar rapidamente os dados na nossa tabela:
Pouco mais de 3 milhões de viagens — vamos também importar uma segunda tabela. A Taxi & Limousine Commission da cidade de Nova York divide a cidade em zonas de táxi, e um arquivo de consulta associa cada zona ao respectivo distrito. Vamos baixar esse arquivo:
Em seguida, crie uma tabela chamada zones com base no conteúdo do arquivo CSV:
Quando a execução terminar, podemos conferir os dados que ingerimos:

Consultando o chDB

A ingestão de dados foi concluída; agora chegou a hora da parte divertida: consultar os dados! Cada distrito é dividido em um número diferente de zonas de táxi. Vamos escrever uma consulta que faz a junção das duas tabelas para descobrir quantas viagens começaram em cada distrito e quantas viagens isso representa por zona de táxi:
Manhattan e Queens têm o mesmo número de zonas de táxi, mas Manhattan registra mais de 14 vezes mais corridas.

Salvando consultas

É possível salvar consultas usando o parâmetro --save na mesma linha do magic %%sql. O parâmetro --no-execute faz com que a execução da consulta seja ignorada.
Quando executamos uma consulta salva, ela é convertida em uma expressão de tabela comum (CTE) antes de ser executada. Na consulta a seguir, calculamos os bairros com a maior média de gorjetas:
As primeiras entradas são bairros com poucas corridas, portanto uma única corrida com valor alto distorce a média. Vamos filtrá-los.

Consultas com parâmetros

Também podemos usar parâmetros em nossas consultas. Parâmetros são apenas variáveis comuns:
Em seguida, podemos usar a sintaxe {{variable}} em nossa consulta. A consulta a seguir encontra os bairros com a maior média de gorjetas entre aqueles com mais de 10.000 viagens:
As corridas de aeroporto recebem, de longe, as maiores gorjetas — essas longas viagens até a cidade pesam no bolso.

Plotando histogramas

O JupySQL também tem recursos limitados de criação de gráficos. Podemos criar box plots ou histogramas. Vamos criar um histograma, mas primeiro vamos escrever (e salvar) uma consulta que retorna a distância de cada viagem com menos de 20 milhas. Poderemos usar isso para criar um histograma que conta quantas viagens se enquadram em cada bucket de distância:
Em seguida, podemos criar um histograma da seguinte forma:
A maioria das viagens é curta, de uma a três milhas, com uma longa cauda que se estende até as viagens para o aeroporto.
Última modificação em 14 de agosto de 2026