Transformations SQL au sein de l'OVHcloud Data Platform
SQL (Structured Query Language) demeure le langage le plus utilisé et le plus efficace pour interroger et transformer des données structurées
Objectif
Bienvenue dans le guide sur les transformations SQL au sein de l'OVHcloud Data Platform. SQL (Structured Query Language) demeure le langage le plus utilisé et le plus efficace pour interroger et transformer des données structurées. Ce document vous présente les concepts clés de l'utilisation de SQL pour la manipulation et l'agrégation de données directement au sein de notre platform, en exploitant ses puissantes capacités de traitement des données.
Que vous souhaitiez nettoyer, remodeler, filtrer ou agréger de grands datasets, SQL offre un moyen robuste et intuitif d'atteindre vos objectifs de transformation de données. Sa nature déclarative vous permet de vous concentrer sur ce que vous voulez obtenir avec vos données, plutôt que sur la manière dont les opérations sont exécutées, ce qui le rend accessible à un large éventail de professionnels de la donnée.
Pourquoi utiliser SQL pour la transformation de données ?
SQL est un outil indispensable dans le pipeline de transformation de données, pour plusieurs raisons clés :
- Universalité : c'est un langage standard, largement adopté par diverses bases de données et data platforms, ce qui rend les compétences facilement transférables.
- Lisibilité et simplicité : sa syntaxe proche de l'anglais rend les opérations complexes relativement faciles à comprendre et à écrire.
- Performance : les moteurs SQL sont hautement optimisés pour les opérations relationnelles, surpassant souvent le code personnalisé pour la manipulation de données à grande échelle.
- Nature déclarative : vous spécifiez l'état final souhaité de vos données, et le moteur détermine la manière la plus efficace de l'atteindre.
- Intégration : s'intègre parfaitement aux outils d'entreposage de données, de business intelligence et de reporting.
Concepts clés des transformations SQL
Dans son principe, la transformation SQL consiste à utiliser des commandes SQL standard pour manipuler les données. Cela peut inclure :
1. Nettoyage et préparation des données
- Filtrage : utilisation des clauses
WHEREpour sélectionner des lignes spécifiques selon des conditions. - Sélection/Projection : utilisation des instructions
SELECTpour choisir des colonnes spécifiques et les renommer (AS). - Conversion de type : utilisation des fonctions
CASTouTRY_CASTpour changer les types de données.TRY_CASTest particulièrement utile dans Trino pour gérer avec souplesse les erreurs de conversion (en renvoyantNULLau lieu de provoquer un plantage). - Gestion des valeurs manquantes : utilisation des instructions
COALESCEouCASEpour remplacer les valeursNULL. - Manipulation de chaînes de caractères : des fonctions comme
SUBSTRING,LENGTH,UPPER,LOWER,TRIMpour nettoyer et standardiser les données textuelles.
2. Agrégation et synthèse des données
- Regroupement : utilisation de
GROUP BYpour agréger les lignes ayant les mêmes valeurs dans des colonnes spécifiées. - Fonctions d'agrégation : application de fonctions comme
COUNT,SUM,AVG,MIN,MAXaux groupes synthétisés. - Filtrage des agrégations : utilisation des clauses
HAVINGpour filtrer les résultats des opérationsGROUP BY.
3. Remodelage et restructuration des données
- Jointures : combinaison de données provenant de deux tables ou plus sur la base de colonnes liées (
INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL OUTER JOIN). - Unions : combinaison des ensembles de résultats de deux instructions
SELECTou plus (UNION,UNION ALL). - Pivot/Dépivot : transformation de lignes en colonnes (pivot) ou de colonnes en lignes (dépivot) pour modifier la structure des données. En SQL Trino (couramment utilisé dans le DPE), le pivot est souvent réalisé à l'aide de
SUMavecFILTERou d'instructionsCASE, et le dépivot avecCROSS JOIN UNNEST. - Fonctions de fenêtrage : exécution de calculs sur un ensemble de lignes d'une table, liées à la ligne courante, sans regrouper les lignes (
ROW_NUMBER(),RANK(),LEAD(),LAG(),SUM() OVER(),AVG() OVER()).
Transformations SQL sur l'OVHcloud Data Platform (guide pratique)
Cette section fournit un exemple pratique de bout en bout de transformations SQL au sein des Notebooks DPE (Data Processing Environment) de l'OVHcloud Data Platform, en utilisant spécifiquement le SDK et en se concentrant sur le dataset dirty_cafe_sales.
Prérequis
- Téléchargez le fichier dirty_cafe_sales.csv
- Chargez-le dans les Connectors et extrayez les métadonnées à l'aide de l'Analyzer.
- Créez une nouvelle Table à partir de la source dans le Lakehouse Manager
Informations sur le dataset :
Nous allons travailler avec un dataset simulé de ventes de café nommé dirty_cafe_sales. Il contient les colonnes suivantes et les problèmes de qualité de données connus :
1. Créer un nouveau notebook DPE
- Naviguez vers Data Processing Environment (DPE) → Notebooks.
- Cliquez sur + New Notebook et, pour les besoins de ce guide, nous continuerons avec le Base Notebook.
- Donnez à votre notebook un nom explicite (par ex.
Cafe_Sales_SQL_Transformations). - Cliquez sur Create.
- Une fois JupyterLab ouvert, cliquez sur le notebook Python3 pour créer un nouveau fichier
.ipynb. C'est ici que nous allons exécuter toutes les étapes suivantes dans des cellules.
2. Se connecter au SDK
Nous allons utiliser le SDK fourni dans votre environnement DPE. Ce SDK fournit des méthodes pour se connecter au Lakehouse Manager et interagir avec les tables.
3. Lister les tables du dataset
Avant de se connecter à dirty_cafe_sales, il est recommandé de lister les tables disponibles pour confirmer sa présence et son nom exact au sein du chemin de données spécifié.
4. Se connecter à la table et inspecter les données
Maintenant, connectons-nous à la table dirty_cafe_sales à l'aide de connector.select() et affichons ses informations et ses statistiques descriptives. Cette étape permet de confirmer visuellement les données, y compris les valeurs 'ERROR' et 'UNKNOWN' que nous devons nettoyer.
5. Exécuter des commandes SQL (transformations)
C'est le cœur de notre transformation. Nous allons définir deux requêtes SQL : une simple pour une exploration de base et une plus complexe pour un nettoyage approfondi et une agrégation détaillée.
Remarque importante sur les points-virgules : lorsque vous exécutez du SQL via un SDK ou une API dans un environnement programmatique tel qu'un notebook, n'incluez pas de point-virgule final (;) à la toute fin de votre chaîne de requête SQL. L'API attend généralement une seule instruction SQL sans délimiteur explicite à la fin. En inclure un peut entraîner des erreurs courantes telles que mismatched input ';' ou syntax error near ';'.
5.1 Requête SQL simple : total des ventes quotidien par emplacement (exploration initiale)
Cette requête illustre une agrégation basique, montrant d'abord comment les problèmes de données brutes peuvent entraîner des erreurs, puis les corrigeant à l'aide de TRY_CAST pour plus de robustesse. Elle nettoie également le champ location.
5.2 Requête SQL complexe : performance quotidienne détaillée et nettoyée par article
Cette requête effectue un nettoyage de données robuste, calcule des métriques de vente précises, et les agrège par date, article et emplacement. Elle traite directement les problèmes de qualité de données identifiés (UNKNOWN dans quantity, ERROR dans total_spent, chaînes transaction_date invalides, et entrées location problématiques).
6. Créer une table physique à partir des données transformées (CTAS)
Après avoir réalisé avec succès la transformation complexe et vérifié les résultats, l'étape logique suivante consiste à persister ces données nettoyées et agrégées dans une nouvelle table physique de votre base de données. Cela se fait généralement à l'aide d'une instruction CREATE TABLE AS SELECT (CTAS). Cette nouvelle table peut ensuite être utilisée pour le reporting, des analyses supplémentaires, ou comme source pour d'autres traitements de données, sans avoir besoin de réexécuter la logique de nettoyage complexe à chaque fois.
Remarque importante sur l'exécution SQL : certains connecteurs ou API de base de données n'attendent qu'une seule instruction SQL par appel query(). Pour exécuter DROP TABLE et CREATE TABLE AS SELECT, nous les enverrons sous forme de commandes séparées. Assurez-vous également qu'il n'y a pas de points-virgules finaux à la toute fin de chaque chaîne de requête.
7. Explorer la nouvelle table physique
Vous pouvez utiliser des commandes de métadonnées SQL standard pour explorer votre table physique nouvellement créée. N'oubliez pas de remplacer <your_catalog_name> et <your_schema_name> par vos valeurs réelles.
8. Créer un objet logique à partir de la table physique
Lorsque vous créez une nouvelle table via SQL, elle n'existe qu'en tant que table physique dans la base de données. Cependant, la section Tables de l'interface fonctionne à un niveau logique. Elle affiche les tables enregistrées comme des objets logiques au sein de la platform.
Pour rendre votre table physique nouvellement créée visible et utilisable dans l'interface, vous devez créer un objet logique correspondant. Cette représentation logique agit comme un pont entre la base de données et l'interface de la platform, vous permettant d'interagir avec le schéma et les données de la table directement depuis l'interface.
Si vous souhaitez supprimer un LogicalObject que vous avez créé, vous pouvez directement supprimer la table depuis l'interface, ou bien utiliser la méthode - LogicalObject().remove("table_name") - qui supprimera la table à la fois au niveau logique et physique.
Conclusion
Vous avez parcouru avec succès un processus de transformation SQL de bout en bout sur l'OVHcloud Data Platform. En partant d'un dataset brut et non nettoyé, vous avez appliqué diverses techniques SQL de nettoyage, d'agrégation et de remodelage pour produire un dataset propre, synthétisé et hautement utilisable. Ces données transformées ont ensuite été persistées dans une nouvelle table physique et représentées comme un objet logique pour une intégration fluide dans vos workflows Python. Ces connaissances fondamentales vous permettent d'aborder des défis de préparation de données plus complexes et de construire des pipelines de données robustes.
Aller plus loin
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Posez vos questions, faites-nous part de vos commentaires et interagissez directement avec l’équipe qui développe la Data Platform sur le canal Discord dédié.
Si vous avez besoin d'une assistance concernant vos services OVHcloud, créez une demande depuis notre centre d'aide.
Rejoignez notre communauté d'utilisateurs.