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.
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 tennis_atp de Jeff Sackmann, que contém metadados sobre jogadores e seu ranking ao longo do tempo.
Vamos começar baixando os arquivos de ranking:
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 atp.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 CSV
Baixamos vários arquivos com o prefixo atp_rankings.
Vamos usar a cláusula DESCRIBE para entender o esquema:
Também podemos escrever uma consulta SELECT diretamente nesses arquivos para ver como são os dados:
O formato dos dados está meio estranho.
Vamos ajustar essa data e usar a cláusula REPLACE para retornar a ranking_date ajustada:
Importando arquivos CSV no chDB
Agora vamos armazenar os dados desses arquivos CSV em uma tabela.
O banco de dados padrão não persiste os dados em disco, então primeiro precisamos criar outro banco de dados:
E agora vamos criar uma tabela chamada rankings, cujo esquema será derivado da estrutura dos dados nos arquivos CSV:
Vamos dar uma olhada rápida nos dados da nossa tabela:
Parece bom — a saída, como esperado, é a mesma de quando consultamos os arquivos CSV diretamente.
Vamos seguir o mesmo processo para os metadados dos jogadores.
Desta vez, os dados estão todos em um único arquivo CSV, então vamos baixá-lo:
Em seguida, crie uma tabela chamada players com base no conteúdo do arquivo CSV.
Também vamos ajustar o campo dob para que ele seja do tipo Date32.
No ClickHouse, o tipo Date só oferece suporte a datas a partir de 1970. Como a coluna dob contém datas anteriores a 1970, usaremos o tipo Date32.
Quando isso terminar de executar, podemos dar uma olhada nos dados que ingerimos:
A ingestão de dados foi concluída; agora é hora da parte divertida: consultar os dados!
Os tenistas recebem pontos com base em seu desempenho nos torneios que disputam.
Os pontos de cada jogador ao longo de um período móvel de 52 semanas.
Vamos escrever uma consulta que encontra o número máximo de pontos acumulados por cada jogador, junto com seu ranking naquele momento:
É bastante interessante que alguns dos jogadores desta lista tenham acumulado muitos pontos sem ocupar o 1º lugar com esse total de pontos.
Podemos salvar consultas usando o parâmetro --save na mesma linha da mágica %%sql.
O parâmetro --no-execute significa que a execução da consulta será pulada.
Ao executar uma consulta salva, ela é convertida em uma Common Table Expression (CTE) antes de ser executada.
Na consulta a seguir, calculamos a pontuação máxima alcançada pelos jogadores quando estavam em 1º lugar no ranking:
Também podemos usar parâmetros em nossas consultas.
Parâmetros são apenas variáveis comuns:
E então podemos usar a sintaxe {{variable}} na nossa consulta.
A consulta a seguir identifica os jogadores que tiveram o menor intervalo de dias entre a primeira vez em que entraram no top 10 do ranking e a última vez em que ficaram no top 10 do ranking:
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 calcula as posições no top 100 que cada jogador alcançou.
Poderemos usar isso para criar um histograma que mostra quantos jogadores alcançaram cada posição:
Em seguida, podemos criar um histograma da seguinte forma: