Proposer une tâche SQL sur DuckDB, avec un fichier de données
SQL (DuckDB) est un second langage SQL à côté de SQLite, avec les mêmes deux onglets : la requête que l’élève écrit et le schéma qui construit la base sur laquelle elle s’exécute. DuckDB est fait pour l’analyse : il enseigne ce que SQLite n’enseigne pas, les fonctions de fenêtre, la lecture d’un fichier CSV directement par son nom et la lecture d’un plan de requête.
Ce que c’est, et quand le choisir
Choisissez SQL (DuckDB) quand la leçon porte sur l’analyse de données : cumuls et classements avec `OVER`, `QUALIFY`, regroupement d’un fichier de relevés, ou raison pour laquelle une requête est plus lente qu’une autre. Choisissez SQLite pour les tables, les clés et le premier `select`. Une tâche est de l’un ou de l’autre pour de bon : l’élève ne voit jamais le dialecte changer sous ses doigts.
Chaque exécution construit une base neuve et vide en mémoire, dans son propre conteneur, applique votre schéma puis la requête, exactement comme pour SQL. Rien de ce que fait un élève n’atteint un autre, et rien n’est conservé d’une exécution à la suivante.
Une nouvelle tâche DuckDB s’ouvre avec une petite table de ventes et une requête qui utilise une fonction de fenêtre, avec un corrigé qui réussit déjà.
Apporter un fichier de données
À côté de la sortie, un contrôle de fichier de données permet de joindre un fichier à la tâche. La requête le lit par son nom : `select * from 'readings.csv'`, ou `read_json` pour des lignes JSON. Tous les élèves qui font la tâche lisent les mêmes données, et un élève peut ajouter le sien à côté, sous un autre nom.
Sont acceptés les fichiers CSV, TSV et lignes JSON, au format texte, de 64 Ko au plus chacun. Les fichiers Parquet ne sont pas acceptés, car un fichier de données doit être du texte, et un fichier qui n’a que la mauvaise extension est refusé lui aussi : la page dit quels types elle lit quand elle en refuse un. Le schéma peut être vide quand le fichier suffit comme données.
Ce qu’une requête ne peut pas faire
DuckDB s’exécute sans réseau et sans moyen de s’ajouter quoi que ce soit. Une requête peut lire le fichier de données de la tâche et rien d’autre : elle ne peut ni lire un autre fichier, ni en écrire un, ni attacher une base, ni installer une extension, ni lancer une commande. Chaque tentative est refusée avec les mots de DuckDB, par exemple que les opérations sur le système de fichiers sont désactivées : l’élève qui essaie voit pourquoi, et l’enseignant peut le montrer à la classe.
Les limites de temps, de mémoire et de processus sont celles d’une exécution SQL. Une requête qui veut plus de mémoire qu’on ne lui en donne s’arrête avec le message de mémoire insuffisante de DuckDB.
L’exécuter et la corriger
« Exécuter » lance la requête et affiche les lignes sous forme de simple tableau ; « Exécuter le schéma » reconstruit la base et actualise les tables affichées à côté. `EXPLAIN ANALYZE` affiche le plan avec les lignes et le temps de chaque étape : c’est le moyen d’expliquer pourquoi une requête est rapide.
La correction est celle de SQL. Donnez un corrigé à la tâche et « Exécuter les tests » exécute la requête de l’élève et la vôtre sur le même schéma et le même fichier de données, puis compare leurs lignes sans tenir compte de l’ordre mais en tenant compte des doublons. Le résultat est une simple réussite ou un simple échec, et une requête qui ne peut pas s’exécuter affiche « Exécution impossible » plutôt que « échec ».
Ce que cela coûte, et comment l’essayer
Un établissement a ses 365 premiers jours gratuits, pour 50 élèves au plus et sans carte, et tout ce que décrit cette page en fait partie. Ensuite, le prix est par élève et par an, les enseignants gratuits, et les labs, les machines virtuelles et l’IA sont compris dans une limite d’usage raisonnable. La page des tarifs donne le montant dans votre devise, avec un calculateur.
Questions fréquentes
- Les élèves peuvent-ils utiliser des fichiers Parquet ?
- Pas encore. Un fichier de données est du texte : les fichiers CSV, TSV et lignes JSON sont acceptés, et un fichier Parquet est refusé par une phrase qui le dit.
- Une requête peut-elle installer une extension ou lire sur Internet ?
- Non. L’exécution n’a pas de réseau et sa configuration est verrouillée avant le début de la requête : on ne peut rien rallumer.
- Puis-je utiliser DuckDB dans une leçon ?
- Oui. Un bloc de code DuckDB dans une leçon a les deux mêmes onglets et s’exécute sur DuckDB.