Premières requêtes SQL
Introduction
Vous allez réaliser ce TP su un Datalab.
Un TP dédié vous expliquera plus en détail ce qu’est le Datalab.
Le Datalab permet aux utilisateurs de lancer facilement des services pour travailler avec des langages comme R ou Python, ou encore gérer des bases de données.
Il offre une grande puissance de calcul, ce qui permet de traiter de gros volumes de données et de réaliser des analyses complexes sans se soucier des limites techniques.
Avec cette plateforme :
- les utilisateurs accèdent aux ressources nécessaires en quelques clics
- sans devoir installer eux-mêmes les logiciels
- ni configurer les serveurs
Datalab du GENES ou SSPCloud
Connectez-vous à l’une des 2 instances suivantes (elles sont quasiment identiques) :
-
- en créant un compte avec votre mail ENSAI
Pour éviter les problèmes de charges :
- Les élèves fonctionnaires feront le TP sur le SSPCloud
- Les élèves ingénieurs ➡️ Datalab du GENES
VM ENSAI
Uniquement en cas d’indisponibilité des Datalabs, vous pouvez réaliser le TP directement sur la VM. Le logiciel DBeaver est installé.
-
- Type de connexion :
DuckDB
- Suivant
- Path :
:memory:
- Terminer
- Type de connexion :
-
- Editeur SQL ➡️ Script SQL (raccourci : F3)
Cela ouvre une fenêtre dans laquelle vous pouvez saisir du SQL.
1 Lancement du service
Uniquement sur le Datalab.
-
- Allez dans Catalogue de services
- Onglet Databases
CloudBeaver est une application web légère dédiée à la gestion de bases de données. Elle permet de se connecter à divers types de bases de données, qu’elles soient SQL, NoSQL ou hébergées dans le cloud, à partir d’un seul point d’accès via un navigateur. CloudBeaver facilite l’exploration, la modification et la visualisation des données sans nécessiter l’installation de logiciels locaux.
Elle offre également des fonctionnalités de sécurité pour protéger l’accès aux données. Son interface conviviale en fait un outil accessible aussi bien aux développeurs qu’aux analystes de données.
Pour ce premier TP, nous n’allons pas utiliser de base de données PostgreSQL. Nous allons simplement utiliser DuckDB pour lire des fichiers de données.
DuckDB est un moteur de base de données relationnelle conçu pour des analyses rapides et efficaces.
DuckDB est idéal pour les charges de travail analytiques en raison de sa simplicité, de sa rapidité et de son extensibilité, surtout pour traiter des fichiers volumineux localement.
Caractéristique | Description |
---|---|
Simplicité | Fonctionne sans serveur, intégré dans le processus hôte. Aucune dépendance externe pour la compilation ou l’exécution, simplifiant son déploiement. |
Rapidité | Optimisé pour l’analytique (OLAP) avec un moteur d’exécution vectorisé en colonnes, réduisant le temps de traitement pour les requêtes complexes. |
Richesse fonctionnelle | Supporte des requêtes SQL complexes, fonctions de fenêtre, index secondaires, et assure des garanties ACID grâce au contrôle de concurrence (MVCC). |
Extensibilité | Permet l’ajout de types de données, fonctions et formats de fichiers via des extensions (supporte Parquet, JSON, S3, HTTP(S)). |
Gratuit et open-source | Licence MIT, code source disponible et contributions ouvertes à tous. |
-
- En haut à gauche, cliquez sur le +, puis New connection
- Sélectionner DuckDB
- Cliquez sur le bouton CREATE
-
- Dans l’explorer à gauche, clic droit sur votre connection DuckDB ➡️ SQL Editor
- vous pouvez maintenant saisir du code SQL
2 Les prénoms
Le fichier des prénoms contient des données sur les prénoms attribués aux enfants nés en France depuis 1900. Ces données sont disponibles au niveau France et par département.
Dans ce TP, nous allons utiliser la version au format parquet, mise à disposition sur le site data.gouv par Icem7.
Le format Parquet est un format de fichier de stockage de données optimisé pour les systèmes de traitement analytique de grande échelle. Voici ses principales caractéristiques :
Stockage en colonnes : Parquet stocke les données par colonnes plutôt que par lignes, ce qui améliore l’efficacité de l’accès aux données dans les charges de travail analytiques.
Compression efficace : La compression par colonne permet un taux de compression moyen de 5 à 10 fois par rapport aux formats CSV, voire plus pour de gros fichiers. Cela réduit significativement la taille des données stockées et le coût de stockage.
Optimisé pour l’analytique : Parquet est conçu pour les requêtes en lecture intensive, car il permet de charger uniquement les colonnes nécessaires pour une analyse, ce qui améliore les performances en particulier sur les données volumineuses.
Métadonnées Riches et Auto-descriptives : Parquet inclut des métadonnées détaillées (schéma, types de données, statistiques min/max), permettant une lecture rapide et sans risque d’erreur. Ces métadonnées facilitent également le traitement des données par différents outils.
Langage Indépendant et Open Source : Le format Parquet est indépendant du langage et peut être utilisé avec divers langages de programmation (Python, R, C++, Java). Il est aussi open source et compatible avec la plupart des frameworks de big data.
Pour en savoir plus sur le format Parquet :
-
CREATE OR REPLACE VIEW prenom AS FROM 'https://static.data.gouv.fr/resources/base-prenoms-insee-format-parquet/20231121-161435/prenoms-nat2022.parquet'
- Vous pourrez ensuite requêter sur cette vue comme si c’était une table
Cliquez sur la requête pour y positionner le pointeur de la souris, puis au choix :
- Cliquez sur le petit triangle orange
- CTRL + ENTREE
2.1 Premières requêtes
Prenez le temps et l’habitude d’écrire de jolies requêtes bien alignées !!!
bien.sql
SELECT c.nom AS club,
AVG(j.elo) AS moyenne_elo
FROM joueuse j
INNER JOIN club c USING (id_club)
WHERE j.mail IS NOT NULL
GROUP BY c.nom
ORDER BY 2 DESC;
pasbien.sql
SELECT c.nom AS club, AVG(j.elo) AS moyenne_elo FROM joueuse j INNER JOIN club c USING (id_club) WHERE mail IS NOT NULL GROUP BY c.nom ORDER BY 2 DESC;
Les prénoms ayant un nombre insuffisant d’occurrences sont regroupés sous une appellation générique. Cela permet de protéger le secret statistique et de garantir l’anonymat.
Sans cette précaution, par exemple :
- si vous vous appeliez Yann-Adam LEFGRIGO
- et que vous êtes le seul à porter ce prénom
- n’importe qui pourrait connaître votre année de naissance
De même, si vous êtiez 2 à porter ce prénom, l’autre Yann-Adam connaitrait aussi votre année de naissance. Ce n’est toujours pas satisfaisant. Il faut donc à minima 3 individus pour garantir l’anonymat.
-
- Classez-ces années en décroissant
- Que remarquez-vous ?
2.2 Année 2022
-
- Classez-les en décroissant par le nombre de fois où ils sont été donnés
-
- Quels sont les prénoms masculins et féminins les plus donnés ?
-
- Pour extraite la première lettre d’un prénom, vous pouvez par exemple utiliser la fonction
SUBSTRING
- Bonus : différenciez filles et garçons
- Pour extraite la première lettre d’un prénom, vous pouvez par exemple utiliser la fonction
2.3 Statistiques descriptives
-
- Trouvez une fonction adéquate
-
- classez par année
- Difficulty : ⭐ ⭐ ⭐
-
- classez par année
- utilisez la fonction
ROUND(<value>, 2)
pour arrondir les moyennes - Que remarquez-vous ?
Dans cette partie vous allez avoir besoin d’utiliser des sous-requêtes
2.4 Jérôme, c’est moi
-
- classez par année décroissante
- Que remarquez-vous ?
-
- recherchez une fonction DuckDB qui permet de répondre à ce besoin
- voir Fontion DuckDB strip_accents()
- Regroupez par strip_accents(preusuel) et annais
- Affichez strip_accents(preusuel), annais et la somme de la colonne nombre
2.5 Suivi temporel
-
- Classez par année décroissante
-
- Remarque : vous n’aurez pas le nombre exact car certains sont dans les prénoms rares
Même si le champ annais n’est pas de type numérique, il est possible de comparer des chaines de caractères.
Le code ASCII est utilisé pour comparer le premier caractère de la chaine, puis en cas d’égalité, le 2e caractère…
2.6 Prénoms composés
Nous allons maintenant nous interesser aux prénoms composés entre 2000 et 2009
-
- Triez en décroissant par ce nombre
-
- Que remarquez-vous ? N’y a-t-il pas des intrus ?
-
- Par exemple avec la fonction DuckDB
split_part()
- Par exemple avec la fonction DuckDB
2.7 Cette année-là
-
- exemple : ici Dominique (H) et Dominique (F) comptent pour 2 prénoms
-
- affichez le nombre de fois où ils ont été donnés à chaque sexe
-
- True si le prénom a été donné à plus de filles que de garçons
- False sinon
3 Fichier des individus
-
CREATE OR REPLACE VIEW individus AS FROM 'https://static.data.gouv.fr/resources/recensement-de-la-population-fichiers-detail-individus-localises-au-canton-ou-ville-2020-1/20231023-122841/fd-indcvi-2020.parquet';
-
- Pourquoi ce nombre d’individus vivant en France paraît faible ?
Dans de nombreuses bases de données de l’INSEE, la variable ipondi
représente le poids de l’individu.
i.e. Si une ligne a un IPONDI égal à 2, cela signifie qu’elle représente 2 individus.
-
- Vous pouvez suffixer votre somme par
::INT
pour convertir ce nombre en entier
- Vous pouvez suffixer votre somme par
-
- Que remarquez-vous ?
Pourquoi utiliser une codification pour le fichier national individus localisés au canton-ou-ville du recensement de la population 2020 ?
- Espace de stockage réduit : Les codes courts remplacent des chaînes de texte plus longues, ce qui diminue la taille du fichier et rend le stockage et le transfert de données plus efficaces. Même après codification, le fichier pèse plus de 500 Mo
- Standardisation et uniformité : Utiliser des codes standardisés permet de garantir une structure homogène et facilite l’intégration et la comparaison des données entre différents fichiers ou études.
- Performances de traitement : Les codes sont plus rapides à traiter que des textes longs, notamment pour des opérations de recherche, de tri, et de filtrage, ce qui est crucial pour les grands ensembles de données.
-
CREATE OR REPLACE VIEW variables_individus AS FROM 'https://static.data.gouv.fr/resources/recensement-de-la-population-fichiers-detail-individus-localises-au-canton-ou-ville-2020-1/20231025-082910/dictionnaire-variables-indcvi-2020.csv'
-
- ordonnez par numéro de département
-
- restreignant sur les individus entre 25 et 29 ans
- différenciant les hommes et les femmes
Arrêtez votre service
C’est la fin du TP, vous pouvez maintenant sauvegarder votre travail et libérer les ressources réservées :
-
- par exemple dans
P:/Cours1A/UE3-Bases-de-donnees-relationnelles/TP1/tp1.sql
- par exemple dans