Skip to main content
JupySQL est une bibliothèque Python qui permet d’exécuter du SQL dans les notebooks Jupyter et le shell IPython. Dans ce guide, nous allons apprendre à interroger des données avec chDB et JupySQL.

Préparation

Créons d’abord un environnement virtuel :
Nous allons ensuite installer JupySQL, IPython et Jupyter Lab :
Nous pouvons utiliser JupySQL dans IPython, que nous pouvons démarrer en exécutant :
Ou, dans Jupyter Lab, en exécutant :
Si vous utilisez Jupyter Lab, vous devrez créer un notebook avant de poursuivre le guide.

Téléchargement d’un jeu de données

Nous allons utiliser l’un des jeux de données tennis_atp de Jeff Sackmann, qui contient des métadonnées sur les joueurs et l’évolution de leur classement au fil du temps. Commençons par télécharger les fichiers de classement :

Configurer chDB et JupySQL

Ensuite, importons le module dbapi pour chDB :
Et nous allons créer une connexion à chDB. Toutes les données que nous conserverons seront enregistrées dans le répertoire atp.chdb :
Chargeons maintenant la commande magique sql et créons une connexion à chDB :
Ensuite, nous allons afficher la limite d’affichage pour éviter que les résultats des requêtes ne soient tronqués :
## Interroger des données dans des fichiers CSV Nous avons téléchargé plusieurs fichiers avec le préfixe atp_rankings. Utilisons la clause DESCRIBE pour comprendre le schéma :
Nous pouvons également exécuter une requête SELECT directement sur ces fichiers pour voir à quoi ressemblent les données :
Le format des données est un peu bizarre. Nettoyons cette date et utilisons la clause REPLACE pour retourner le ranking_date nettoyé :

Importation de fichiers CSV dans chDB

Nous allons maintenant stocker les données de ces fichiers CSV dans une table. La base de données par défaut ne conserve pas les données sur le disque, nous devons donc d’abord créer une autre base de données :
Et maintenant, nous allons créer une table appelée rankings, dont le schéma sera déduit de la structure des données contenues dans les fichiers CSV :
Jetons un coup d’œil rapide aux données de notre table :
Cela semble correct : le résultat est, comme prévu, le même que lors de l’interrogation directe des fichiers CSV. Nous allons suivre le même processus pour les métadonnées des joueurs. Cette fois, les données se trouvent dans un seul fichier CSV, alors téléchargeons ce fichier :
Puis créez une table appelée players à partir du contenu du fichier CSV. Nous allons également nettoyer le champ dob afin qu’il soit de type Date32.
Dans ClickHouse, le type Date ne prend en charge que les dates à partir de 1970. Comme le champ dob contient des dates antérieures à 1970, nous utiliserons donc le type Date32.
Une fois l’opération terminée, nous pouvons examiner les données importées :

Interroger chDB

L’ingestion des données est terminée, il est maintenant temps de passer à la partie amusante : interroger les données ! Les joueurs de tennis reçoivent des points en fonction de leurs performances dans les tournois auxquels ils participent. Voici les points de chaque joueur sur une période glissante de 52 semaines. Nous allons écrire une requête qui trouve le nombre maximal de points accumulés par chaque joueur, ainsi que son classement à ce moment-là :
C’est assez intéressant de constater que certains joueurs de cette liste ont accumulé beaucoup de points sans être classés n° 1 avec un tel total.

Enregistrement des requêtes

Vous pouvez enregistrer des requêtes en utilisant le paramètre --save sur la même ligne que la commande magique %%sql. Le paramètre --no-execute indique que l’exécution de la requête sera ignorée.
Lorsqu’une requête enregistrée est exécutée, elle est convertie en Common Table Expression (CTE) avant son exécution. Dans la requête suivante, nous calculons le nombre maximal de points obtenus par les joueurs lorsqu’ils étaient classés au rang 1 :

Requêtes avec paramètres

Nous pouvons également utiliser des paramètres dans nos requêtes. Les paramètres sont simplement des variables normales :
On peut ensuite utiliser la syntaxe {{variable}} dans notre requête. La requête suivante identifie les joueurs pour lesquels le nombre de jours entre leur première et leur dernière présence dans le top 10 était le plus faible :

Créer des histogrammes

JupySQL propose également des fonctionnalités de création de graphiques limitées. Nous pouvons créer des boîtes à moustaches ou des histogrammes. Nous allons créer un histogramme, mais commençons par écrire (et enregistrer) une requête qui calcule les classements dans le top 100 obtenus par chaque joueur. Nous pourrons nous en servir pour créer un histogramme qui compte combien de joueurs ont obtenu chaque classement :
Nous pouvons ensuite créer un histogramme en exécutant la commande suivante :
Dernière modification le 23 juillet 2026